Commit ca3179d8 authored by erickung's avatar erickung Committed by Commit bot

EsParserH264 should set proper video profile

Sets video profile based on profile idc in SPS header rather
than setting VIDEO_CODEC_PROFILE_UNKNOWN always.

BUG= internal b/26217237

Review URL: https://codereview.chromium.org/1633573003

Cr-Commit-Position: refs/heads/master@{#371595}
parent c1a43e5b
......@@ -73,7 +73,14 @@ struct MEDIA_EXPORT H264SPS {
kProfileIDCBaseline = 66,
kProfileIDCConstrainedBaseline = kProfileIDCBaseline,
kProfileIDCMain = 77,
kProfileIDScalableBaseline = 83,
kProfileIDScalableHigh = 86,
kProfileIDCHigh = 100,
kProfileIDHigh10 = 110,
kProfileIDSMultiviewHigh = 118,
kProfileIDHigh422 = 122,
kProfileIDStereoHigh = 128,
kProfileIDHigh444Predictive = 244,
};
enum AspectRatioIdc {
......
......@@ -18,6 +18,37 @@
namespace media {
namespace mp2t {
namespace {
VideoCodecProfile ProfileIDCToVideoCodecProfile(int profile_idc) {
switch (profile_idc) {
case H264SPS::kProfileIDCBaseline:
return H264PROFILE_BASELINE;
case H264SPS::kProfileIDCMain:
return H264PROFILE_MAIN;
case H264SPS::kProfileIDCHigh:
return H264PROFILE_HIGH;
case H264SPS::kProfileIDHigh10:
return H264PROFILE_HIGH10PROFILE;
case H264SPS::kProfileIDHigh422:
return H264PROFILE_HIGH422PROFILE;
case H264SPS::kProfileIDHigh444Predictive:
return H264PROFILE_HIGH444PREDICTIVEPROFILE;
case H264SPS::kProfileIDScalableBaseline:
return H264PROFILE_SCALABLEBASELINE;
case H264SPS::kProfileIDScalableHigh:
return H264PROFILE_SCALABLEHIGH;
case H264SPS::kProfileIDStereoHigh:
return H264PROFILE_STEREOHIGH;
case H264SPS::kProfileIDSMultiviewHigh:
return H264PROFILE_MULTIVIEWHIGH;
}
NOTREACHED() << "unknown video profile: " << profile_idc;
return VIDEO_CODEC_PROFILE_UNKNOWN;
}
} // namespace
// An AUD NALU is at least 4 bytes:
// 3 bytes for the start code + 1 byte for the NALU type.
const int kMinAUDSize = 4;
......@@ -281,9 +312,9 @@ bool EsParserH264::UpdateVideoDecoderConfig(const H264SPS* sps) {
return false;
VideoDecoderConfig video_decoder_config(
kCodecH264, VIDEO_CODEC_PROFILE_UNKNOWN, PIXEL_FORMAT_YV12,
COLOR_SPACE_HD_REC709, coded_size, visible_rect, natural_size,
std::vector<uint8_t>(), false);
kCodecH264, ProfileIDCToVideoCodecProfile(sps->profile_idc),
PIXEL_FORMAT_YV12, COLOR_SPACE_HD_REC709, coded_size, visible_rect,
natural_size, std::vector<uint8_t>(), false);
if (!video_decoder_config.Matches(last_video_decoder_config_)) {
DVLOG(1) << "Profile IDC: " << sps->profile_idc;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment