1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-08-10 06:10:52 +02:00

mov: Export bounds and padding from spherical metadata

Update the fate test as needed.
This commit is contained in:
Vittorio Giovara
2017-02-10 15:36:56 -05:00
parent 1b7ffddb3a
commit 022b4ea583
2 changed files with 32 additions and 2 deletions

View File

@@ -4637,6 +4637,8 @@ static int mov_read_sv3d(MOVContext *c, AVIOContext *pb, MOVAtom atom)
MOVStreamContext *sc; MOVStreamContext *sc;
int size; int size;
int32_t yaw, pitch, roll; int32_t yaw, pitch, roll;
size_t l = 0, t = 0, r = 0, b = 0;
size_t padding = 0;
uint32_t tag; uint32_t tag;
enum AVSphericalProjection projection; enum AVSphericalProjection projection;
@@ -4698,9 +4700,26 @@ static int mov_read_sv3d(MOVContext *c, AVIOContext *pb, MOVAtom atom)
switch (tag) { switch (tag) {
case MKTAG('c','b','m','p'): case MKTAG('c','b','m','p'):
projection = AV_SPHERICAL_CUBEMAP; projection = AV_SPHERICAL_CUBEMAP;
padding = avio_rb32(pb);
break; break;
case MKTAG('e','q','u','i'): 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 %"SIZE_SPECIFIER","
"%"SIZE_SPECIFIER",%"SIZE_SPECIFIER",%"SIZE_SPECIFIER"\n",
l, t, r, b);
return AVERROR_INVALIDDATA;
}
if (l || t || r || b)
projection = AV_SPHERICAL_EQUIRECTANGULAR_TILE;
else
projection = AV_SPHERICAL_EQUIRECTANGULAR;
break; break;
default: default:
av_log(c->fc, AV_LOG_ERROR, "Unknown projection type\n"); av_log(c->fc, AV_LOG_ERROR, "Unknown projection type\n");
@@ -4717,6 +4736,13 @@ static int mov_read_sv3d(MOVContext *c, AVIOContext *pb, MOVAtom atom)
sc->spherical->pitch = pitch; sc->spherical->pitch = pitch;
sc->spherical->roll = roll; sc->spherical->roll = roll;
sc->spherical->padding = padding;
sc->spherical->bound_left = l;
sc->spherical->bound_top = t;
sc->spherical->bound_right = r;
sc->spherical->bound_bottom = b;
return 0; return 0;
} }

View File

@@ -8,7 +8,11 @@ inverted=0
[SIDE_DATA] [SIDE_DATA]
side_data_type=Spherical Mapping side_data_type=Spherical Mapping
side_data_size=56 side_data_size=56
projection=equirectangular projection=tiled equirectangular
bound_left=148
bound_top=73
bound_right=147
bound_bottom=72
yaw=45 yaw=45
pitch=30 pitch=30
roll=15 roll=15