verem <[email protected]> added the comment:

May be i am wrong, but actually added condition (avi->stream_index < 0) prevents
from broking ast->remaining value:
    - ast->remaining been initialized in /index honour/ code then
(avi->stream_index < 0)
    - ast->remaining been decremented in packet splitting code then
(avi->stream_index >= 0)

Actually ast->remaining initialized either in /index honour/ code or in a resync
part after reading appropriate avi chunk.

So i do not see a situation for breaking packet splitting code.

PS:
I did a patch with a lot of av_log to find the problem and there is some logging
output (i selected some continuous av_read_packet calls):

N-th avi_read_packet call (reads completely one video frame and returns as one
packet):
[avi @ 0x89c7420]avi_read_packet(), avi->non_interleaved=32, 
avi->stream_index=-1
[avi @ 0x89c7420]avi_read_packet(): i=0, ts=240000 st->time_base=1/25,
ast->frame_offset=6, st->nb_index_entries=48, ast->sample_size=0
[avi @ 0x89c7420]avi_read_packet(): i=1, ts=250000 st->time_base=1/48000,
ast->frame_offset=48000, st->nb_index_entries=7, ast->sample_size=4
[avi @ 0x89c7420]avi_read_packet(): best_stream_index=0, best_ts=240000
[avi @ 0x89c7420]avi_read_packet(): best_ast->remaining=0
[avi @ 0x89c7420]avi_read_packet(): i=6, best_ast->frame_offset=6
[avi @ 0x89c7420]avi_read_packet(): 
best_ast->packet_size=best_ast->remaining=144000
[avi @ 0x89c7420]avi_read_packet(): resync:
[avi @ 0x89c7420]dts:6 offset:6 1/25 smpl_siz:0 base:1000000 st:0 size:144000
[avi @ 0x89c7420]size=144000. ast->remaining=0

(N+1)-th avi_read_packet call (reads audio chunk 48000 bytes length and returns
packet 256 bytes, so remains is 47744 bytes):
[avi @ 0x89c7420]avi_read_packet(), avi->non_interleaved=32, 
avi->stream_index=-1
[avi @ 0x89c7420]avi_read_packet(): i=0, ts=280000 st->time_base=1/25,
ast->frame_offset=7, st->nb_index_entries=48, ast->sample_size=0
[avi @ 0x89c7420]avi_read_packet(): i=1, ts=250000 st->time_base=1/48000,
ast->frame_offset=48000, st->nb_index_entries=7, ast->sample_size=4
[avi @ 0x89c7420]avi_read_packet(): best_stream_index=1, best_ts=250000
[avi @ 0x89c7420]avi_read_packet(): best_ast->remaining=0
[avi @ 0x89c7420]avi_read_packet(): i=1, best_ast->frame_offset=48000
[avi @ 0x89c7420]avi_read_packet(): 
best_ast->packet_size=best_ast->remaining=48000
[avi @ 0x89c7420]avi_read_packet(): resync:
[avi @ 0x89c7420]dts:12000 offset:48000 4/192000 smpl_siz:4 base:1000000 st:1
size:256
[avi @ 0x89c7420]size=256. ast->remaining=47744

(N+2)-th avi_read_packet call (return 256 bytes packet, remains 47488 bytes):
[avi @ 0x89c7420]avi_read_packet(), avi->non_interleaved=32, avi->stream_index=1
[avi @ 0x89c7420]avi_read_packet(): resync:
[avi @ 0x89c7420]dts:12064 offset:48256 4/192000 smpl_siz:4 base:1000000 st:1
size:256
[avi @ 0x89c7420]size=256. ast->remaining=47488

(N+3)-th avi_read_packet call:
[avi @ 0x89c7420]avi_read_packet(), avi->non_interleaved=32, avi->stream_index=1
[avi @ 0x89c7420]avi_read_packet(): resync:
[avi @ 0x89c7420]dts:12128 offset:48512 4/192000 smpl_siz:4 base:1000000 st:1
size:256
[avi @ 0x89c7420]size=256. ast->remaining=47232

(N+J)-th avi_read_packet call:
[avi @ 0x89c7420]avi_read_packet(), avi->non_interleaved=32, avi->stream_index=1
[avi @ 0x89c7420]avi_read_packet(): resync:
[avi @ 0x89c7420]dts:23904 offset:95616 4/192000 smpl_siz:4 base:1000000 st:1
size:256
[avi @ 0x89c7420]size=256. ast->remaining=128

(N+J+1)-th avi_read_packet call (return last 128 bytes packet):
[avi @ 0x89c7420]avi_read_packet(), avi->non_interleaved=32, avi->stream_index=1
[avi @ 0x89c7420]avi_read_packet(): resync:
[avi @ 0x89c7420]dts:23968 offset:95872 4/192000 smpl_siz:4 base:1000000 st:1
size:128
[avi @ 0x89c7420]size=128. ast->remaining=0

(N+J+2)-th avi_read_packet call:
[avi @ 0x89c7420]avi_read_packet(), avi->non_interleaved=32, 
avi->stream_index=-1
[avi @ 0x89c7420]avi_read_packet(): i=0, ts=280000 st->time_base=1/25,
ast->frame_offset=7, st->nb_index_entries=48, ast->sample_size=0
[avi @ 0x89c7420]avi_read_packet(): i=1, ts=500000 st->time_base=1/48000,
ast->frame_offset=96000, st->nb_index_entries=7, ast->sample_size=4
[avi @ 0x89c7420]avi_read_packet(): best_stream_index=0, best_ts=280000
[avi @ 0x89c7420]avi_read_packet(): best_ast->remaining=0
[avi @ 0x89c7420]avi_read_packet(): i=7, best_ast->frame_offset=7
[avi @ 0x89c7420]avi_read_packet(): 
best_ast->packet_size=best_ast->remaining=144000
[avi @ 0x89c7420]avi_read_packet(): resync:
[avi @ 0x89c7420]dts:7 offset:7 1/25 smpl_siz:0 base:1000000 st:0 size:144000
[avi @ 0x89c7420]size=144000. ast->remaining=0

_____________________________________________________
FFmpeg issue tracker <[email protected]>
<https://roundup.ffmpeg.org/roundup/ffmpeg/issue1343>
_____________________________________________________

Attachment: avdec_dig1.patch
Description: Binary data

Reply via email to