You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
segafilm: set video and audio stream duration
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
This commit is contained in:
committed by
Vittorio Giovara
parent
c012c6f1a8
commit
1e791ee3aa
@@ -89,6 +89,7 @@ static int film_read_header(AVFormatContext *s)
|
|||||||
int i, ret;
|
int i, ret;
|
||||||
unsigned int data_offset;
|
unsigned int data_offset;
|
||||||
unsigned int audio_frame_counter;
|
unsigned int audio_frame_counter;
|
||||||
|
unsigned int video_frame_counter;
|
||||||
|
|
||||||
film->sample_table = NULL;
|
film->sample_table = NULL;
|
||||||
|
|
||||||
@@ -212,7 +213,7 @@ static int film_read_header(AVFormatContext *s)
|
|||||||
avpriv_set_pts_info(st, 64, 1, film->audio_samplerate);
|
avpriv_set_pts_info(st, 64, 1, film->audio_samplerate);
|
||||||
}
|
}
|
||||||
|
|
||||||
audio_frame_counter = 0;
|
audio_frame_counter = video_frame_counter = 0;
|
||||||
for (i = 0; i < film->sample_count; i++) {
|
for (i = 0; i < film->sample_count; i++) {
|
||||||
/* load the next sample record and transfer it to an internal struct */
|
/* load the next sample record and transfer it to an internal struct */
|
||||||
if (avio_read(pb, scratch, 16) != 16) {
|
if (avio_read(pb, scratch, 16) != 16) {
|
||||||
@@ -240,6 +241,7 @@ static int film_read_header(AVFormatContext *s)
|
|||||||
film->sample_table[i].stream = film->video_stream_index;
|
film->sample_table[i].stream = film->video_stream_index;
|
||||||
film->sample_table[i].pts = AV_RB32(&scratch[8]) & 0x7FFFFFFF;
|
film->sample_table[i].pts = AV_RB32(&scratch[8]) & 0x7FFFFFFF;
|
||||||
film->sample_table[i].keyframe = (scratch[8] & 0x80) ? 0 : 1;
|
film->sample_table[i].keyframe = (scratch[8] & 0x80) ? 0 : 1;
|
||||||
|
video_frame_counter++;
|
||||||
av_add_index_entry(s->streams[film->video_stream_index],
|
av_add_index_entry(s->streams[film->video_stream_index],
|
||||||
film->sample_table[i].sample_offset,
|
film->sample_table[i].sample_offset,
|
||||||
film->sample_table[i].pts,
|
film->sample_table[i].pts,
|
||||||
@@ -248,6 +250,12 @@ static int film_read_header(AVFormatContext *s)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (film->audio_type)
|
||||||
|
s->streams[film->audio_stream_index]->duration = audio_frame_counter;
|
||||||
|
|
||||||
|
if (film->video_type)
|
||||||
|
s->streams[film->video_stream_index]->duration = video_frame_counter;
|
||||||
|
|
||||||
film->current_sample = 0;
|
film->current_sample = 0;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Reference in New Issue
Block a user