mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-21 10:55:51 +02:00
avformat/bink: properly mark packets that are key frames
This commit is contained in:
parent
6eae7e5644
commit
f39678b3a9
@ -56,6 +56,7 @@ typedef struct BinkDemuxContext {
|
||||
int64_t audio_pts[BINK_MAX_AUDIO_TRACKS];
|
||||
|
||||
uint32_t remain_packet_size;
|
||||
int flags;
|
||||
int smush_size;
|
||||
} BinkDemuxContext;
|
||||
|
||||
@ -90,6 +91,7 @@ static int read_header(AVFormatContext *s)
|
||||
unsigned int i;
|
||||
uint32_t pos, next_pos;
|
||||
uint16_t flags;
|
||||
int next_keyframe = 1;
|
||||
int keyframe;
|
||||
int ret;
|
||||
uint32_t signature;
|
||||
@ -203,12 +205,13 @@ static int read_header(AVFormatContext *s)
|
||||
next_pos = avio_rl32(pb);
|
||||
for (i = 0; i < vst->duration; i++) {
|
||||
pos = next_pos;
|
||||
keyframe = next_keyframe;
|
||||
if (i == vst->duration - 1) {
|
||||
next_pos = bink->file_size;
|
||||
keyframe = 0;
|
||||
next_keyframe = 0;
|
||||
} else {
|
||||
next_pos = avio_rl32(pb);
|
||||
keyframe = pos & 1;
|
||||
next_keyframe = next_pos & 1;
|
||||
}
|
||||
pos &= ~1;
|
||||
next_pos &= ~1;
|
||||
@ -254,6 +257,7 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
}
|
||||
|
||||
bink->remain_packet_size = st->index_entries[index_entry].size;
|
||||
bink->flags = st->index_entries[index_entry].flags;
|
||||
bink->current_track = 0;
|
||||
}
|
||||
|
||||
@ -290,6 +294,7 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
return ret;
|
||||
pkt->stream_index = 0;
|
||||
pkt->pts = bink->video_pts++;
|
||||
if (bink->flags & AVINDEX_KEYFRAME)
|
||||
pkt->flags |= AV_PKT_FLAG_KEY;
|
||||
|
||||
/* -1 instructs the next call to read_packet() to read the next frame */
|
||||
|
Loading…
Reference in New Issue
Block a user