|
|
|
@ -3237,6 +3237,8 @@ static int mov_read_sv3d(MOVContext *c, AVIOContext *pb, MOVAtom atom) |
|
|
|
|
MOVStreamContext *sc; |
|
|
|
|
int size, version, layout; |
|
|
|
|
int32_t yaw, pitch, roll; |
|
|
|
|
size_t l = 0, t = 0, r = 0, b = 0; |
|
|
|
|
size_t padding = 0; |
|
|
|
|
uint32_t tag; |
|
|
|
|
enum AVSphericalProjection projection; |
|
|
|
|
|
|
|
|
@ -3322,9 +3324,25 @@ static int mov_read_sv3d(MOVContext *c, AVIOContext *pb, MOVAtom atom) |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
projection = AV_SPHERICAL_CUBEMAP; |
|
|
|
|
padding = avio_rb32(pb); |
|
|
|
|
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"); |
|
|
|
@ -3341,6 +3359,13 @@ static int mov_read_sv3d(MOVContext *c, AVIOContext *pb, MOVAtom atom) |
|
|
|
|
sc->spherical->pitch = pitch; |
|
|
|
|
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; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|