Added support for reading Start Timecode from Footer (if any). Specifically targets Omneon 6.4.3.0 but also works on other Versions and Vendors, e.g. when Header is OpenIncomplete. Function mxf_resolve_strong_ref_reverse can potentially be re-used for getting other values like Duration and Origin from Footer. --- libavformat/mxfdec.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+)
diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c index 3bf480a3a6..557e01f8ed 100644 --- a/libavformat/mxfdec.c +++ b/libavformat/mxfdec.c @@ -1396,6 +1396,19 @@ static const MXFCodecUL *mxf_get_codec_ul(const MXFCodecUL *uls, UID *uid) return uls; } +static void *mxf_resolve_strong_ref_reverse(MXFContext *mxf, UID *strong_ref, enum MXFMetadataSetType type) +{ + int i; + if (!strong_ref) + return NULL; + for (i = mxf->metadata_sets_count-1; i >= 0 ; i--) { + if (!memcmp(*strong_ref, mxf->metadata_sets[i]->uid, 16) && + (type == AnyType || mxf->metadata_sets[i]->type == type)) { + return mxf->metadata_sets[i]; + } + } + return NULL; +} static void *mxf_resolve_strong_ref(MXFContext *mxf, UID *strong_ref, enum MXFMetadataSetType type) { int i; @@ -2328,8 +2341,15 @@ static int mxf_parse_structural_metadata(MXFContext *mxf) continue; mxf_tc = (MXFTimecodeComponent*)component; + if (mxf_tc->start_frame <= 0) { + av_log(mxf->fc, AV_LOG_TRACE, "Header Start Timecode was %d, trying reversed parsing\n",mxf_tc->start_frame); + component = mxf_resolve_strong_ref_reverse(mxf, &material_track->sequence->structural_components_refs[j], TimecodeComponent); + mxf_tc = (MXFTimecodeComponent*)component; + } + flags = mxf_tc->drop_frame == 1 ? AV_TIMECODE_FLAG_DROPFRAME : 0; if (av_timecode_init(&tc, mxf_tc->rate, flags, mxf_tc->start_frame, mxf->fc) == 0) { + av_log(mxf->fc, AV_LOG_TRACE, "Setting Start Timecode: %d \n",mxf_tc->start_frame); mxf_add_timecode_metadata(&mxf->fc->metadata, "timecode", &tc); break; } -- 2.25.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".