On Wed, 2014-11-12 at 12:15 -0800, Mark Reid wrote: > --- > libavformat/mxfdec.c | 36 +++++++++++++++++++++++------------- > 1 file changed, 23 insertions(+), 13 deletions(-) > > diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c > index b533e2a..87f1e51 100644 > --- a/libavformat/mxfdec.c > +++ b/libavformat/mxfdec.c > @@ -1424,6 +1424,27 @@ static int mxf_add_timecode_metadata(AVDictionary > **pm, const char *key, AVTimec > return 0; > } > > +static MXFTimecodeComponent* mxf_resolve_timecode_component(MXFContext *mxf, > UID *strong_ref) > +{ > + MXFStructuralComponent *component = NULL; > + MXFPulldownComponent *pulldown = NULL; > + > + component = mxf_resolve_strong_ref(mxf, strong_ref, AnyType); > + if (!component) > + return NULL; > + > + switch (component->type) { > + case TimecodeComponent: > + return (MXFTimecodeComponent*)component; > + case PulldownComponent: /* timcode component may be located on a > pulldown component */ > + pulldown = (MXFPulldownComponent*)component; > + return mxf_resolve_strong_ref(mxf, &pulldown->input_segment_ref, > TimecodeComponent); > + default: > + break; > + } > + return NULL; > +} > + > static int mxf_parse_physical_source_package(MXFContext *mxf, MXFTrack > *source_track, AVStream *st) > { > MXFPackage *temp_package = NULL; > @@ -1432,7 +1453,6 @@ static int mxf_parse_physical_source_package(MXFContext > *mxf, MXFTrack *source_t > MXFStructuralComponent *component = NULL; > MXFStructuralComponent *sourceclip = NULL; > MXFTimecodeComponent *mxf_tc = NULL; > - MXFPulldownComponent *mxf_pulldown = NULL; > int i, j, k; > AVTimecode tc; > int flags; > @@ -1475,19 +1495,9 @@ static int > mxf_parse_physical_source_package(MXFContext *mxf, MXFTrack *source_t > } > > for (k = 0; k < > physical_track->sequence->structural_components_count; k++) { > - component = mxf_resolve_strong_ref(mxf, > &physical_track->sequence->structural_components_refs[k], TimecodeComponent); > - if (!component){ > - /* timcode component may be located on a pulldown > component */ > - component = mxf_resolve_strong_ref(mxf, > &physical_track->sequence->structural_components_refs[k], PulldownComponent); > - if (!component) > - continue; > - mxf_pulldown = (MXFPulldownComponent*)component; > - component = mxf_resolve_strong_ref(mxf, > &mxf_pulldown->input_segment_ref, TimecodeComponent); > - if (!component) > - continue; > - } > + if (!(mxf_tc = mxf_resolve_timecode_component(mxf, > &physical_track->sequence->structural_components_refs[k]))) > + continue; > > - mxf_tc = (MXFTimecodeComponent*)component; > flags = mxf_tc->drop_frame == 1 ? AV_TIMECODE_FLAG_DROPFRAME > : 0; > /* scale sourceclip start_position to match physical track > edit rate */ > start_position = av_rescale_q(sourceclip->start_position,
Looks simple enough. Good initiative :) /Tomas
signature.asc
Description: This is a digitally signed message part
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel