| @@ -1930,9 +1930,7 @@ static int mkv_parse_video_projection(AVStream *st, const MatroskaTrack *track) | |||||
| switch (track->video.projection.type) { | switch (track->video.projection.type) { | ||||
| case MATROSKA_VIDEO_PROJECTION_TYPE_EQUIRECTANGULAR: | case MATROSKA_VIDEO_PROJECTION_TYPE_EQUIRECTANGULAR: | ||||
| if (track->video.projection.private.size == 0) | |||||
| projection = AV_SPHERICAL_EQUIRECTANGULAR; | |||||
| else if (track->video.projection.private.size == 20) { | |||||
| if (track->video.projection.private.size == 20) { | |||||
| t = bytestream2_get_be32(&gb); | t = bytestream2_get_be32(&gb); | ||||
| b = bytestream2_get_be32(&gb); | b = bytestream2_get_be32(&gb); | ||||
| l = bytestream2_get_be32(&gb); | l = bytestream2_get_be32(&gb); | ||||
| @@ -1946,15 +1944,15 @@ static int mkv_parse_video_projection(AVStream *st, const MatroskaTrack *track) | |||||
| l, t, r, b); | l, t, r, b); | ||||
| return AVERROR_INVALIDDATA; | return AVERROR_INVALIDDATA; | ||||
| } | } | ||||
| if (l || t || r || b) | |||||
| projection = AV_SPHERICAL_EQUIRECTANGULAR_TILE; | |||||
| else | |||||
| projection = AV_SPHERICAL_EQUIRECTANGULAR; | |||||
| } else { | |||||
| } else if (track->video.projection.private.size != 0) { | |||||
| av_log(NULL, AV_LOG_ERROR, "Unknown spherical metadata\n"); | av_log(NULL, AV_LOG_ERROR, "Unknown spherical metadata\n"); | ||||
| return AVERROR_INVALIDDATA; | return AVERROR_INVALIDDATA; | ||||
| } | } | ||||
| if (l || t || r || b) | |||||
| projection = AV_SPHERICAL_EQUIRECTANGULAR_TILE; | |||||
| else | |||||
| projection = AV_SPHERICAL_EQUIRECTANGULAR; | |||||
| break; | break; | ||||
| case MATROSKA_VIDEO_PROJECTION_TYPE_CUBEMAP: | case MATROSKA_VIDEO_PROJECTION_TYPE_CUBEMAP: | ||||
| if (track->video.projection.private.size < 4) { | if (track->video.projection.private.size < 4) { | ||||
| @@ -1962,13 +1960,12 @@ static int mkv_parse_video_projection(AVStream *st, const MatroskaTrack *track) | |||||
| return AVERROR_INVALIDDATA; | return AVERROR_INVALIDDATA; | ||||
| } else if (track->video.projection.private.size == 12) { | } else if (track->video.projection.private.size == 12) { | ||||
| uint32_t layout = bytestream2_get_be32(&gb); | uint32_t layout = bytestream2_get_be32(&gb); | ||||
| if (layout == 0) { | |||||
| projection = AV_SPHERICAL_CUBEMAP; | |||||
| } else { | |||||
| if (layout) { | |||||
| av_log(NULL, AV_LOG_WARNING, | av_log(NULL, AV_LOG_WARNING, | ||||
| "Unknown spherical cubemap layout %"PRIu32"\n", layout); | "Unknown spherical cubemap layout %"PRIu32"\n", layout); | ||||
| return 0; | return 0; | ||||
| } | } | ||||
| projection = AV_SPHERICAL_CUBEMAP; | |||||
| padding = bytestream2_get_be32(&gb); | padding = bytestream2_get_be32(&gb); | ||||
| } else { | } else { | ||||
| av_log(NULL, AV_LOG_ERROR, "Unknown spherical metadata\n"); | av_log(NULL, AV_LOG_ERROR, "Unknown spherical metadata\n"); | ||||