[FFmpeg-devel] [PATCH] libavformat/mxfdec.c: refactored resolving timecode component
Tomas Härdin
tomas.hardin at codemill.se
Sat Nov 15 02:04:56 CET 2014
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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20141115/59b11de7/attachment.asc>
More information about the ffmpeg-devel
mailing list