Skip to content

Commit

Permalink
avformat/mxfdec: take into account run-in in find_partition_by_offset
Browse files Browse the repository at this point in the history
Also rename the function to find_partition_by_absolute_offset to make it clear
offset is absolute.

Signed-off-by: Marton Balint <cus@passwd.hu>
  • Loading branch information
cus committed Apr 28, 2019
1 parent 5b6960f commit fc15e83
Showing 1 changed file with 7 additions and 7 deletions.
14 changes: 7 additions & 7 deletions libavformat/mxfdec.c
Original file line number Diff line number Diff line change
Expand Up @@ -429,19 +429,19 @@ static int mxf_get_stream_index(AVFormatContext *s, KLVPacket *klv, int body_sid
return s->nb_streams == 1 && s->streams[0]->priv_data ? 0 : -1;
}

static int find_body_sid_by_offset(MXFContext *mxf, int64_t offset)
static int find_body_sid_by_absolute_offset(MXFContext *mxf, int64_t offset)
{
// we look for partition where the offset is placed
int a, b, m;
int64_t this_partition;
int64_t pack_ofs;

a = -1;
b = mxf->partitions_count;

while (b - a > 1) {
m = (a + b) >> 1;
this_partition = mxf->partitions[m].this_partition;
if (this_partition <= offset)
m = (a + b) >> 1;
pack_ofs = mxf->partitions[m].pack_ofs;
if (pack_ofs <= offset)
a = m;
else
b = m;
Expand Down Expand Up @@ -590,7 +590,7 @@ static int mxf_decrypt_triplet(AVFormatContext *s, AVPacket *pkt, KLVPacket *klv
if (!IS_KLV_KEY(klv, mxf_essence_element_key))
return AVERROR_INVALIDDATA;

body_sid = find_body_sid_by_offset(mxf, klv->offset);
body_sid = find_body_sid_by_absolute_offset(mxf, klv->offset);
index = mxf_get_stream_index(s, klv, body_sid);
if (index < 0)
return AVERROR_INVALIDDATA;
Expand Down Expand Up @@ -3471,7 +3471,7 @@ static int mxf_read_packet(AVFormatContext *s, AVPacket *pkt)
if (IS_KLV_KEY(klv.key, mxf_essence_element_key) ||
IS_KLV_KEY(klv.key, mxf_canopus_essence_element_key) ||
IS_KLV_KEY(klv.key, mxf_avid_essence_element_key)) {
int body_sid = find_body_sid_by_offset(mxf, klv.offset);
int body_sid = find_body_sid_by_absolute_offset(mxf, klv.offset);
int index = mxf_get_stream_index(s, &klv, body_sid);
int64_t next_ofs;
AVStream *st;
Expand Down

0 comments on commit fc15e83

Please sign in to comment.