Merge branch 'v0.22.x'
This commit is contained in:
commit
a4b236348f
4
NEWS
4
NEWS
|
@ -3,6 +3,10 @@ ver 0.23 (not yet released)
|
|||
- new command "getvol"
|
||||
|
||||
ver 0.22.5 (not yet released)
|
||||
* tags
|
||||
- id: translate TPE3 to Conductor, not Performer
|
||||
* archive
|
||||
- iso9660: another fix for unaligned reads
|
||||
* output
|
||||
- httpd: error handling on Windows improved
|
||||
|
||||
|
|
|
@ -221,8 +221,8 @@ public:
|
|||
if (new_offset > size)
|
||||
throw std::runtime_error("Invalid seek offset");
|
||||
|
||||
offset = new_offset;
|
||||
skip = new_offset % ISO_BLOCKSIZE;
|
||||
offset = new_offset - skip;
|
||||
buffer.Clear();
|
||||
}
|
||||
};
|
||||
|
@ -260,13 +260,13 @@ Iso9660InputStream::Read(std::unique_lock<Mutex> &,
|
|||
if (r.empty()) {
|
||||
/* the buffer is empty - read more data from the ISO file */
|
||||
|
||||
assert(offset % ISO_BLOCKSIZE == 0);
|
||||
assert((offset - skip) % ISO_BLOCKSIZE == 0);
|
||||
|
||||
const ScopeUnlock unlock(mutex);
|
||||
|
||||
const lsn_t read_lsn = lsn + offset / ISO_BLOCKSIZE;
|
||||
|
||||
if (read_size >= ISO_BLOCKSIZE) {
|
||||
if (read_size >= ISO_BLOCKSIZE && skip == 0) {
|
||||
/* big read - read right into the caller's buffer */
|
||||
|
||||
auto nbytes = iso->SeekRead(ptr, read_lsn,
|
||||
|
|
|
@ -352,7 +352,7 @@ scan_id3_tag(const struct id3_tag *tag, TagHandler &handler) noexcept
|
|||
handler);
|
||||
tag_id3_import_text(tag, ID3_FRAME_COMPOSER, TAG_COMPOSER,
|
||||
handler);
|
||||
tag_id3_import_text(tag, "TPE3", TAG_PERFORMER,
|
||||
tag_id3_import_text(tag, "TPE3", TAG_CONDUCTOR,
|
||||
handler);
|
||||
tag_id3_import_text(tag, "TPE4", TAG_PERFORMER, handler);
|
||||
tag_id3_import_text(tag, "TIT1", TAG_GROUPING, handler);
|
||||
|
|
|
@ -56,6 +56,8 @@ struct CommandLine {
|
|||
|
||||
FromNarrowPath config_path;
|
||||
|
||||
std::size_t seek = 0;
|
||||
|
||||
std::size_t chunk_size = MAX_CHUNK_SIZE;
|
||||
|
||||
bool verbose = false;
|
||||
|
@ -67,6 +69,7 @@ enum Option {
|
|||
OPTION_CONFIG,
|
||||
OPTION_VERBOSE,
|
||||
OPTION_SCAN,
|
||||
OPTION_SEEK,
|
||||
OPTION_CHUNK_SIZE,
|
||||
};
|
||||
|
||||
|
@ -74,6 +77,7 @@ static constexpr OptionDef option_defs[] = {
|
|||
{"config", 0, true, "Load a MPD configuration file"},
|
||||
{"verbose", 'v', false, "Verbose logging"},
|
||||
{"scan", 0, false, "Scan tags instead of reading raw data"},
|
||||
{"seek", 0, true, "Start reading at this position"},
|
||||
{"chunk-size", 0, true, "Read this number of bytes at a time"},
|
||||
};
|
||||
|
||||
|
@ -108,6 +112,10 @@ ParseCommandLine(int argc, char **argv)
|
|||
c.scan = true;
|
||||
break;
|
||||
|
||||
case OPTION_SEEK:
|
||||
c.seek = ParseSize(o.value);
|
||||
break;
|
||||
|
||||
case OPTION_CHUNK_SIZE:
|
||||
c.chunk_size = ParseSize(o.value);
|
||||
if (c.chunk_size <= 0 || c.chunk_size > MAX_CHUNK_SIZE)
|
||||
|
@ -118,7 +126,7 @@ ParseCommandLine(int argc, char **argv)
|
|||
|
||||
auto args = option_parser.GetRemaining();
|
||||
if (args.size != 1)
|
||||
throw std::runtime_error("Usage: run_input [--verbose] [--config=FILE] URI");
|
||||
throw std::runtime_error("Usage: run_input [--verbose] [--config=FILE] [--scan] [--chunk-size=BYTES] URI");
|
||||
|
||||
c.uri = args.front();
|
||||
return c;
|
||||
|
@ -153,10 +161,14 @@ tag_save(FILE *file, const Tag &tag)
|
|||
}
|
||||
|
||||
static int
|
||||
dump_input_stream(InputStream &is, FileDescriptor out, size_t chunk_size)
|
||||
dump_input_stream(InputStream &is, FileDescriptor out,
|
||||
offset_type seek, size_t chunk_size)
|
||||
{
|
||||
std::unique_lock<Mutex> lock(is.mutex);
|
||||
|
||||
if (seek > 0)
|
||||
is.Seek(lock, seek);
|
||||
|
||||
/* print meta data */
|
||||
|
||||
if (is.HasMimeType())
|
||||
|
@ -256,7 +268,7 @@ try {
|
|||
Mutex mutex;
|
||||
auto is = InputStream::OpenReady(c.uri, mutex);
|
||||
return dump_input_stream(*is, FileDescriptor(STDOUT_FILENO),
|
||||
c.chunk_size);
|
||||
c.seek, c.chunk_size);
|
||||
} catch (...) {
|
||||
PrintException(std::current_exception());
|
||||
return EXIT_FAILURE;
|
||||
|
|
Loading…
Reference in New Issue