decoder/opus: improved error logging

This commit is contained in:
Max Kellermann 2014-11-11 10:56:36 +01:00
parent 7886a14b74
commit 23465ad985
2 changed files with 12 additions and 4 deletions

1
NEWS
View File

@ -10,6 +10,7 @@ ver 0.19.3 (not yet released)
- audiofile: fix bit rate calculation - audiofile: fix bit rate calculation
- ffmpeg: support opus - ffmpeg: support opus
- opus: fix bogus duration on streams - opus: fix bogus duration on streams
- opus: improved error logging
* fix distorted audio with soxr resampler * fix distorted audio with soxr resampler
* fix build failure on Mac OS X with non-Apple compilers * fix build failure on Mac OS X with non-Apple compilers

View File

@ -167,8 +167,10 @@ MPDOpusDecoder::HandlePacket(const ogg_packet &packet)
if (packet.b_o_s) if (packet.b_o_s)
return HandleBOS(packet); return HandleBOS(packet);
else if (opus_decoder == nullptr) else if (opus_decoder == nullptr) {
LogDebug(opus_domain, "BOS packet expected");
return DecoderCommand::STOP; return DecoderCommand::STOP;
}
if (IsOpusTags(packet)) if (IsOpusTags(packet))
return HandleTags(packet); return HandleTags(packet);
@ -229,13 +231,17 @@ MPDOpusDecoder::HandleBOS(const ogg_packet &packet)
{ {
assert(packet.b_o_s); assert(packet.b_o_s);
if (opus_decoder != nullptr || !IsOpusHead(packet)) if (opus_decoder != nullptr || !IsOpusHead(packet)) {
LogDebug(opus_domain, "BOS packet must be OpusHead");
return DecoderCommand::STOP; return DecoderCommand::STOP;
}
unsigned channels; unsigned channels;
if (!ScanOpusHeader(packet.packet, packet.bytes, channels) || if (!ScanOpusHeader(packet.packet, packet.bytes, channels) ||
!audio_valid_channel_count(channels)) !audio_valid_channel_count(channels)) {
LogDebug(opus_domain, "Malformed BOS packet");
return DecoderCommand::STOP; return DecoderCommand::STOP;
}
assert(opus_decoder == nullptr); assert(opus_decoder == nullptr);
assert(output_buffer == nullptr); assert(output_buffer == nullptr);
@ -307,7 +313,8 @@ MPDOpusDecoder::HandleAudio(const ogg_packet &packet)
output_buffer, opus_output_buffer_frames, output_buffer, opus_output_buffer_frames,
0); 0);
if (nframes < 0) { if (nframes < 0) {
LogError(opus_domain, opus_strerror(nframes)); FormatError(opus_domain, "libopus error: %s",
opus_strerror(nframes));
return DecoderCommand::STOP; return DecoderCommand::STOP;
} }