|
|
|
@ -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,7 +294,8 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt) |
|
|
|
|
return ret; |
|
|
|
|
pkt->stream_index = 0; |
|
|
|
|
pkt->pts = bink->video_pts++; |
|
|
|
|
pkt->flags |= AV_PKT_FLAG_KEY; |
|
|
|
|
if (bink->flags & AVINDEX_KEYFRAME) |
|
|
|
|
pkt->flags |= AV_PKT_FLAG_KEY; |
|
|
|
|
|
|
|
|
|
/* -1 instructs the next call to read_packet() to read the next frame */ |
|
|
|
|
bink->current_track = -1; |
|
|
|
|