decoder/dsdiff: move artist/title/id3 offsets out of DsdiffMetaData

They are only used inside dsdiff_read_metadata_extra().
This commit is contained in:
Max Kellermann 2014-07-11 17:53:35 +02:00
parent 1f9d9c3176
commit 96abd70c13
1 changed files with 14 additions and 22 deletions

View File

@ -67,14 +67,6 @@ struct DsdiffMetaData {
unsigned sample_rate, channels; unsigned sample_rate, channels;
bool bitreverse; bool bitreverse;
uint64_t chunk_size; uint64_t chunk_size;
#ifdef HAVE_ID3TAG
InputStream::offset_type id3_offset;
uint64_t id3_size;
#endif
/** offset for artist tag */
InputStream::offset_type diar_offset;
/** offset for title tag */
InputStream::offset_type diti_offset;
}; };
static bool lsbitfirst; static bool lsbitfirst;
@ -247,11 +239,13 @@ dsdiff_read_metadata_extra(Decoder *decoder, InputStream &is,
if (!dsdiff_read_chunk_header(decoder, is, chunk_header)) if (!dsdiff_read_chunk_header(decoder, is, chunk_header))
return false; return false;
metadata->diar_offset = 0; /** offset for artist tag */
metadata->diti_offset = 0; InputStream::offset_type artist_offset = 0;
/** offset for title tag */
InputStream::offset_type title_offset = 0;
#ifdef HAVE_ID3TAG #ifdef HAVE_ID3TAG
metadata->id3_offset = 0; InputStream::offset_type id3_offset = 0;
#endif #endif
/* Now process all the remaining chunk headers in the stream /* Now process all the remaining chunk headers in the stream
@ -267,20 +261,19 @@ dsdiff_read_metadata_extra(Decoder *decoder, InputStream &is,
/* DIAR chunk - DSDIFF native tag for Artist */ /* DIAR chunk - DSDIFF native tag for Artist */
if (chunk_header->id.Equals("DIAR")) { if (chunk_header->id.Equals("DIAR")) {
chunk_size = chunk_header->GetSize(); chunk_size = chunk_header->GetSize();
metadata->diar_offset = is.GetOffset(); artist_offset = is.GetOffset();
} }
/* DITI chunk - DSDIFF native tag for Title */ /* DITI chunk - DSDIFF native tag for Title */
if (chunk_header->id.Equals("DITI")) { if (chunk_header->id.Equals("DITI")) {
chunk_size = chunk_header->GetSize(); chunk_size = chunk_header->GetSize();
metadata->diti_offset = is.GetOffset(); title_offset = is.GetOffset();
} }
#ifdef HAVE_ID3TAG #ifdef HAVE_ID3TAG
/* 'ID3 ' chunk, offspec. Used by sacdextract */ /* 'ID3 ' chunk, offspec. Used by sacdextract */
if (chunk_header->id.Equals("ID3 ")) { if (chunk_header->id.Equals("ID3 ")) {
chunk_size = chunk_header->GetSize(); chunk_size = chunk_header->GetSize();
metadata->id3_offset = is.GetOffset(); id3_offset = is.GetOffset();
metadata->id3_size = chunk_size;
} }
#endif #endif
@ -291,22 +284,21 @@ dsdiff_read_metadata_extra(Decoder *decoder, InputStream &is,
/* done processing chunk headers, process tags if any */ /* done processing chunk headers, process tags if any */
#ifdef HAVE_ID3TAG #ifdef HAVE_ID3TAG
if (metadata->id3_offset != 0) if (id3_offset != 0) {
{
/* a ID3 tag has preference over the other tags, do not process /* a ID3 tag has preference over the other tags, do not process
other tags if we have one */ other tags if we have one */
dsdlib_tag_id3(is, handler, handler_ctx, metadata->id3_offset); dsdlib_tag_id3(is, handler, handler_ctx, id3_offset);
return true; return true;
} }
#endif #endif
if (metadata->diar_offset != 0) if (artist_offset != 0)
dsdiff_handle_native_tag(is, handler, handler_ctx, dsdiff_handle_native_tag(is, handler, handler_ctx,
metadata->diar_offset, TAG_ARTIST); artist_offset, TAG_ARTIST);
if (metadata->diti_offset != 0) if (title_offset != 0)
dsdiff_handle_native_tag(is, handler, handler_ctx, dsdiff_handle_native_tag(is, handler, handler_ctx,
metadata->diti_offset, TAG_TITLE); title_offset, TAG_TITLE);
return true; return true;
} }