|
1 /* |
|
2 * Copyright (C) 2009 The Android Open Source Project |
|
3 * |
|
4 * Licensed under the Apache License, Version 2.0 (the "License"); |
|
5 * you may not use this file except in compliance with the License. |
|
6 * You may obtain a copy of the License at |
|
7 * |
|
8 * http://www.apache.org/licenses/LICENSE-2.0 |
|
9 * |
|
10 * Unless required by applicable law or agreed to in writing, software |
|
11 * distributed under the License is distributed on an "AS IS" BASIS, |
|
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
13 * See the License for the specific language governing permissions and |
|
14 * limitations under the License. |
|
15 */ |
|
16 |
|
17 #ifndef ANDROID_OMX_H_ |
|
18 #define ANDROID_OMX_H_ |
|
19 |
|
20 #include <media/IOMX.h> |
|
21 #include <utils/threads.h> |
|
22 #include <utils/KeyedVector.h> |
|
23 |
|
24 namespace android { |
|
25 |
|
26 struct OMXMaster; |
|
27 class OMXNodeInstance; |
|
28 |
|
29 class OMX : public BnOMX, |
|
30 public IBinder::DeathRecipient { |
|
31 public: |
|
32 OMX(); |
|
33 |
|
34 virtual bool livesLocally(pid_t pid); |
|
35 |
|
36 virtual status_t listNodes(List<ComponentInfo> *list); |
|
37 |
|
38 virtual status_t allocateNode( |
|
39 const char *name, const sp<IOMXObserver> &observer, node_id *node); |
|
40 |
|
41 virtual status_t freeNode(node_id node); |
|
42 |
|
43 virtual status_t sendCommand( |
|
44 node_id node, OMX_COMMANDTYPE cmd, OMX_S32 param); |
|
45 |
|
46 virtual status_t getParameter( |
|
47 node_id node, OMX_INDEXTYPE index, |
|
48 void *params, size_t size); |
|
49 |
|
50 virtual status_t setParameter( |
|
51 node_id node, OMX_INDEXTYPE index, |
|
52 const void *params, size_t size); |
|
53 |
|
54 virtual status_t getConfig( |
|
55 node_id node, OMX_INDEXTYPE index, |
|
56 void *params, size_t size); |
|
57 |
|
58 virtual status_t setConfig( |
|
59 node_id node, OMX_INDEXTYPE index, |
|
60 const void *params, size_t size); |
|
61 |
|
62 virtual status_t useBuffer( |
|
63 node_id node, OMX_U32 port_index, const sp<IMemory> ¶ms, |
|
64 buffer_id *buffer); |
|
65 |
|
66 virtual status_t allocateBuffer( |
|
67 node_id node, OMX_U32 port_index, size_t size, |
|
68 buffer_id *buffer, void **buffer_data); |
|
69 |
|
70 virtual status_t allocateBufferWithBackup( |
|
71 node_id node, OMX_U32 port_index, const sp<IMemory> ¶ms, |
|
72 buffer_id *buffer); |
|
73 |
|
74 virtual status_t freeBuffer( |
|
75 node_id node, OMX_U32 port_index, buffer_id buffer); |
|
76 |
|
77 virtual status_t fillBuffer(node_id node, buffer_id buffer); |
|
78 |
|
79 virtual status_t emptyBuffer( |
|
80 node_id node, |
|
81 buffer_id buffer, |
|
82 OMX_U32 range_offset, OMX_U32 range_length, |
|
83 OMX_U32 flags, OMX_TICKS timestamp); |
|
84 |
|
85 virtual status_t getExtensionIndex( |
|
86 node_id node, |
|
87 const char *parameter_name, |
|
88 OMX_INDEXTYPE *index); |
|
89 |
|
90 virtual sp<IOMXRenderer> createRenderer( |
|
91 const sp<ISurface> &surface, |
|
92 const char *componentName, |
|
93 OMX_COLOR_FORMATTYPE colorFormat, |
|
94 size_t encodedWidth, size_t encodedHeight, |
|
95 size_t displayWidth, size_t displayHeight, |
|
96 int32_t rotationDegrees); |
|
97 |
|
98 virtual void binderDied(const wp<IBinder> &the_late_who); |
|
99 |
|
100 OMX_ERRORTYPE OnEvent( |
|
101 node_id node, |
|
102 OMX_IN OMX_EVENTTYPE eEvent, |
|
103 OMX_IN OMX_U32 nData1, |
|
104 OMX_IN OMX_U32 nData2, |
|
105 OMX_IN OMX_PTR pEventData); |
|
106 |
|
107 OMX_ERRORTYPE OnEmptyBufferDone( |
|
108 node_id node, OMX_IN OMX_BUFFERHEADERTYPE *pBuffer); |
|
109 |
|
110 OMX_ERRORTYPE OnFillBufferDone( |
|
111 node_id node, OMX_IN OMX_BUFFERHEADERTYPE *pBuffer); |
|
112 |
|
113 void invalidateNodeID(node_id node); |
|
114 |
|
115 protected: |
|
116 virtual ~OMX(); |
|
117 |
|
118 private: |
|
119 struct CallbackDispatcher; |
|
120 |
|
121 Mutex mLock; |
|
122 OMXMaster *mMaster; |
|
123 int32_t mNodeCounter; |
|
124 |
|
125 KeyedVector<wp<IBinder>, OMXNodeInstance *> mLiveNodes; |
|
126 KeyedVector<node_id, OMXNodeInstance *> mNodeIDToInstance; |
|
127 KeyedVector<node_id, sp<CallbackDispatcher> > mDispatchers; |
|
128 |
|
129 node_id makeNodeID(OMXNodeInstance *instance); |
|
130 OMXNodeInstance *findInstance(node_id node); |
|
131 sp<CallbackDispatcher> findDispatcher(node_id node); |
|
132 |
|
133 void invalidateNodeID_l(node_id node); |
|
134 |
|
135 OMX(const OMX &); |
|
136 OMX &operator=(const OMX &); |
|
137 }; |
|
138 |
|
139 } // namespace android |
|
140 |
|
141 #endif // ANDROID_OMX_H_ |