| Index: media/filters/h264_parser.cc
|
| diff --git a/media/filters/h264_parser.cc b/media/filters/h264_parser.cc
|
| index 7aced4cdf443b7d2dda231fcc6630993d45450e6..052f441d258bc77a38f9e313ceb84bcffd5e584c 100644
|
| --- a/media/filters/h264_parser.cc
|
| +++ b/media/filters/h264_parser.cc
|
| @@ -121,6 +121,24 @@ base::Optional<gfx::Rect> H264SPS::GetVisibleRect() const {
|
| coded_size->height() - crop_top - crop_bottom);
|
| }
|
|
|
| +// Based on T-REC-H.264 E.2.1, "VUI parameters semantics",
|
| +// available from http://www.itu.int/rec/T-REC-H.264.
|
| +gfx::ColorSpace H264SPS::GetColorSpace() const {
|
| + if (colour_description_present_flag) {
|
| + return gfx::ColorSpace(
|
| + colour_primaries, transfer_characteristics, matrix_coefficients,
|
| + video_full_range_flag ? gfx::ColorSpace::RangeID::FULL
|
| + : gfx::ColorSpace::RangeID::LIMITED);
|
| + } else {
|
| + return gfx::ColorSpace(gfx::ColorSpace::PrimaryID::UNSPECIFIED,
|
| + gfx::ColorSpace::TransferID::UNSPECIFIED,
|
| + gfx::ColorSpace::MatrixID::UNSPECIFIED,
|
| + video_full_range_flag
|
| + ? gfx::ColorSpace::RangeID::FULL
|
| + : gfx::ColorSpace::RangeID::LIMITED);
|
| + }
|
| +}
|
| +
|
| H264PPS::H264PPS() {
|
| memset(this, 0, sizeof(*this));
|
| }
|
| @@ -813,13 +831,17 @@ H264Parser::Result H264Parser::ParseVUIParameters(H264SPS* sps) {
|
| if (data)
|
| READ_BOOL_OR_RETURN(&data); // overscan_appropriate_flag
|
|
|
| - READ_BOOL_OR_RETURN(&data); // video_signal_type_present_flag
|
| - if (data) {
|
| - READ_BITS_OR_RETURN(3, &data); // video_format
|
| - READ_BOOL_OR_RETURN(&data); // video_full_range_flag
|
| - READ_BOOL_OR_RETURN(&data); // colour_description_present_flag
|
| - if (data)
|
| - READ_BITS_OR_RETURN(24, &data); // color description syntax elements
|
| + READ_BOOL_OR_RETURN(&sps->video_signal_type_present_flag);
|
| + if (sps->video_signal_type_present_flag) {
|
| + READ_BITS_OR_RETURN(3, &sps->video_format);
|
| + READ_BOOL_OR_RETURN(&sps->video_full_range_flag);
|
| + READ_BOOL_OR_RETURN(&sps->colour_description_present_flag);
|
| + if (sps->colour_description_present_flag) {
|
| + // color description syntax elements
|
| + READ_BITS_OR_RETURN(8, &sps->colour_primaries);
|
| + READ_BITS_OR_RETURN(8, &sps->transfer_characteristics);
|
| + READ_BITS_OR_RETURN(8, &sps->matrix_coefficients);
|
| + }
|
| }
|
|
|
| READ_BOOL_OR_RETURN(&data); // chroma_loc_info_present_flag
|
|
|