[FFmpeg-devel] [PATCH 02/10] avformat/mxfdec: fix essence_offset calculation

Tomas Härdin tjoppen at acc.umu.se
Wed Feb 21 23:12:58 EET 2018


lör 2018-02-17 klockan 22:45 +0100 skrev Marton Balint:
> The reference point for a KAG is the first byte of the key of a Partition Pack.
> 
> Fixes ticket #2817.
> Fixes ticket #5317.
> 
> > Signed-off-by: Marton Balint <cus at passwd.hu>
> ---
>  libavformat/mxfdec.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c
> index fcae863ef4..95767ccba4 100644
> --- a/libavformat/mxfdec.c
> +++ b/libavformat/mxfdec.c
> @@ -2875,8 +2875,8 @@ static int mxf_read_header(AVFormatContext *s)
>                   *       for OPAtom we still need the actual essence_offset though (the KL's length can vary)
>                   */
>                  int64_t op1a_essence_offset =
> -                    round_to_kag(mxf->current_partition->this_partition +
> -                                 mxf->current_partition->pack_length,       mxf->current_partition->kag_size) +
> +                    mxf->current_partition->this_partition +
> +                    round_to_kag(mxf->current_partition->pack_length,       mxf->current_partition->kag_size) +
>                      round_to_kag(mxf->current_partition->header_byte_count, mxf->current_partition->kag_size) +
>                      round_to_kag(mxf->current_partition->index_byte_count,  mxf->current_partition->kag_size);

This seems like a rather elemental miscalculation, that I wrote even. I
took a look at S377m, it had this to say:

> The first gridline in any partition is the first byte of the key of
> the partition pack that defines that
> partition.

Each partition starts at ThisPartition (plus run-in) so this patch
should be correct. What's perhaps more suspect is the calculation
itself. It should *always* be possible to locate where Op1a essence
starts, by scanning to the first essence KLV. MXF is flexible enough
that having some sketchy calculation for where it *might* be is
probably not correct. One is free to insert any amount of padding

Of course this entire patchset would be unnecessary if we just used
bmxlib instead.

/Tomas



More information about the ffmpeg-devel mailing list