| Index: media/base/video_codecs.cc
|
| diff --git a/media/base/video_codecs.cc b/media/base/video_codecs.cc
|
| index 7ed18532d624d4347ade7b4656df60d2c2c1bdaa..5e0cf5c333ce8377c45fef7018cd39d5ef042708 100644
|
| --- a/media/base/video_codecs.cc
|
| +++ b/media/base/video_codecs.cc
|
| @@ -153,18 +153,18 @@ bool ParseNewStyleVp9CodecID(const std::string& codec_id,
|
|
|
| *level_idc = values[1];
|
| switch (*level_idc) {
|
| - case 1:
|
| + case 10:
|
| case 11:
|
| - case 2:
|
| + case 20:
|
| case 21:
|
| - case 3:
|
| + case 30:
|
| case 31:
|
| - case 4:
|
| + case 40:
|
| case 41:
|
| - case 5:
|
| + case 50:
|
| case 51:
|
| case 52:
|
| - case 6:
|
| + case 60:
|
| case 61:
|
| case 62:
|
| break;
|
| @@ -181,32 +181,46 @@ bool ParseNewStyleVp9CodecID(const std::string& codec_id,
|
|
|
| if (values.size() < 4)
|
| return true;
|
| - color_space->primaries = VideoColorSpace::GetPrimaryID(values[3]);
|
| - if (color_space->primaries == VideoColorSpace::PrimaryID::INVALID) {
|
| - DVLOG(3) << __func__ << " Invalid color primaries (" << values[3] << ")";
|
| + const int chroma_subsampling = values[3];
|
| + if (chroma_subsampling > 3) {
|
| + DVLOG(3) << __func__ << " Invalid chroma subsampling ("
|
| + << chroma_subsampling << ")";
|
| return false;
|
| }
|
|
|
| if (values.size() < 5)
|
| return true;
|
| - color_space->transfer = VideoColorSpace::GetTransferID(values[4]);
|
| - if (color_space->transfer == VideoColorSpace::TransferID::INVALID) {
|
| - DVLOG(3) << __func__ << " Invalid transfer function (" << values[4] << ")";
|
| + color_space->primaries = VideoColorSpace::GetPrimaryID(values[4]);
|
| + if (color_space->primaries == VideoColorSpace::PrimaryID::INVALID) {
|
| + DVLOG(3) << __func__ << " Invalid color primaries (" << values[4] << ")";
|
| return false;
|
| }
|
|
|
| if (values.size() < 6)
|
| return true;
|
| - color_space->matrix = VideoColorSpace::GetMatrixID(values[5]);
|
| + color_space->transfer = VideoColorSpace::GetTransferID(values[5]);
|
| + if (color_space->transfer == VideoColorSpace::TransferID::INVALID) {
|
| + DVLOG(3) << __func__ << " Invalid transfer function (" << values[5] << ")";
|
| + return false;
|
| + }
|
| +
|
| + if (values.size() < 7)
|
| + return true;
|
| + color_space->matrix = VideoColorSpace::GetMatrixID(values[6]);
|
| if (color_space->matrix == VideoColorSpace::MatrixID::INVALID) {
|
| - DVLOG(3) << __func__ << " Invalid matrix coefficients (" << values[5]
|
| + DVLOG(3) << __func__ << " Invalid matrix coefficients (" << values[6]
|
| << ")";
|
| return false;
|
| }
|
| + if (color_space->matrix == VideoColorSpace::MatrixID::RGB &&
|
| + chroma_subsampling != 3) {
|
| + DVLOG(3) << __func__ << " Invalid combination of chroma_subsampling ("
|
| + << ") and matrix coefficients (" << values[6] << ")";
|
| + }
|
|
|
| - if (values.size() < 7)
|
| + if (values.size() < 8)
|
| return true;
|
| - const int video_full_range_flag = values[6];
|
| + const int video_full_range_flag = values[7];
|
| if (video_full_range_flag > 1) {
|
| DVLOG(3) << __func__ << " Invalid full range flag ("
|
| << video_full_range_flag << ")";
|
| @@ -216,17 +230,6 @@ bool ParseNewStyleVp9CodecID(const std::string& codec_id,
|
| ? gfx::ColorSpace::RangeID::FULL
|
| : gfx::ColorSpace::RangeID::LIMITED;
|
|
|
| - if (values.size() < 8)
|
| - return true;
|
| - const int chroma_subsampling = values[7];
|
| - if (chroma_subsampling > 3 ||
|
| - (chroma_subsampling != 3 &&
|
| - color_space->matrix == VideoColorSpace::MatrixID::RGB)) {
|
| - DVLOG(3) << __func__ << " Invalid chroma subsampling ("
|
| - << chroma_subsampling << ")";
|
| - return false;
|
| - }
|
| -
|
| return true;
|
| }
|
|
|
|
|