Hi, On Sat, Mar 17, 2012 at 5:38 PM, Paul B Mahol <[email protected]> wrote: > On 3/18/12, Ronald S. Bultje <[email protected]> wrote: >> --- >> libavcodec/adpcm.c | 38 ++++++++++++++++++++++---------------- >> 1 files changed, 22 insertions(+), 16 deletions(-) >> >> diff --git a/libavcodec/adpcm.c b/libavcodec/adpcm.c >> index 5d96239..6409e15 100644 >> --- a/libavcodec/adpcm.c >> +++ b/libavcodec/adpcm.c >> @@ -1061,27 +1061,33 @@ static int adpcm_decode_frame(AVCodecContext *avctx, >> void *data, >> case CODEC_ID_ADPCM_IMA_AMV: >> case CODEC_ID_ADPCM_IMA_SMJPEG: >> if (avctx->codec->id == CODEC_ID_ADPCM_IMA_AMV) { >> - c->status[0].predictor = sign_extend(bytestream_get_le16(&src), >> 16); >> - c->status[0].step_index = av_clip(bytestream_get_le16(&src), 0, >> 88); >> - src += 4; >> + c->status[0].predictor = >> sign_extend(bytestream2_get_le16u(&gb), 16); >> + c->status[0].step_index = bytestream2_get_le16u(&gb); >> + bytestream2_skipu(&gb, 4); >> } else { >> - c->status[0].predictor = sign_extend(bytestream_get_be16(&src), >> 16); >> - c->status[0].step_index = av_clip(bytestream_get_byte(&src), 0, >> 88); >> - src += 1; >> + c->status[0].predictor = >> sign_extend(bytestream2_get_be16u(&gb), 16); >> + c->status[0].step_index = bytestream2_get_byteu(&gb); > > Hmm, I'm pretty sure this do not match with reference implementation. > But it does not break anything because reference encoder does clip > values anyway.
Right, so the thing here is that we know encoders clip explicit bitstream values anyway, thus a non-conformant value as initial is by definition a corrupt sample. We can output noise or error out. I believe erroring out is better in this case. Ronald _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
