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

Reply via email to