portbase.h revision 5e6d63b7252c7bc59567ea764b1b30b76554dcd4
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> 147951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu#include <queue.h> 15974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu 16c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryuclass PortBase 17c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu{ 18c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryupublic: 19c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu /* 20c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu * constructor & destructor 21c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu */ 22c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu PortBase(); 23c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu PortBase(const OMX_PARAM_PORTDEFINITIONTYPE *param); 24c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu virtual ~PortBase(); 25c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu 26c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu /* end of constructor & destructor */ 27c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu 28cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu /* 297b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu * accessor 307b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu */ 317b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu /* owner */ 327b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu void SetOwner(OMX_COMPONENTTYPE *handle); 337b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu OMX_COMPONENTTYPE *GetOwner(void); 347b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu 3519b0e5f37c63579e9ad52b2538cddb90d601775aHo-Eun Ryu /* for ReturnThisBuffer() */ 3619b0e5f37c63579e9ad52b2538cddb90d601775aHo-Eun Ryu OMX_ERRORTYPE SetCallbacks(OMX_HANDLETYPE hComponent, 3719b0e5f37c63579e9ad52b2538cddb90d601775aHo-Eun Ryu OMX_CALLBACKTYPE *pCallbacks, 3819b0e5f37c63579e9ad52b2538cddb90d601775aHo-Eun Ryu OMX_PTR pAppData); 3919b0e5f37c63579e9ad52b2538cddb90d601775aHo-Eun Ryu /* end of accessor */ 4019b0e5f37c63579e9ad52b2538cddb90d601775aHo-Eun Ryu 417b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu /* 42cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu * component methods & helpers 43cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu */ 44cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu /* Get/SetParameter */ 458b0c69f6315328521b722a6ceb19f354e867124aHo-Eun Ryu OMX_ERRORTYPE SetPortDefinition(const OMX_PARAM_PORTDEFINITIONTYPE *p, 468b0c69f6315328521b722a6ceb19f354e867124aHo-Eun Ryu bool isclient); 478b0c69f6315328521b722a6ceb19f354e867124aHo-Eun Ryu const OMX_PARAM_PORTDEFINITIONTYPE *GetPortDefinition(void); 48cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu void SetPortParam( 49cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu const OMX_PARAM_PORTDEFINITIONTYPE *pComponentParameterStructure); 50a85b1f78b03f7027fe94d624ff1b54de9e7d5dadHo-Eun Ryu const OMX_PARAM_PORTDEFINITIONTYPE *GetPortParam(void); 51cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu /* audio parameter */ 52cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu void SetAudioPortParam( 53cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu const OMX_AUDIO_PARAM_PORTFORMATTYPE *pComponentParameterStructure); 54a85b1f78b03f7027fe94d624ff1b54de9e7d5dadHo-Eun Ryu const OMX_AUDIO_PARAM_PORTFORMATTYPE *GetAudioPortParam(void); 55cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu 56cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu /* Use/Allocate/FreeBuffer */ 57cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu OMX_ERRORTYPE UseBuffer(OMX_BUFFERHEADERTYPE **ppBufferHdr, 58cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu OMX_U32 nPortIndex, 59cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu OMX_PTR pAppPrivate, 60cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu OMX_U32 nSizeBytes, 61cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu OMX_U8 *pBuffer); 62cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu OMX_ERRORTYPE AllocateBuffer(OMX_BUFFERHEADERTYPE **ppBuffer, 63cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu OMX_U32 nPortIndex, 64cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu OMX_PTR pAppPrivate, 65cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu OMX_U32 nSizeBytes); 66cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu OMX_ERRORTYPE FreeBuffer(OMX_U32 nPortIndex, 67cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu OMX_BUFFERHEADERTYPE *pBuffer); 68cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu 696fc911638847488e09f42bdd125fbb79fc754cbdHo-Eun Ryu /* 706fc911638847488e09f42bdd125fbb79fc754cbdHo-Eun Ryu * called in ComponentBase::TransStateToLoaded(OMX_StateIdle) or 716fc911638847488e09f42bdd125fbb79fc754cbdHo-Eun Ryu * in ComponentBase::TransStateToIdle(OMX_StateLoaded) 726fc911638847488e09f42bdd125fbb79fc754cbdHo-Eun Ryu * wokeup by Use/Allocate/FreeBuffer 736fc911638847488e09f42bdd125fbb79fc754cbdHo-Eun Ryu */ 746fc911638847488e09f42bdd125fbb79fc754cbdHo-Eun Ryu void WaitPortBufferCompletion(void); 756fc911638847488e09f42bdd125fbb79fc754cbdHo-Eun Ryu 767951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu /* Empty/FillThisBuffer */ 777951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu OMX_ERRORTYPE PushThisBuffer(OMX_BUFFERHEADERTYPE *pBuffer); 787951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu OMX_BUFFERHEADERTYPE *PopBuffer(void); 797951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu OMX_U32 BufferQueueLength(void); 807951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu 81fa693d49884f9188809c3a185ecd4cd38a878cb7Ho-Eun Ryu /* Empty/FillBufferDone */ 827951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu OMX_ERRORTYPE ReturnThisBuffer(OMX_BUFFERHEADERTYPE *pBuffer); 837951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu 84fa693d49884f9188809c3a185ecd4cd38a878cb7Ho-Eun Ryu /* flush all buffers not under processing */ 85fa693d49884f9188809c3a185ecd4cd38a878cb7Ho-Eun Ryu OMX_ERRORTYPE FlushPort(void); 86fa693d49884f9188809c3a185ecd4cd38a878cb7Ho-Eun Ryu 87b2b1b8e0c1425cde2025791cfb74d9053170845cHo-Eun Ryu bool IsEnabled(void); 88b2b1b8e0c1425cde2025791cfb74d9053170845cHo-Eun Ryu 894f4d5a8c4138b7ebfa624eaad8dea29332ed97a0Ho-Eun Ryu OMX_DIRTYPE GetPortDirection(void); 904f4d5a8c4138b7ebfa624eaad8dea29332ed97a0Ho-Eun Ryu 915e6d63b7252c7bc59567ea764b1b30b76554dcd4Ho-Eun Ryu OMX_ERRORTYPE PushMark(OMX_MARKTYPE *mark); 925e6d63b7252c7bc59567ea764b1b30b76554dcd4Ho-Eun Ryu 93cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu /* end of component methods & helpers */ 94cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu 95c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryuprivate: 96c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu /* common routines for constructor */ 97c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu void __PortBase(void); 98cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu 9965f90f13a4ae2f113daf17558f01ffda1a0d05afHo-Eun Ryu /* 10065f90f13a4ae2f113daf17558f01ffda1a0d05afHo-Eun Ryu * component methods & helpers 10165f90f13a4ae2f113daf17558f01ffda1a0d05afHo-Eun Ryu */ 10265f90f13a4ae2f113daf17558f01ffda1a0d05afHo-Eun Ryu OMX_STATETYPE GetOwnerState(void); 10365f90f13a4ae2f113daf17558f01ffda1a0d05afHo-Eun Ryu 1045e6d63b7252c7bc59567ea764b1b30b76554dcd4Ho-Eun Ryu OMX_MARKTYPE *PopMark(void); 1055e6d63b7252c7bc59567ea764b1b30b76554dcd4Ho-Eun Ryu 10665f90f13a4ae2f113daf17558f01ffda1a0d05afHo-Eun Ryu /* end of component methods & helpers */ 10765f90f13a4ae2f113daf17558f01ffda1a0d05afHo-Eun Ryu 108974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu /* buffer headers */ 109974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu struct list *buffer_hdrs; 110974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu OMX_U32 nr_buffer_hdrs; 111974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu bool buffer_hdrs_completion; /* Use/Allocate/FreeBuffer completion flag */ 112974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu pthread_mutex_t hdrs_lock; 113974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu pthread_cond_t hdrs_wait; 114974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu 1157951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu struct queue bufferq; 1167951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu pthread_mutex_t bufferq_lock; 1177951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu 1185e6d63b7252c7bc59567ea764b1b30b76554dcd4Ho-Eun Ryu struct queue markq; 1195e6d63b7252c7bc59567ea764b1b30b76554dcd4Ho-Eun Ryu pthread_mutex_t markq_lock; 1205e6d63b7252c7bc59567ea764b1b30b76554dcd4Ho-Eun Ryu 121cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu /* parameter */ 1228b0c69f6315328521b722a6ceb19f354e867124aHo-Eun Ryu OMX_PARAM_PORTDEFINITIONTYPE *portdefinition; 123cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu OMX_PARAM_PORTDEFINITIONTYPE portparam; 124cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu OMX_AUDIO_PARAM_PORTFORMATTYPE audioparam; 1257b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu 1267b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu /* owner handle */ 1277b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu OMX_COMPONENTTYPE *owner; 12819b0e5f37c63579e9ad52b2538cddb90d601775aHo-Eun Ryu 12919b0e5f37c63579e9ad52b2538cddb90d601775aHo-Eun Ryu /* omx standard callbacks */ 13019b0e5f37c63579e9ad52b2538cddb90d601775aHo-Eun Ryu OMX_PTR appdata; 13119b0e5f37c63579e9ad52b2538cddb90d601775aHo-Eun Ryu OMX_CALLBACKTYPE *callbacks; 132c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu}; 133c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu 134c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu#endif /* __PORTBASE_H */ 135