You've already forked FFmpeg
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:
@@ -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,8 +4700,25 @@ 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'):
|
||||||
|
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;
|
projection = AV_SPHERICAL_EQUIRECTANGULAR;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user