portbase.h revision 7b94bb78335b52b812d8b4137ce80799bb6b9125
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    /*
287b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu     * accessor
297b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu     */
307b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu    /* owner */
317b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu    void SetOwner(OMX_COMPONENTTYPE *handle);
327b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu    OMX_COMPONENTTYPE *GetOwner(void);
337b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu
347b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu    /*
35cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu     * component methods & helpers
36cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu     */
37cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu    /* Get/SetParameter */
38cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu    void SetPortParam(
39cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu        const OMX_PARAM_PORTDEFINITIONTYPE *pComponentParameterStructure);
40a85b1f78b03f7027fe94d624ff1b54de9e7d5dadHo-Eun Ryu    const OMX_PARAM_PORTDEFINITIONTYPE *GetPortParam(void);
41cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu    /* audio parameter */
42cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu    void SetAudioPortParam(
43cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu        const OMX_AUDIO_PARAM_PORTFORMATTYPE *pComponentParameterStructure);
44a85b1f78b03f7027fe94d624ff1b54de9e7d5dadHo-Eun Ryu    const OMX_AUDIO_PARAM_PORTFORMATTYPE *GetAudioPortParam(void);
45cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu
46cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu    /* Use/Allocate/FreeBuffer */
47cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu    OMX_ERRORTYPE UseBuffer(OMX_BUFFERHEADERTYPE **ppBufferHdr,
48cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu                            OMX_U32 nPortIndex,
49cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu                            OMX_PTR pAppPrivate,
50cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu                            OMX_U32 nSizeBytes,
51cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu                            OMX_U8 *pBuffer);
52cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu    OMX_ERRORTYPE AllocateBuffer(OMX_BUFFERHEADERTYPE **ppBuffer,
53cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu                                 OMX_U32 nPortIndex,
54cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu                                 OMX_PTR pAppPrivate,
55cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu                                 OMX_U32 nSizeBytes);
56cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu    OMX_ERRORTYPE FreeBuffer(OMX_U32 nPortIndex,
57cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu                             OMX_BUFFERHEADERTYPE *pBuffer);
58cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu
596fc911638847488e09f42bdd125fbb79fc754cbdHo-Eun Ryu    /*
606fc911638847488e09f42bdd125fbb79fc754cbdHo-Eun Ryu     * called in ComponentBase::TransStateToLoaded(OMX_StateIdle) or
616fc911638847488e09f42bdd125fbb79fc754cbdHo-Eun Ryu     * in ComponentBase::TransStateToIdle(OMX_StateLoaded)
626fc911638847488e09f42bdd125fbb79fc754cbdHo-Eun Ryu     * wokeup by Use/Allocate/FreeBuffer
636fc911638847488e09f42bdd125fbb79fc754cbdHo-Eun Ryu     */
646fc911638847488e09f42bdd125fbb79fc754cbdHo-Eun Ryu    void WaitPortBufferCompletion(void);
656fc911638847488e09f42bdd125fbb79fc754cbdHo-Eun Ryu
66cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu    /* end of component methods & helpers */
67cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu
68c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryuprivate:
69c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu    /* common routines for constructor */
70c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu    void __PortBase(void);
71cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu
72974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu    /* buffer headers */
73974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu    struct list *buffer_hdrs;
74974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu    OMX_U32 nr_buffer_hdrs;
75974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu    bool buffer_hdrs_completion; /* Use/Allocate/FreeBuffer completion flag */
76974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu    pthread_mutex_t hdrs_lock;
77974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu    pthread_cond_t hdrs_wait;
78974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu
79cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu    /* parameter */
80cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu    OMX_PARAM_PORTDEFINITIONTYPE portparam;
81cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu    OMX_AUDIO_PARAM_PORTFORMATTYPE audioparam;
827b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu
837b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu    /* owner handle */
847b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu    OMX_COMPONENTTYPE *owner;
85c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu};
86c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu
87c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu#endif /* __PORTBASE_H */
88