Index: content/common/gpu/media/omx_video_decode_accelerator.cc |
diff --git a/content/common/gpu/media/omx_video_decode_accelerator.cc b/content/common/gpu/media/omx_video_decode_accelerator.cc |
index 89acf72f76d301d1686b0a063fd94be55ce957db..3f1ee3b425cc220910468fdaf4b7c3efd3a728c1 100644 |
--- a/content/common/gpu/media/omx_video_decode_accelerator.cc |
+++ b/content/common/gpu/media/omx_video_decode_accelerator.cc |
@@ -46,36 +46,35 @@ static bool AreOMXFunctionPointersInitialized() { |
omx_free_handle && omx_deinit); |
} |
-// Maps the media::H264Profile members to the OMX_VIDEO_AVCPROFILETYPE members. |
+// Maps h264-related Profile enum values to OMX_VIDEO_AVCPROFILETYPE values. |
static OMX_U32 MapH264ProfileToOMXAVCProfile(uint32 profile) { |
switch (profile) { |
- case media::H264PROFILE_NONE: |
- return OMX_VIDEO_AVCProfileMax; |
- case media::H264PROFILE_BASELINE: |
+ case media::VideoDecodeAccelerator::H264PROFILE_BASELINE: |
return OMX_VIDEO_AVCProfileBaseline; |
- case media::H264PROFILE_MAIN: |
+ case media::VideoDecodeAccelerator::H264PROFILE_MAIN: |
return OMX_VIDEO_AVCProfileMain; |
- case media::H264PROFILE_EXTENDED: |
+ case media::VideoDecodeAccelerator::H264PROFILE_EXTENDED: |
return OMX_VIDEO_AVCProfileExtended; |
- case media::H264PROFILE_HIGH: |
+ case media::VideoDecodeAccelerator::H264PROFILE_HIGH: |
return OMX_VIDEO_AVCProfileHigh; |
- case media::H264PROFILE_HIGH10PROFILE: |
+ case media::VideoDecodeAccelerator::H264PROFILE_HIGH10PROFILE: |
return OMX_VIDEO_AVCProfileHigh10; |
- case media::H264PROFILE_HIGH422PROFILE: |
+ case media::VideoDecodeAccelerator::H264PROFILE_HIGH422PROFILE: |
return OMX_VIDEO_AVCProfileHigh422; |
- case media::H264PROFILE_HIGH444PREDICTIVEPROFILE: |
+ case media::VideoDecodeAccelerator::H264PROFILE_HIGH444PREDICTIVEPROFILE: |
return OMX_VIDEO_AVCProfileHigh444; |
// Below enums don't have equivalent enum in Openmax. |
- case media::H264PROFILE_SCALABLEBASELINE: |
- case media::H264PROFILE_SCALABLEHIGH: |
- case media::H264PROFILE_STEREOHIGH: |
- case media::H264PROFILE_MULTIVIEWHIGH: |
+ case media::VideoDecodeAccelerator::H264PROFILE_SCALABLEBASELINE: |
+ case media::VideoDecodeAccelerator::H264PROFILE_SCALABLEHIGH: |
+ case media::VideoDecodeAccelerator::H264PROFILE_STEREOHIGH: |
+ case media::VideoDecodeAccelerator::H264PROFILE_MULTIVIEWHIGH: |
// Nvidia OMX video decoder requires the same resources (as that of the |
// High profile) in every profile higher to the Main profile. |
return OMX_VIDEO_AVCProfileHigh444; |
+ default: |
+ NOTREACHED(); |
+ return OMX_VIDEO_AVCProfileMax; |
} |
- NOTREACHED(); |
- return OMX_VIDEO_AVCProfileMax; |
} |
// Helper macros for dealing with failure. If |result| evaluates false, emit |
@@ -133,44 +132,6 @@ void OmxVideoDecodeAccelerator::SetEglState( |
egl_context_ = egl_context; |
} |
-bool OmxVideoDecodeAccelerator::VerifyConfigs( |
- const std::vector<int32>& configs) { |
- size_t cur; |
- for (cur = 0; cur + 1 < configs.size(); cur++) { |
- uint32 n = configs[cur++]; |
- uint32 v = configs[cur]; |
- if ((n == media::VIDEOATTRIBUTEKEY_BITSTREAMFORMAT_FOURCC && |
- v == media::VIDEOCODECFOURCC_H264) || |
- (n == media::VIDEOATTRIBUTEKEY_BITSTREAMFORMAT_BITRATE && |
- v < 14000000 /* Baseline supports up to 14Mbps. */) || |
- (n == media::VIDEOATTRIBUTEKEY_BITSTREAMFORMAT_WIDTH && |
- v <= 1920 /* Baseline supports upto 1080p. */) || |
- (n == media::VIDEOATTRIBUTEKEY_BITSTREAMFORMAT_HEIGHT && |
- v <= 1080 /* Baseline supports up to 1080p. */) || |
- (n == media::VIDEOATTRIBUTEKEY_BITSTREAMFORMAT_H264_LEVEL || |
- n == media::VIDEOATTRIBUTEKEY_BITSTREAMFORMAT_H264_PAYLOADFORMAT || |
- n == media::VIDEOATTRIBUTEKEY_BITSTREAMFORMAT_H264_FEATURE_FMO || |
- n == media::VIDEOATTRIBUTEKEY_BITSTREAMFORMAT_H264_FEATURE_ASO || |
- n == media::VIDEOATTRIBUTEKEY_BITSTREAMFORMAT_H264_FEATURE_INTERLACE || |
- n == media::VIDEOATTRIBUTEKEY_BITSTREAMFORMAT_H264_FEATURE_CABAC || |
- /* TODO(fischman) Shorten the enum name. */ |
- n == media::VIDEOATTRIBUTEKEY_BITSTREAMFORMAT_H264_FEATURE_WEIGHTEDPREDICTION) |
- || |
- (n == media::VIDEOATTRIBUTEKEY_BITSTREAMFORMAT_H264_PROFILE && |
- (v == media::H264PROFILE_BASELINE || v == media::H264PROFILE_MAIN || |
- v == media::H264PROFILE_HIGH)) || |
- (n == media::VIDEOATTRIBUTEKEY_VIDEOCOLORFORMAT && |
- v == media::VIDEOCOLORFORMAT_RGBA)) { |
- if (n == media::VIDEOATTRIBUTEKEY_BITSTREAMFORMAT_H264_PROFILE) { |
- profile_ = v; |
- } |
- continue; |
- } |
- return false; |
- } |
- return cur == configs.size(); |
-} |
- |
// This is to initialize the OMX data structures to default values. |
template <typename T> |
static void InitParam(const OmxVideoDecodeAccelerator& dec, T* param) { |
@@ -179,10 +140,15 @@ static void InitParam(const OmxVideoDecodeAccelerator& dec, T* param) { |
param->nSize = sizeof(T); |
} |
-bool OmxVideoDecodeAccelerator::Initialize(const std::vector<int32>& config) { |
+bool OmxVideoDecodeAccelerator::Initialize(Profile profile) { |
DCHECK_EQ(message_loop_, MessageLoop::current()); |
- RETURN_ON_FAILURE(VerifyConfigs(config), "Invalid config", INVALID_ARGUMENT, |
- false); |
+ |
+ RETURN_ON_FAILURE(profile >= H264PROFILE_MIN && profile <= H264PROFILE_MAX, |
+ "Only h264 supported", INVALID_ARGUMENT, false); |
+ profile_ = MapH264ProfileToOMXAVCProfile(profile); |
+ RETURN_ON_FAILURE(profile_ != OMX_VIDEO_AVCProfileMax, |
+ "Unexpected profile", INVALID_ARGUMENT, false); |
+ |
if (!CreateComponent()) // Does its own RETURN_ON_FAILURE dances. |
return false; |
@@ -515,9 +481,8 @@ void OmxVideoDecodeAccelerator::OnReachedIdleInInitializing() { |
DCHECK_EQ(client_state_, OMX_StateLoaded); |
client_state_ = OMX_StateIdle; |
// Query the resources with the component. |
- if (component_name_is_nvidia_h264ext_ && |
- (profile_ != OMX_VIDEO_AVCProfileMax)) { |
- OMX_INDEXTYPE extension_index; |
+ if (component_name_is_nvidia_h264ext_) { |
+ OMX_INDEXTYPE extension_index; |
OMX_ERRORTYPE result = OMX_GetExtensionIndex( |
component_handle_, |
const_cast<char*>("OMX.Nvidia.index.config.checkresources"), |
@@ -527,9 +492,7 @@ void OmxVideoDecodeAccelerator::OnReachedIdleInInitializing() { |
PLATFORM_FAILURE,); |
OMX_VIDEO_PARAM_PROFILELEVELTYPE video_profile_level; |
InitParam(*this, &video_profile_level); |
- video_profile_level.eProfile = MapH264ProfileToOMXAVCProfile(profile_); |
- RETURN_ON_FAILURE(video_profile_level.eProfile != OMX_VIDEO_AVCProfileMax, |
- "Unexpected profile", INVALID_ARGUMENT,); |
+ video_profile_level.eProfile = profile_; |
result = OMX_SetConfig(component_handle_, extension_index, |
&video_profile_level); |
RETURN_ON_OMX_FAILURE(result, |