mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-01-12 02:19:35 +00:00
Sega FILM: set dts and duration when demuxing
Reviewed-by: Kyle Swanson <k@ylo.ph> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
parent
3b350528d2
commit
d64183ea5d
@ -270,6 +270,8 @@ static int film_read_packet(AVFormatContext *s,
|
||||
FilmDemuxContext *film = s->priv_data;
|
||||
AVIOContext *pb = s->pb;
|
||||
film_sample *sample;
|
||||
film_sample *next_sample = NULL;
|
||||
int next_sample_id;
|
||||
int ret = 0;
|
||||
|
||||
if (film->current_sample >= film->sample_count)
|
||||
@ -277,6 +279,20 @@ static int film_read_packet(AVFormatContext *s,
|
||||
|
||||
sample = &film->sample_table[film->current_sample];
|
||||
|
||||
/* Find the next sample from the same stream, assuming there is one;
|
||||
* this is used to calculate the duration below */
|
||||
next_sample_id = film->current_sample + 1;
|
||||
while (next_sample == NULL) {
|
||||
if (next_sample_id >= film->sample_count)
|
||||
break;
|
||||
|
||||
next_sample = &film->sample_table[next_sample_id];
|
||||
if (next_sample->stream != sample->stream) {
|
||||
next_sample = NULL;
|
||||
next_sample_id++;
|
||||
}
|
||||
}
|
||||
|
||||
/* position the stream (will probably be there anyway) */
|
||||
avio_seek(pb, sample->sample_offset, SEEK_SET);
|
||||
|
||||
@ -285,8 +301,11 @@ static int film_read_packet(AVFormatContext *s,
|
||||
ret = AVERROR(EIO);
|
||||
|
||||
pkt->stream_index = sample->stream;
|
||||
pkt->dts = sample->pts;
|
||||
pkt->pts = sample->pts;
|
||||
pkt->flags |= sample->keyframe ? AV_PKT_FLAG_KEY : 0;
|
||||
if (next_sample != NULL)
|
||||
pkt->duration = next_sample->pts - sample->pts;
|
||||
|
||||
film->current_sample++;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user