Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1019)

Unified Diff: content/common/gpu/media/omx_video_decode_accelerator.cc

Issue 7779001: Replace the use of an int32* with a proper struct for decoder configuration. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Replaced struct with explicit profile parameter. Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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,

Powered by Google App Engine
This is Rietveld 408576698