diff --git a/src/libs/ajm/atrac9_decoder.h b/src/libs/ajm/atrac9_decoder.h index b6aab056a..b2d0af72b 100644 --- a/src/libs/ajm/atrac9_decoder.h +++ b/src/libs/ajm/atrac9_decoder.h @@ -464,6 +464,14 @@ private: const auto* chunk = input + offset; const auto chunk_size = static_cast(AjmReadLe32(chunk + 4)); const auto payload = offset + 8; + // The data chunk describes the whole stream; this job may contain only its prefix. + if (AjmFourCcEquals(chunk, 'd', 'a', 't', 'a')) { + *data_offset = payload; + result->input_consumed = payload; + result->format = GetFormat(); + result->total_decoded_samples = m_total_decoded_samples; + return true; + } if (payload > input_size || chunk_size > input_size - payload) { result->result = AJM_RESULT_PARTIAL_INPUT; return false; @@ -496,12 +504,6 @@ private: LOGF("AJM ATRAC9 gapless: total=%" PRIu32 ", skip=%" PRIu16 "\n", gapless_decode.total_samples, gapless_decode.skip_samples); } - } else if (AjmFourCcEquals(chunk, 'd', 'a', 't', 'a')) { - *data_offset = payload; - result->input_consumed = payload; - result->format = GetFormat(); - result->total_decoded_samples = m_total_decoded_samples; - return true; } const auto padded_size = chunk_size + (chunk_size & 1u);