History

mxfdec: Use MaterialPackage - Track - TrackID instead of the system_item hack

Tomas Härdin committed 14 years ago

Commit 5fb800f1 parent fd34dbe1 file · +10 −13Browse files

Unified · Split

libavformat/mxfdec.c+10−13
@@ -190,7 +190,6 @@ typedef struct { · 189 unmodified lines
190 uint8_t *local_tags;190 uint8_t *local_tags;
191 int local_tags_count;191 int local_tags_count;
192 uint64_t footer_partition;192 uint64_t footer_partition;
193 int system_item;
194 int64_t essence_offset;193 int64_t essence_offset;
195 int first_essence_kl_length;194 int first_essence_kl_length;
196 int64_t first_essence_length;195 int64_t first_essence_length;
@@ -986,17 +985,22 @@ static int mxf_get_sorted_table_segments(MXFContext *mxf, int *nb_sorted_segment · 789 unmodified lines
986 return 0;985 return 0;
987}986}
988 987
989static int mxf_parse_index(MXFContext *mxf, int i, AVStream *st)988static int mxf_parse_index(MXFContext *mxf, int track_id, AVStream *st)
990{989{
991 int64_t accumulated_offset = 0;990 int64_t accumulated_offset = 0;
992 int j, k, ret, nb_sorted_segments;991 int j, k, ret, nb_sorted_segments;
993 MXFIndexTableSegment **sorted_segments;992 MXFIndexTableSegment **sorted_segments;
993 int n_delta = track_id - 1; /* TrackID = 1-based stream index */
994
995 if (track_id < 1) {
996 av_log(mxf->fc, AV_LOG_ERROR, "TrackID not positive: %i\n", track_id);
997 return AVERROR_INVALIDDATA;
998 }
994 999
995 if ((ret = mxf_get_sorted_table_segments(mxf, &nb_sorted_segments, &sorted_segments)))1000 if ((ret = mxf_get_sorted_table_segments(mxf, &nb_sorted_segments, &sorted_segments)))
996 return ret;1001 return ret;
997 1002
998 for (j = 0; j < nb_sorted_segments; j++) {1003 for (j = 0; j < nb_sorted_segments; j++) {
999 int n_delta = i;
1000 int duration, sample_duration = 1, last_sample_size = 0;1004 int duration, sample_duration = 1, last_sample_size = 0;
1001 int64_t segment_size;1005 int64_t segment_size;
1002 MXFIndexTableSegment *tableseg = sorted_segments[j];1006 MXFIndexTableSegment *tableseg = sorted_segments[j];
@@ -1005,9 +1009,6 @@ static int mxf_parse_index(MXFContext *mxf, int i, AVStream *st) · 2 unmodified lines
1005 if (j > 0 && tableseg->body_sid != sorted_segments[j-1]->body_sid)1009 if (j > 0 && tableseg->body_sid != sorted_segments[j-1]->body_sid)
1006 accumulated_offset = 0;1010 accumulated_offset = 0;
1007 1011
1008 /* HACK: How to correctly link between streams and slices? */
1009 if (i < mxf->system_item + st->index)
1010 n_delta++;
1011 if (n_delta >= tableseg->nb_delta_entries && st->index != 0)1012 if (n_delta >= tableseg->nb_delta_entries && st->index != 0)
1012 continue;1013 continue;
1013 duration = tableseg->index_duration > 0 ? tableseg->index_duration :1014 duration = tableseg->index_duration > 0 ? tableseg->index_duration :
@@ -1075,8 +1076,8 @@ static int mxf_parse_index(MXFContext *mxf, int i, AVStream *st) · 61 unmodified lines
1075 1076
1076 pos += mxf->essence_offset;1077 pos += mxf->essence_offset;
1077 1078
1078 av_dlog(mxf->fc, "Stream %d IndexEntry %d n_Delta %d Offset %"PRIx64" Timestamp %"PRId64"\n",1079 av_dlog(mxf->fc, "Stream %d IndexEntry %d TrackID %d Offset %"PRIx64" Timestamp %"PRId64"\n",
1079 st->index, st->nb_index_entries, n_delta, pos, sample_duration * st->nb_index_entries);1080 st->index, st->nb_index_entries, track_id, pos, sample_duration * st->nb_index_entries);
1080 1081
1081 if ((ret = av_add_index_entry(st, pos, sample_duration * st->nb_index_entries, size, 0, flags)) < 0)1082 if ((ret = av_add_index_entry(st, pos, sample_duration * st->nb_index_entries, size, 0, flags)) < 0)
1082 return ret;1083 return ret;
@@ -1275,7 +1276,7 @@ static int mxf_parse_structural_metadata(MXFContext *mxf) · 192 unmodified lines
1275 st->need_parsing = AVSTREAM_PARSE_FULL;1276 st->need_parsing = AVSTREAM_PARSE_FULL;
1276 }1277 }
1277 1278
1278 if ((ret = mxf_parse_index(mxf, i, st)))1279 if ((ret = mxf_parse_index(mxf, material_track->track_id, st)))
1279 return ret;1280 return ret;
1280 }1281 }
1281 return 0;1282 return 0;
@@ -1524,10 +1525,6 @@ static int mxf_read_header(AVFormatContext *s, AVFormatParameters *ap) · 242 unmodified lines
1524 }1525 }
1525 }1526 }
1526 1527
1527 if (IS_KLV_KEY(klv.key, mxf_system_item_key)) {
1528 mxf->system_item = 1;
1529 }
1530
1531 if (!mxf->essence_offset)1528 if (!mxf->essence_offset)
1532 mxf->essence_offset = klv.offset;1529 mxf->essence_offset = klv.offset;
1533 1530

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t