On Thu, 2014-09-25 at 16:13 -0700, Mark Reid wrote:
> ---
> libavformat/mxfdec.c | 118
> ++++++++++++++++++++++++++++++++++++++++++---------
> 1 file changed, 97 insertions(+), 21 deletions(-)
>
> diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c
> index 7a4633f..3a1889f 100644
> --- a/libavformat/mxfdec.c
> +++ b/libavformat/mxfdec.c
> @@ -188,6 +188,7 @@ typedef struct {
> int tracks_count;
> MXFDescriptor *descriptor; /* only one */
> UID descriptor_ref;
> + char *name;
> } MXFPackage;
>
> typedef struct {
> @@ -731,6 +732,27 @@ static int mxf_read_sequence(void *arg, AVIOContext *pb,
> int tag, int size, UID
> return 0;
> }
>
> +static int mxf_read_utf16_string(AVIOContext *pb, int size, char** str)
> +{
> + int ret;
> + size_t buf_size;
> +
> + if (size < 0)
> + return AVERROR(EINVAL);
> +
> + buf_size = size + size / 2 + 1;
This should be a function, like ff_utf16_buflen() or something. I see
that this hunk is just moving the function though, so don't let that
hold this patch up.
> + *str = av_malloc(buf_size);
> + if (!*str)
> + return AVERROR(ENOMEM);
> +
> + if ((ret = avio_get_str16be(pb, size, *str, buf_size)) < 0) {
> + av_freep(str);
> + return ret;
> + }
> +
> + return ret;
> +}
> +static int mxf_parse_physical_source_package(MXFContext *mxf, MXFTrack
> *source_track, AVStream *st)
> +{
> [...]
> +
> + 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)
> + 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,
> av_inv_q(source_track->edit_rate), av_inv_q(physical_track->edit_rate));
av_rescale()
> +
> + if (av_timecode_init(&tc, mxf_tc->rate, flags,
> start_position + mxf_tc->start_frame, mxf->fc) == 0) {
> + mxf_add_timecode_metadata(&st->metadata, "timecode",
> &tc);
> + return 0;
> + }
> + }
> + }
> + }
> +
> + return 0;
> +}
> +
Looks OK otherwise. Did you try fuzzing (zzuf) with a few files too?
/Tomas
signature.asc
Description: This is a digitally signed message part
_______________________________________________ ffmpeg-devel mailing list [email protected] http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
