[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