On Wed, Oct 26, 2011 at 12:16:16PM -0400, Justin Ruggles wrote:
> On frame decoding failure, return an error if the frame is the same size as
> the whole packet, otherwise just log an error message and return the number
> of bytes consumed.
> ---
>  libavcodec/mpegaudiodec.c |   11 +++++++++--
>  1 files changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/libavcodec/mpegaudiodec.c b/libavcodec/mpegaudiodec.c
> index e3d19c0..004048c 100644
> --- a/libavcodec/mpegaudiodec.c
> +++ b/libavcodec/mpegaudiodec.c
> @@ -1819,8 +1819,15 @@ static int decode_frame(AVCodecContext * avctx,
>          *data_size = out_size;
>          avctx->sample_rate = s->sample_rate;
>          //FIXME maybe move the other codec info stuff from above here too
> -    }else
> -        av_log(avctx, AV_LOG_DEBUG, "Error while decoding MPEG audio 
> frame.\n"); //FIXME return -1 / but also return the number of bytes consumed
> +    } else {
> +        av_log(avctx, AV_LOG_ERROR, "Error while decoding MPEG audio 
> frame.\n");
> +        /* Only return an error if the bad frame makes up the whole packet.
> +           If there is more data in the packet, just consume the bad frame
> +           instead of returning an error, which would discard the whole
> +           packet. */
> +        if (buf_size == avpkt->size)
> +            return out_size;
> +    }
>      s->frame_size = 0;
>      return buf_size;
>  }
> -- 

probably OK
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to