Chromium Code Reviews| 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 c316eab88f3a4a959e8e6fa85a5d62e710fc06cc..915cc8edbf4df0a25462beca3121abac568aeaf5 100644 |
| --- a/content/common/gpu/media/omx_video_decode_accelerator.cc |
| +++ b/content/common/gpu/media/omx_video_decode_accelerator.cc |
| @@ -112,7 +112,8 @@ OmxVideoDecodeAccelerator::OmxVideoDecodeAccelerator( |
| output_port_(0), |
| output_buffers_at_component_(0), |
| client_(client), |
| - profile_(OMX_VIDEO_AVCProfileMax), |
| + codec_(UNKNOWN), |
| + h264_profile_(OMX_VIDEO_AVCProfileMax), |
| component_name_is_nvidia_h264ext_(false) { |
| RETURN_ON_FAILURE(AreOMXFunctionPointersInitialized(), |
| "Failed to load openmax library", PLATFORM_FAILURE,); |
| @@ -146,12 +147,17 @@ static void InitParam(const OmxVideoDecodeAccelerator& dec, T* param) { |
| bool OmxVideoDecodeAccelerator::Initialize(media::VideoCodecProfile profile) { |
| DCHECK_EQ(message_loop_, MessageLoop::current()); |
| - RETURN_ON_FAILURE((profile >= media::H264PROFILE_MIN && |
| - profile <= media::H264PROFILE_MAX), |
| - "Only h264 supported", INVALID_ARGUMENT, false); |
| - profile_ = MapH264ProfileToOMXAVCProfile(profile); |
| - RETURN_ON_FAILURE(profile_ != OMX_VIDEO_AVCProfileMax, |
| - "Unexpected profile", INVALID_ARGUMENT, false); |
| + if (profile >= media::H264PROFILE_MIN && profile <= media::H264PROFILE_MAX) { |
| + codec_ = H264; |
| + h264_profile_ = MapH264ProfileToOMXAVCProfile(profile); |
| + RETURN_ON_FAILURE(h264_profile_ != OMX_VIDEO_AVCProfileMax, |
| + "Unexpected profile", INVALID_ARGUMENT, false); |
| + } else if (profile == media::VP8PROFILE_MAIN) { |
| + codec_ = VP8; |
| + } else { |
| + RETURN_ON_FAILURE(false, "Unsupported profile: " << profile, |
| + INVALID_ARGUMENT, false); |
| + } |
| if (!CreateComponent()) // Does its own RETURN_ON_FAILURE dances. |
| return false; |
| @@ -178,37 +184,35 @@ bool OmxVideoDecodeAccelerator::CreateComponent() { |
| }; |
| // TODO(vhiremath@nvidia.com) Get this role_name from the configs |
| - // For now hard coding to avc. |
| - OMX_STRING role_name = const_cast<OMX_STRING>("video_decoder.avc"); |
| + // For now hard-coding. |
| + OMX_STRING role_name = codec_ == H264 ? |
| + const_cast<OMX_STRING>("video_decoder.avc") : |
| + const_cast<OMX_STRING>("video_decoder.vpx"); |
| // Get the first component for this role and set the role on it. |
| OMX_U32 num_components = 1; |
| - scoped_array<OMX_U8> component(new OMX_U8[OMX_MAX_STRINGNAME_SIZE]); |
| + std::string component(OMX_MAX_STRINGNAME_SIZE, '\0'); |
| + char* component_as_array = string_as_array(&component); |
| OMX_ERRORTYPE result = omx_get_components_of_role( |
| - role_name, &num_components, reinterpret_cast<OMX_U8**>(&component)); |
| - RETURN_ON_OMX_FAILURE(result, "Unsupport role: " << role_name, |
| + role_name, &num_components, |
| + reinterpret_cast<OMX_U8**>(&component_as_array)); |
| + RETURN_ON_OMX_FAILURE(result, "Unsupported role: " << role_name, |
| PLATFORM_FAILURE, false); |
| RETURN_ON_FAILURE(num_components == 1, "No components for: " << role_name, |
| PLATFORM_FAILURE, false); |
| + component_name_is_nvidia_h264ext_ = component == "OMX.Nvidia.h264ext.decode"; |
| // Get the handle to the component. |
| result = omx_gethandle( |
| - &component_handle_, reinterpret_cast<OMX_STRING>(component.get()), |
| + &component_handle_, |
| + reinterpret_cast<OMX_STRING>(string_as_array(&component)), |
| this, &omx_accelerator_callbacks); |
| RETURN_ON_OMX_FAILURE(result, |
| - "Failed to OMX_GetHandle on: " << component.get(), |
| + "Failed to OMX_GetHandle on: " << component, |
| PLATFORM_FAILURE, false); |
| client_state_ = OMX_StateLoaded; |
| - component_name_is_nvidia_h264ext_ = !strcmp( |
|
Ami GONE FROM CHROMIUM
2012/07/20 19:55:19
This is just some random cleanup.
|
| - reinterpret_cast<char *>(component.get()), |
| - "OMX.Nvidia.h264ext.decode"); |
| - |
| - bool component_name_is_sec_h264ext = !strcmp( |
| - reinterpret_cast<char *>(component.get()), |
| - "OMX.SEC.AVC.Decoder"); |
| - Gles2TextureToEglImageTranslator* texture_to_egl_image_translator = |
| - new Gles2TextureToEglImageTranslator(component_name_is_sec_h264ext); |
| - texture_to_egl_image_translator_.reset(texture_to_egl_image_translator); |
| + texture_to_egl_image_translator_.reset(new Gles2TextureToEglImageTranslator( |
| + StartsWithASCII(component, "OMX.SEC.", true))); |
| // Get the port information. This will obtain information about the number of |
| // ports and index of the first port. |
| @@ -498,7 +502,8 @@ void OmxVideoDecodeAccelerator::OnReachedIdleInInitializing() { |
| PLATFORM_FAILURE,); |
| OMX_VIDEO_PARAM_PROFILELEVELTYPE video_profile_level; |
| InitParam(*this, &video_profile_level); |
| - video_profile_level.eProfile = profile_; |
| + DCHECK_EQ(codec_, H264); |
| + video_profile_level.eProfile = h264_profile_; |
| result = OMX_SetConfig(component_handle_, extension_index, |
| &video_profile_level); |
| RETURN_ON_OMX_FAILURE(result, |