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

James Almer jamrial at gmail.com
Tue Feb 28 17:58:11 EET 2017


On 2/21/2017 8:07 PM, James Almer wrote:
> 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
>>

CCing this time because i forgot last time. Sorry



More information about the ffmpeg-devel mailing list