[Ffmpeg-devel] MP3 decoding from RTP stream. Getting "invalid new backstep"
Martin
marthi
Fri Nov 3 12:25:30 CET 2006
Hi,
>>right before returning:
>>
>> if (discard_frame) {
>> //dicard frame is set if an backstep or overread occurs.
>> for(i=0;i<nb_frames;i++) {
>> for(ch=0;ch<s->nb_channels;ch++) {
>> int j;
>> for(j=0;j<SBLIMIT;j++) {
>> s->sb_samples[ch][i][j] = 0;
>> }
>> }
>> }
>> }
>>
>>
>>
>>This didn't worked as expected. Also I found another problem caused by
>>this point in the huffman_decode() function:
>>
>> if (pos > end_pos2 && last_pos){
>> /* some encoders generate an incorrect size for this
>> part. We must go back into the data */
>> s_index -= 4;
>> skip_bits_long(&s->gb, last_pos - pos);
>> av_log(NULL, AV_LOG_INFO, "overread, skip %d enddists:
>>%d %d\n", last_pos - pos, end_pos-pos, end_pos2-pos);
>> s->frame_distorted = 1;
>>
>> break;
>> }
>>
>>
>>My idea was now to introduce a new flag into the MPADecodeContext:
>>int frame_distorted;
>>
>>Now I set this flag to 0 at the start of decode_frame()
>>and set it to 1 when backstep or overread occurs. At the end of
>>decode_frame() I check the flag and return -1 if it is set. This is
>>working for me. If I send a patch with the new flag, would you include it?
>
>
> not without understanding why setting sb_samples to 0 doesnt work
>
> [...]
It seems to work now, with setting sb_frames to 0. I did it after the
synthesis filter which didn't work. How should I transmit the fact that
a distortion occured in huffmann_decode() to the function
mp_decode_frame()? Can I use the flag for this purpose?
I'm not sure whether I break something if I set sb_samples to 0 directly
at the point where the distortion occurs in huffmann_decode().
Thanks,
Martin
More information about the ffmpeg-devel
mailing list