portbase.h revision 974e5777ef2f549722c11ef999d5bb52bfcf199a
1c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu/*
2c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu * Copyright (C) 2009 Wind River Systems.
3c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu */
4c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu
5c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu#ifndef __PORTBASE_H
6c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu#define __PORTBASE_H
7c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu
8974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu#include <pthread.h>
9974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu
10c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu#include <OMX_Core.h>
11c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu#include <OMX_Component.h>
12c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu
13974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu#include <list.h>
14974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu
15c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryuclass PortBase
16c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu{
17c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryupublic:
18c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu    /*
19c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu     * constructor & destructor
20c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu     */
21c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu    PortBase();
22c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu    PortBase(const OMX_PARAM_PORTDEFINITIONTYPE *param);
23c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu    virtual ~PortBase();
24c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu
25c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu    /* end of constructor & destructor */
26c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu
27cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu    /*
28cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu     * component methods & helpers
29cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu     */
30cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu    /* Get/SetParameter */
31cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu    void SetPortParam(
32cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu        const OMX_PARAM_PORTDEFINITIONTYPE *pComponentParameterStructure);
33a85b1f78b03f7027fe94d624ff1b54de9e7d5dadHo-Eun Ryu    const OMX_PARAM_PORTDEFINITIONTYPE *GetPortParam(void);
34cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu    /* audio parameter */
35cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu    void SetAudioPortParam(
36cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu        const OMX_AUDIO_PARAM_PORTFORMATTYPE *pComponentParameterStructure);
37a85b1f78b03f7027fe94d624ff1b54de9e7d5dadHo-Eun Ryu    const OMX_AUDIO_PARAM_PORTFORMATTYPE *GetAudioPortParam(void);
38cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu
39cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu    /* Use/Allocate/FreeBuffer */
40cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu    OMX_ERRORTYPE UseBuffer(OMX_BUFFERHEADERTYPE **ppBufferHdr,
41cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu                            OMX_U32 nPortIndex,
42cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu                            OMX_PTR pAppPrivate,
43cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu                            OMX_U32 nSizeBytes,
44cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu                            OMX_U8 *pBuffer);
45cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu    OMX_ERRORTYPE AllocateBuffer(OMX_BUFFERHEADERTYPE **ppBuffer,
46cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu                                 OMX_U32 nPortIndex,
47cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu                                 OMX_PTR pAppPrivate,
48cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu                                 OMX_U32 nSizeBytes);
49cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu    OMX_ERRORTYPE FreeBuffer(OMX_U32 nPortIndex,
50cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu                             OMX_BUFFERHEADERTYPE *pBuffer);
51cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu
52cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu    /* end of component methods & helpers */
53cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu
54c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryuprivate:
55c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu    /* common routines for constructor */
56c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu    void __PortBase(void);
57cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu
58974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu    /* buffer headers */
59974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu    struct list *buffer_hdrs;
60974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu    OMX_U32 nr_buffer_hdrs;
61974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu    bool buffer_hdrs_completion; /* Use/Allocate/FreeBuffer completion flag */
62974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu    pthread_mutex_t hdrs_lock;
63974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu    pthread_cond_t hdrs_wait;
64974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu
65cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu    /* parameter */
66cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu    OMX_PARAM_PORTDEFINITIONTYPE portparam;
67cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu    OMX_AUDIO_PARAM_PORTFORMATTYPE audioparam;
68c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu};
69c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu
70c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu#endif /* __PORTBASE_H */
71