Hi, On Mon, Dec 19, 2011 at 8:20 AM, Justin Ruggles <[email protected]> wrote: > On 12/19/2011 09:14 AM, Måns Rullgård wrote: > >> Justin Ruggles <[email protected]> writes: >> >>> From: Michael Niedermayer <[email protected]> >>> >>> Signed-off-by: Michael Niedermayer <[email protected]> >>> Signed-off-by: Justin Ruggles <[email protected]> >>> --- >>> libavcodec/adxdec.c | 35 ++++++++++++++++++++++++++--------- >>> 1 files changed, 26 insertions(+), 9 deletions(-) >>> >>> diff --git a/libavcodec/adxdec.c b/libavcodec/adxdec.c >>> index e910413..ea11db7 100644 >>> --- a/libavcodec/adxdec.c >>> +++ b/libavcodec/adxdec.c >>> @@ -38,16 +38,16 @@ static av_cold int adx_decode_init(AVCodecContext >>> *avctx) >>> ADXContext *c = avctx->priv_data; >>> int ret, header_size; >>> >>> - if (avctx->extradata_size < 24) >>> - return AVERROR_INVALIDDATA; >>> - >>> - if ((ret = avpriv_adx_decode_header(avctx, avctx->extradata, >>> - avctx->extradata_size, >>> &header_size, >>> - c->coeff)) < 0) { >>> - av_log(avctx, AV_LOG_ERROR, "error parsing ADX header\n"); >>> - return AVERROR_INVALIDDATA; >>> + if (avctx->extradata_size >= 24) { >>> + if ((ret = avpriv_adx_decode_header(avctx, avctx->extradata, >>> + avctx->extradata_size, >>> &header_size, >>> + c->coeff)) < 0) { >>> + av_log(avctx, AV_LOG_ERROR, "error parsing ADX header\n"); >>> + return AVERROR_INVALIDDATA; >>> + } >>> + c->channels = avctx->channels; >>> + c->header_parsed = 1; >>> } >> >> Does this format come in two variants, with extradata and with header >> in-band? A little more background on why this is changed now would be >> welcome. What have demuxers done in the past? > > > Yes, it comes in 2 variants. SFD is an MPEG container variant that has > the ADX header in the packet data. ADX files have the header at the > start of the file, followed by 18-byte packets. > > In the past, we didn't have an ADX demuxer, and the ADX decoder handled > the in-packet header from the SFD demuxer. I fairly recently added an > ADX parser which extracted the header and put it in extradata, but it > ended up leading to infinite loops in some cases. > > Handling it either way allows the parser to be simplified to just detect > the header and include it with the first packet. The ADX demuxer still > puts it in extradata to be processed at init().
Patch looks good, given the explanation. Ronald _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
