Skip to content

Commit cdb3c75

Browse files
author
Philip de Nier
committed
Reader tolerates number != 01 in Timed Text essence key
ST 429-5 normatively requires the Essence Element Number byte in the essence element key (and Track Number) to be 01h. However, it's only used to link tracks to essence elements and so readers should be tolerant of writers using 00h for example.
1 parent 0a6a015 commit cdb3c75

File tree

4 files changed

+14
-2
lines changed

4 files changed

+14
-2
lines changed

deps/libMXF/mxf/mxf_labels_and_keys.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,13 @@ void mxf_complete_essence_element_key(mxfKey *key, uint8_t count, uint8_t type,
247247
key->octet15 = num;
248248
}
249249

250+
void mxf_complete_essence_element_key_from_track_num(mxfKey *key, uint32_t track_num)
251+
{
252+
key->octet13 = (uint8_t)((track_num >> 16) & 0xff);
253+
key->octet14 = (uint8_t)((track_num >> 8) & 0xff);
254+
key->octet15 = (uint8_t)(track_num & 0xff);
255+
}
256+
250257
void mxf_complete_essence_element_track_num(uint32_t *trackNum, uint8_t count, uint8_t type, uint8_t num)
251258
{
252259
*trackNum &= 0xFF000000;

deps/libMXF/mxf/mxf_labels_and_keys.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -777,6 +777,7 @@ static const mxfUL ADM_ITU2076_PROFILES_LEVELS =
777777

778778

779779
void mxf_complete_essence_element_key(mxfKey *key, uint8_t count, uint8_t type, uint8_t num);
780+
void mxf_complete_essence_element_key_from_track_num(mxfKey *key, uint32_t track_num);
780781
void mxf_complete_essence_element_track_num(uint32_t *trackNum, uint8_t count, uint8_t type, uint8_t num);
781782

782783

include/bmx/mxf_reader/MXFTimedTextTrackReader.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ class MXFTimedTextTrackReader : public MXFFileTrackReader
7474

7575
private:
7676
uint32_t mBodySID;
77+
mxfKey mEssenceElementKey;
7778
};
7879

7980

src/mxf_reader/MXFTimedTextTrackReader.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ MXFTimedTextTrackReader::MXFTimedTextTrackReader(MXFFileReader *file_reader, siz
5454
{
5555
BMX_ASSERT(track_info->essence_type == TIMED_TEXT);
5656
mBodySID = 0;
57+
58+
mEssenceElementKey = MXF_EE_K(TimedText);
59+
mxf_complete_essence_element_key_from_track_num(&mEssenceElementKey, track_info->file_track_number);
5760
}
5861

5962
MXFTimedTextTrackReader::~MXFTimedTextTrackReader()
@@ -110,7 +113,7 @@ void MXFTimedTextTrackReader::ReadTimedText(FILE *file_out, unsigned char **data
110113
{
111114
BMX_ASSERT(mBodySID != 0);
112115

113-
ReadStream(mBodySID, &MXF_EE_K(TimedText), file_out, data_out, size_out, 0);
116+
ReadStream(mBodySID, &mEssenceElementKey, file_out, data_out, size_out, 0);
114117
}
115118

116119
void MXFTimedTextTrackReader::ReadAncillaryResourceById(mxfUUID resource_id, FILE *file_out,
@@ -147,7 +150,7 @@ TimedTextMXFResourceProvider* MXFTimedTextTrackReader::CreateResourceProvider()
147150
provider = new TimedTextMXFResourceProvider(file);
148151

149152
vector<pair<int64_t, int64_t> > ranges;
150-
ReadStream(mBodySID, &MXF_EE_K(TimedText), 0, 0, 0, &ranges);
153+
ReadStream(mBodySID, &mEssenceElementKey, 0, 0, 0, &ranges);
151154
provider->AddTimedTextResource(ranges);
152155

153156
vector<TimedTextAncillaryResource> &anc_resources = GetManifest()->GetAncillaryResources();

0 commit comments

Comments
 (0)