14b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber/*
24b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber * Copyright (C) 2011 The Android Open Source Project
34b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber *
44b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
54b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber * you may not use this file except in compliance with the License.
64b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber * You may obtain a copy of the License at
74b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber *
84b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
94b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber *
104b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber * Unless required by applicable law or agreed to in writing, software
114b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
124b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber * See the License for the specific language governing permissions and
144b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber * limitations under the License.
154b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber */
164b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
174b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber#ifndef SOFT_OMX_COMPONENT_H_
184b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
194b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber#define SOFT_OMX_COMPONENT_H_
204b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
214b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber#include <media/stagefright/foundation/ABase.h>
224b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber#include <media/stagefright/foundation/AString.h>
234b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber#include <utils/RefBase.h>
244b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
254b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber#include <OMX_Component.h>
264b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
274b3913a3e43d3180b21d77cc2f717b446350354fAndreas Hubernamespace android {
284b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
294b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huberstruct SoftOMXComponent : public RefBase {
304b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    SoftOMXComponent(
314b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            const char *name,
324b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            const OMX_CALLBACKTYPE *callbacks,
334b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_PTR appData,
344b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_COMPONENTTYPE **component);
354b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
364b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    virtual OMX_ERRORTYPE initCheck() const;
374b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
384b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    void setLibHandle(void *libHandle);
394b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    void *libHandle() const;
404b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
4154802de06cfd336c9232a5647b3310fef33d4d81Andreas Huber    virtual void prepareForDestruction() {}
4254802de06cfd336c9232a5647b3310fef33d4d81Andreas Huber
434b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huberprotected:
444b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    virtual ~SoftOMXComponent();
454b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
464b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    const char *name() const;
474b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
484b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    void notify(
494b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_EVENTTYPE event,
504b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_U32 data1, OMX_U32 data2, OMX_PTR data);
514b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
524b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    void notifyEmptyBufferDone(OMX_BUFFERHEADERTYPE *header);
534b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    void notifyFillBufferDone(OMX_BUFFERHEADERTYPE *header);
544b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
554b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    virtual OMX_ERRORTYPE sendCommand(
564b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_COMMANDTYPE cmd, OMX_U32 param, OMX_PTR data);
574b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
584b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    virtual OMX_ERRORTYPE getParameter(
594b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_INDEXTYPE index, OMX_PTR params);
604b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
614b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    virtual OMX_ERRORTYPE setParameter(
624b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_INDEXTYPE index, const OMX_PTR params);
634b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
644b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    virtual OMX_ERRORTYPE getConfig(
654b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_INDEXTYPE index, OMX_PTR params);
664b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
674b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    virtual OMX_ERRORTYPE setConfig(
684b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_INDEXTYPE index, const OMX_PTR params);
694b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
704b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    virtual OMX_ERRORTYPE getExtensionIndex(
714b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            const char *name, OMX_INDEXTYPE *index);
724b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
734b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    virtual OMX_ERRORTYPE useBuffer(
744b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_BUFFERHEADERTYPE **buffer,
754b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_U32 portIndex,
764b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_PTR appPrivate,
774b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_U32 size,
784b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_U8 *ptr);
794b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
804b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    virtual OMX_ERRORTYPE allocateBuffer(
814b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_BUFFERHEADERTYPE **buffer,
824b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_U32 portIndex,
834b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_PTR appPrivate,
844b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_U32 size);
854b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
864b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    virtual OMX_ERRORTYPE freeBuffer(
874b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_U32 portIndex,
884b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_BUFFERHEADERTYPE *buffer);
894b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
904b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    virtual OMX_ERRORTYPE emptyThisBuffer(
914b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_BUFFERHEADERTYPE *buffer);
924b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
934b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    virtual OMX_ERRORTYPE fillThisBuffer(
944b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_BUFFERHEADERTYPE *buffer);
954b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
964b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    virtual OMX_ERRORTYPE getState(OMX_STATETYPE *state);
974b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
984b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huberprivate:
994b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    AString mName;
1004b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    const OMX_CALLBACKTYPE *mCallbacks;
1014b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    OMX_COMPONENTTYPE *mComponent;
1024b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
1034b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    void *mLibHandle;
1044b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
1054b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    static OMX_ERRORTYPE SendCommandWrapper(
1064b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_HANDLETYPE component,
1074b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_COMMANDTYPE cmd,
1084b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_U32 param,
1094b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_PTR data);
1104b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
1114b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    static OMX_ERRORTYPE GetParameterWrapper(
1124b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_HANDLETYPE component,
1134b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_INDEXTYPE index,
1144b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_PTR params);
1154b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
1164b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    static OMX_ERRORTYPE SetParameterWrapper(
1174b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_HANDLETYPE component,
1184b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_INDEXTYPE index,
1194b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_PTR params);
1204b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
1214b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    static OMX_ERRORTYPE GetConfigWrapper(
1224b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_HANDLETYPE component,
1234b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_INDEXTYPE index,
1244b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_PTR params);
1254b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
1264b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    static OMX_ERRORTYPE SetConfigWrapper(
1274b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_HANDLETYPE component,
1284b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_INDEXTYPE index,
1294b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_PTR params);
1304b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
1314b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    static OMX_ERRORTYPE GetExtensionIndexWrapper(
1324b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_HANDLETYPE component,
1334b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_STRING name,
1344b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_INDEXTYPE *index);
1354b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
1364b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    static OMX_ERRORTYPE UseBufferWrapper(
1374b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_HANDLETYPE component,
1384b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_BUFFERHEADERTYPE **buffer,
1394b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_U32 portIndex,
1404b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_PTR appPrivate,
1414b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_U32 size,
1424b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_U8 *ptr);
1434b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
1444b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    static OMX_ERRORTYPE AllocateBufferWrapper(
1454b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_HANDLETYPE component,
1464b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_BUFFERHEADERTYPE **buffer,
1474b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_U32 portIndex,
1484b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_PTR appPrivate,
1494b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_U32 size);
1504b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
1514b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    static OMX_ERRORTYPE FreeBufferWrapper(
1524b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_HANDLETYPE component,
1534b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_U32 portIndex,
1544b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_BUFFERHEADERTYPE *buffer);
1554b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
1564b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    static OMX_ERRORTYPE EmptyThisBufferWrapper(
1574b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_HANDLETYPE component,
1584b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_BUFFERHEADERTYPE *buffer);
1594b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
1604b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    static OMX_ERRORTYPE FillThisBufferWrapper(
1614b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_HANDLETYPE component,
1624b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_BUFFERHEADERTYPE *buffer);
1634b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
1644b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    static OMX_ERRORTYPE GetStateWrapper(
1654b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_HANDLETYPE component,
1664b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber            OMX_STATETYPE *state);
1674b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
1684b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber    DISALLOW_EVIL_CONSTRUCTORS(SoftOMXComponent);
1694b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber};
1704b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
1714b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber}  // namespace android
1724b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber
1734b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber#endif  // SOFT_OMX_COMPONENT_H_
174