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

Side by Side Diff: content/common/gpu/media/omx_video_decode_accelerator.cc

Issue 10967047: Set the config OMX_IndexConfigCommonMirror/OMX_MirrorVertical (Closed) Base URL: https://src.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 3 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/common/gpu/media/omx_video_decode_accelerator.h" 5 #include "content/common/gpu/media/omx_video_decode_accelerator.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/debug/trace_event.h" 8 #include "base/debug/trace_event.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/stl_util.h" 10 #include "base/stl_util.h"
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 OMX_U32 num_components = 1; 183 OMX_U32 num_components = 1;
184 std::string component(OMX_MAX_STRINGNAME_SIZE, '\0'); 184 std::string component(OMX_MAX_STRINGNAME_SIZE, '\0');
185 char* component_as_array = string_as_array(&component); 185 char* component_as_array = string_as_array(&component);
186 OMX_ERRORTYPE result = omx_get_components_of_role( 186 OMX_ERRORTYPE result = omx_get_components_of_role(
187 role_name, &num_components, 187 role_name, &num_components,
188 reinterpret_cast<OMX_U8**>(&component_as_array)); 188 reinterpret_cast<OMX_U8**>(&component_as_array));
189 RETURN_ON_OMX_FAILURE(result, "Unsupported role: " << role_name, 189 RETURN_ON_OMX_FAILURE(result, "Unsupported role: " << role_name,
190 PLATFORM_FAILURE, false); 190 PLATFORM_FAILURE, false);
191 RETURN_ON_FAILURE(num_components == 1, "No components for: " << role_name, 191 RETURN_ON_FAILURE(num_components == 1, "No components for: " << role_name,
192 PLATFORM_FAILURE, false); 192 PLATFORM_FAILURE, false);
193 component_name_is_nvidia_h264ext_ = component == "OMX.Nvidia.h264ext.decode"; 193 component_name_is_nvidia_h264ext_ = StartsWithASCII(
194 component, "OMX.Nvidia.h264ext.decode", true);
194 195
195 // Get the handle to the component. 196 // Get the handle to the component.
196 result = omx_gethandle( 197 result = omx_gethandle(
197 &component_handle_, 198 &component_handle_,
198 reinterpret_cast<OMX_STRING>(string_as_array(&component)), 199 reinterpret_cast<OMX_STRING>(string_as_array(&component)),
199 this, &omx_accelerator_callbacks); 200 this, &omx_accelerator_callbacks);
200 RETURN_ON_OMX_FAILURE(result, 201 RETURN_ON_OMX_FAILURE(result,
201 "Failed to OMX_GetHandle on: " << component, 202 "Failed to OMX_GetHandle on: " << component,
202 PLATFORM_FAILURE, false); 203 PLATFORM_FAILURE, false);
203 client_state_ = OMX_StateLoaded; 204 client_state_ = OMX_StateLoaded;
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 PLATFORM_FAILURE,); 511 PLATFORM_FAILURE,);
511 OMX_VIDEO_PARAM_PROFILELEVELTYPE video_profile_level; 512 OMX_VIDEO_PARAM_PROFILELEVELTYPE video_profile_level;
512 InitParam(*this, &video_profile_level); 513 InitParam(*this, &video_profile_level);
513 DCHECK_EQ(codec_, H264); 514 DCHECK_EQ(codec_, H264);
514 video_profile_level.eProfile = h264_profile_; 515 video_profile_level.eProfile = h264_profile_;
515 result = OMX_SetConfig(component_handle_, extension_index, 516 result = OMX_SetConfig(component_handle_, extension_index,
516 &video_profile_level); 517 &video_profile_level);
517 RETURN_ON_OMX_FAILURE(result, 518 RETURN_ON_OMX_FAILURE(result,
518 "Resource Allocation failed", 519 "Resource Allocation failed",
519 PLATFORM_FAILURE,); 520 PLATFORM_FAILURE,);
521
522 // The OMX spec doesn't say whether (0,0) is bottom-left or top-left, but
523 // NVIDIA OMX implementation used with this class chooses the opposite
524 // of other APIs used for HW decode (DXVA, OS/X, VAAPI). So we request
525 // a mirror here to avoid having to track Y-orientation throughout the
526 // stack (particularly unattractive because this is exposed to ppapi
527 // plugin authors and NaCl programs).
528 OMX_CONFIG_MIRRORTYPE mirror_config;
529 InitParam(*this, &mirror_config);
530 result = OMX_GetConfig(component_handle_,
531 OMX_IndexConfigCommonMirror, &mirror_config);
532 RETURN_ON_OMX_FAILURE(result, "Failed to get mirror", PLATFORM_FAILURE,);
533 mirror_config.eMirror = OMX_MirrorVertical;
534 result = OMX_SetConfig(component_handle_,
535 OMX_IndexConfigCommonMirror, &mirror_config);
536 RETURN_ON_OMX_FAILURE(result, "Failed to set mirror", PLATFORM_FAILURE,);
520 } 537 }
521 BeginTransitionToState(OMX_StateExecuting); 538 BeginTransitionToState(OMX_StateExecuting);
522 } 539 }
523 540
524 void OmxVideoDecodeAccelerator::OnReachedExecutingInInitializing() { 541 void OmxVideoDecodeAccelerator::OnReachedExecutingInInitializing() {
525 DCHECK_EQ(client_state_, OMX_StateIdle); 542 DCHECK_EQ(client_state_, OMX_StateIdle);
526 client_state_ = OMX_StateExecuting; 543 client_state_ = OMX_StateExecuting;
527 current_state_change_ = NO_TRANSITION; 544 current_state_change_ = NO_TRANSITION;
528 545
529 // Request filling of our fake buffers to trigger decode processing. In 546 // Request filling of our fake buffers to trigger decode processing. In
(...skipping 599 matching lines...) Expand 10 before | Expand all | Expand 10 after
1129 1146
1130 bool OmxVideoDecodeAccelerator::SendCommandToPort( 1147 bool OmxVideoDecodeAccelerator::SendCommandToPort(
1131 OMX_COMMANDTYPE cmd, int port_index) { 1148 OMX_COMMANDTYPE cmd, int port_index) {
1132 DCHECK_EQ(message_loop_, MessageLoop::current()); 1149 DCHECK_EQ(message_loop_, MessageLoop::current());
1133 OMX_ERRORTYPE result = OMX_SendCommand(component_handle_, 1150 OMX_ERRORTYPE result = OMX_SendCommand(component_handle_,
1134 cmd, port_index, 0); 1151 cmd, port_index, 0);
1135 RETURN_ON_OMX_FAILURE(result, "SendCommand() failed" << cmd, 1152 RETURN_ON_OMX_FAILURE(result, "SendCommand() failed" << cmd,
1136 PLATFORM_FAILURE, false); 1153 PLATFORM_FAILURE, false);
1137 return true; 1154 return true;
1138 } 1155 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698