[FFmpeg-devel] [PATCHv3 2/3] mov: Export bounds and padding from spherical metadata

James Almer jamrial at gmail.com
Wed Feb 22 01:07:25 EET 2017


On 2/21/2017 7:35 PM, Vittorio Giovara wrote:
> Update the fate test as needed.
> ---
>  libavformat/mov.c                 | 28 +++++++++++++++++++++++++++-
>  tests/ref/fate/mov-spherical-mono |  6 +++++-
>  2 files changed, 32 insertions(+), 2 deletions(-)
> 
> diff --git a/libavformat/mov.c b/libavformat/mov.c
> index 7b0bbcc..d798336 100644
> --- a/libavformat/mov.c
> +++ b/libavformat/mov.c
> @@ -4637,6 +4637,8 @@ static int mov_read_sv3d(MOVContext *c, AVIOContext *pb, MOVAtom atom)
>      MOVStreamContext *sc;
>      int size, version;
>      int32_t yaw, pitch, roll;
> +    size_t l, t, r, b;
> +    size_t padding = 0;
>      uint32_t tag;
>      enum AVSphericalProjection projection;
>  
> @@ -4716,9 +4718,25 @@ static int mov_read_sv3d(MOVContext *c, AVIOContext *pb, MOVAtom atom)
>      switch (tag) {
>      case MKTAG('c','b','m','p'):
>          projection = AV_SPHERICAL_CUBEMAP;
> +        padding = avio_rb32(pb);

Doesn't layout come first?

>          break;
>      case MKTAG('e','q','u','i'):
> -        projection = AV_SPHERICAL_EQUIRECTANGULAR;
> +        t = avio_rb32(pb);
> +        b = avio_rb32(pb);
> +        l = avio_rb32(pb);
> +        r = avio_rb32(pb);
> +
> +        if (b >= UINT_MAX - t || r >= UINT_MAX - l) {
> +            av_log(c->fc, AV_LOG_ERROR,
> +                   "Invalid bounding rectangle coordinates "
> +                   "%zu,%zu,%zu,%zu\n", l, t, r, b);
> +            return AVERROR_INVALIDDATA;
> +        }
> +
> +        if (l || t || r || b)
> +            projection = AV_SPHERICAL_EQUIRECTANGULAR_TILE;
> +        else
> +            projection = AV_SPHERICAL_EQUIRECTANGULAR;
>          break;
>      default:
>          av_log(c->fc, AV_LOG_ERROR, "Unknown projection type\n");
> @@ -4735,6 +4753,14 @@ static int mov_read_sv3d(MOVContext *c, AVIOContext *pb, MOVAtom atom)
>      sc->spherical->pitch = pitch;
>      sc->spherical->roll  = roll;
>  
> +    sc->spherical->padding = padding;
> +
> +    if (projection == AV_SPHERICAL_EQUIRECTANGULAR_TILE) {
> +        sc->spherical->bound_left   = l;
> +        sc->spherical->bound_top    = t;
> +        sc->spherical->bound_right  = r;
> +        sc->spherical->bound_bottom = b;
> +    }
>      return 0;
>  }
>  
> diff --git a/tests/ref/fate/mov-spherical-mono b/tests/ref/fate/mov-spherical-mono
> index 8048aff..a70d879 100644
> --- a/tests/ref/fate/mov-spherical-mono
> +++ b/tests/ref/fate/mov-spherical-mono
> @@ -8,7 +8,11 @@ inverted=0
>  [SIDE_DATA]
>  side_data_type=Spherical Mapping
>  side_data_size=56
> -projection=equirectangular
> +projection=tiled equirectangular
> +bound_left=148
> +bound_top=73
> +bound_right=147
> +bound_bottom=72
>  yaw=45
>  pitch=30
>  roll=15
> 



More information about the ffmpeg-devel mailing list