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

Side by Side Diff: content/common/gpu/omx_video_decode_accelerator.h

Issue 6979017: Revert 86681 - Updated OMX decoder for recent PPAPI changes, and added to the build. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 6 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CONTENT_COMMON_GPU_OMX_VIDEO_DECODE_ACCELERATOR_H_
6 #define CONTENT_COMMON_GPU_OMX_VIDEO_DECODE_ACCELERATOR_H_
7
8 #include <dlfcn.h>
9 #include <map>
10 #include <queue>
11 #include <string>
12 #include <utility>
13 #include <vector>
14
15 #include "base/bind.h"
16 #include "base/callback.h"
17 #include "base/logging.h"
18 #include "base/message_loop.h"
19 #include "base/shared_memory.h"
20 #include "media/video/video_decode_accelerator.h"
21 #include "third_party/openmax/il/OMX_Component.h"
22 #include "third_party/openmax/il/OMX_Core.h"
23 #include "third_party/openmax/il/OMX_Video.h"
24
25 // Class to wrap OpenMAX IL accelerator behind VideoDecodeAccelerator interface.
26 class OmxVideoDecodeAccelerator : public media::VideoDecodeAccelerator {
27 public:
28 OmxVideoDecodeAccelerator(media::VideoDecodeAccelerator::Client* client,
29 MessageLoop* message_loop);
30 virtual ~OmxVideoDecodeAccelerator();
31
32 // media::VideoDecodeAccelerator implementation.
33 void GetConfigs(const std::vector<uint32>& requested_configs,
34 std::vector<uint32>* matched_configs) OVERRIDE;
35 bool Initialize(const std::vector<uint32>& config) OVERRIDE;
36 bool Decode(const media::BitstreamBuffer& bitstream_buffer) OVERRIDE;
37 virtual void AssignGLESBuffers(
38 const std::vector<media::GLESBuffer>& buffers) OVERRIDE;
39 virtual void AssignSysmemBuffers(
40 const std::vector<media::SysmemBuffer>& buffers) OVERRIDE;
41 void ReusePictureBuffer(int32 picture_buffer_id) OVERRIDE;
42 bool Flush() OVERRIDE;
43 bool Abort() OVERRIDE;
44
45 private:
46 MessageLoop* message_loop_;
47 OMX_HANDLETYPE component_handle_;
48
49 // Common initialization code for Assign{GLES,Sysmem}Buffers.
50 void AssignBuffersHelper(const std::vector<media::BaseBuffer*>& buffers);
51
52 // Create the Component for OMX. Handles all OMX initialization.
53 bool CreateComponent();
54 // Buffer allocation/free methods for input and output buffers.
55 bool AllocateInputBuffers();
56 bool AllocateOutputBuffers();
57 void FreeInputBuffers();
58 void FreeOutputBuffers();
59
60 // Methods to handle OMX state transitions.
61 bool TransitionToState(OMX_STATETYPE new_state);
62 void OnStateChangeLoadedToIdle(OMX_STATETYPE state);
63 void OnStateChangeIdleToExecuting(OMX_STATETYPE state);
64 void OnPortCommandFlush(OMX_STATETYPE state);
65 void OnStateChangeExecutingToIdle(OMX_STATETYPE state);
66 void OnStateChangeIdleToLoaded(OMX_STATETYPE state);
67 // Stop the components when error is detected.
68 void StopOnError();
69 // Trigger the initial call to FillBuffers to start the decoding process.
70 void InitialFillBuffer();
71 // Methods for shutdown
72 void PauseFromExecuting(OMX_STATETYPE ignored);
73 void FlushIOPorts();
74 void PortFlushDone(int port);
75 void FlushBegin();
76
77 // Determine whether we actually start decoding the bitstream.
78 bool CanAcceptInput();
79 // Determine whether we can issue fill buffer or empty buffer
80 // to the decoder based on the current state and port state.
81 bool CanEmptyBuffer();
82 bool CanFillBuffer();
83 void OnPortSettingsChangedRun(int port, OMX_INDEXTYPE index);
84
85 // Decoded width/height from bitstream.
86 int width_;
87 int height_;
88 std::vector<uint32> component_config_;
89
90 // IL-client state.
91 OMX_STATETYPE client_state_;
92
93 // Following are input port related variables.
94 int input_buffer_count_;
95 int input_buffer_size_;
96 int input_port_;
97 int input_buffers_at_component_;
98
99 // Following are output port related variables.
100 int output_buffer_count_;
101 int output_buffer_size_;
102 int output_port_;
103 int output_buffers_at_component_;
104
105 bool uses_egl_image_;
106 // Free input OpenMAX buffers that can be used to take bitstream from demuxer.
107 std::queue<OMX_BUFFERHEADERTYPE*> free_input_buffers_;
108
109 // For output buffer recycling cases.
110 std::vector<media::BaseBuffer*> assigned_picture_buffers_;
111 typedef std::pair<int32, OMX_BUFFERHEADERTYPE*> OutputPicture;
112 std::vector<OutputPicture> output_pictures_;
113
114 // To expose client callbacks from VideoDecodeAccelerator.
115 Client* client_;
116
117 std::vector<uint32> texture_ids_;
118 std::vector<uint32> context_ids_;
119 // Method to handle events
120 void EventHandlerCompleteTask(OMX_EVENTTYPE event,
121 OMX_U32 data1,
122 OMX_U32 data2);
123
124 // Method to receive buffers from component's input port
125 void EmptyBufferDoneTask(OMX_BUFFERHEADERTYPE* buffer);
126
127 // Method to receive buffers from component's output port
128 void FillBufferDoneTask(OMX_BUFFERHEADERTYPE* buffer);
129 typedef std::pair<OMX_BUFFERHEADERTYPE*, uint32> OMXbufferTexture;
130
131 typedef std::map<OMX_BUFFERHEADERTYPE*,
132 std::pair<base::SharedMemory*, int32> > OMXBufferIdMap;
133 OMXBufferIdMap omx_buff_ids_;
134
135 // Method used the change the state of the port.
136 void ChangePort(OMX_COMMANDTYPE cmd, int port_index);
137
138 // Member function pointers to respond to events
139 void (OmxVideoDecodeAccelerator::*on_port_disable_event_func_)(int port);
140 void (OmxVideoDecodeAccelerator::*on_port_enable_event_func_)(int port);
141 void (OmxVideoDecodeAccelerator::*on_state_event_func_)(OMX_STATETYPE state);
142 void (OmxVideoDecodeAccelerator::*on_flush_event_func_)(int port);
143 void (OmxVideoDecodeAccelerator::*on_buffer_flag_event_func_)();
144
145 // Callback methods for the OMX component.
146 // When these callbacks are received, the
147 // call is delegated to the three internal methods above.
148 static OMX_ERRORTYPE EventHandler(OMX_HANDLETYPE component,
149 OMX_PTR priv_data,
150 OMX_EVENTTYPE event,
151 OMX_U32 data1, OMX_U32 data2,
152 OMX_PTR event_data);
153 static OMX_ERRORTYPE EmptyBufferCallback(OMX_HANDLETYPE component,
154 OMX_PTR priv_data,
155 OMX_BUFFERHEADERTYPE* buffer);
156 static OMX_ERRORTYPE FillBufferCallback(OMX_HANDLETYPE component,
157 OMX_PTR priv_data,
158 OMX_BUFFERHEADERTYPE* buffer);
159 };
160
161 #endif // CONTENT_COMMON_GPU_OMX_VIDEO_DECODE_ACCELERATOR_H_
OLDNEW
« no previous file with comments | « content/common/gpu/gpu_video_service.cc ('k') | content/common/gpu/omx_video_decode_accelerator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698