portbase.h revision 1e23923a42d574088787d8bed30df25f032e3ffb
1c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu/* 230bd6062e4b295f5f7bcaeb98165065310d29269Ho-Eun Ryu * Copyright (c) 2009 Wind River Systems, Inc. 330bd6062e4b295f5f7bcaeb98165065310d29269Ho-Eun Ryu * 430bd6062e4b295f5f7bcaeb98165065310d29269Ho-Eun Ryu * The right to copy, distribute, modify, or otherwise make use 530bd6062e4b295f5f7bcaeb98165065310d29269Ho-Eun Ryu * of this software may be licensed only pursuant to the terms 630bd6062e4b295f5f7bcaeb98165065310d29269Ho-Eun Ryu * of an applicable Wind River license agreement. 7c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu */ 8c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu 9c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu#ifndef __PORTBASE_H 10c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu#define __PORTBASE_H 11c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu 12974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu#include <pthread.h> 13974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu 14c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu#include <OMX_Core.h> 15c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu#include <OMX_Component.h> 16c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu 17974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu#include <list.h> 187951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu#include <queue.h> 19974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu 20c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryuclass PortBase 21c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu{ 22c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryupublic: 23c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu /* 24c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu * constructor & destructor 25c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu */ 26c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu PortBase(); 2776e479a9ee63cff7cf200aceb2f52296fe63c588Ho-Eun Ryu PortBase(const OMX_PARAM_PORTDEFINITIONTYPE *portdefinition); 28c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu virtual ~PortBase(); 29c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu 30c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu /* end of constructor & destructor */ 31c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu 32cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu /* 337b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu * accessor 347b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu */ 357b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu /* owner */ 367b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu void SetOwner(OMX_COMPONENTTYPE *handle); 377b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu OMX_COMPONENTTYPE *GetOwner(void); 387b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu 3919b0e5f37c63579e9ad52b2538cddb90d601775aHo-Eun Ryu /* for ReturnThisBuffer() */ 4019b0e5f37c63579e9ad52b2538cddb90d601775aHo-Eun Ryu OMX_ERRORTYPE SetCallbacks(OMX_HANDLETYPE hComponent, 4119b0e5f37c63579e9ad52b2538cddb90d601775aHo-Eun Ryu OMX_CALLBACKTYPE *pCallbacks, 4219b0e5f37c63579e9ad52b2538cddb90d601775aHo-Eun Ryu OMX_PTR pAppData); 4319b0e5f37c63579e9ad52b2538cddb90d601775aHo-Eun Ryu /* end of accessor */ 4419b0e5f37c63579e9ad52b2538cddb90d601775aHo-Eun Ryu 457b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu /* 46cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu * component methods & helpers 47cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu */ 48cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu /* Get/SetParameter */ 498b0c69f6315328521b722a6ceb19f354e867124aHo-Eun Ryu OMX_ERRORTYPE SetPortDefinition(const OMX_PARAM_PORTDEFINITIONTYPE *p, 503759c620f3e8325d1fdd741caad7c397e797ad2cHo-Eun Ryu bool overwrite_readonly); 518b0c69f6315328521b722a6ceb19f354e867124aHo-Eun Ryu const OMX_PARAM_PORTDEFINITIONTYPE *GetPortDefinition(void); 52cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu 53cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu /* Use/Allocate/FreeBuffer */ 54cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu OMX_ERRORTYPE UseBuffer(OMX_BUFFERHEADERTYPE **ppBufferHdr, 55cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu OMX_U32 nPortIndex, 56cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu OMX_PTR pAppPrivate, 57cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu OMX_U32 nSizeBytes, 58cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu OMX_U8 *pBuffer); 59cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu OMX_ERRORTYPE AllocateBuffer(OMX_BUFFERHEADERTYPE **ppBuffer, 60cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu OMX_U32 nPortIndex, 61cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu OMX_PTR pAppPrivate, 62cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu OMX_U32 nSizeBytes); 63cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu OMX_ERRORTYPE FreeBuffer(OMX_U32 nPortIndex, 64cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu OMX_BUFFERHEADERTYPE *pBuffer); 65cf575e55ba6597c77cf2413245e3f626f75b5005Ho-Eun Ryu 666fc911638847488e09f42bdd125fbb79fc754cbdHo-Eun Ryu /* 676fc911638847488e09f42bdd125fbb79fc754cbdHo-Eun Ryu * called in ComponentBase::TransStateToLoaded(OMX_StateIdle) or 686fc911638847488e09f42bdd125fbb79fc754cbdHo-Eun Ryu * in ComponentBase::TransStateToIdle(OMX_StateLoaded) 696fc911638847488e09f42bdd125fbb79fc754cbdHo-Eun Ryu * wokeup by Use/Allocate/FreeBuffer 706fc911638847488e09f42bdd125fbb79fc754cbdHo-Eun Ryu */ 716fc911638847488e09f42bdd125fbb79fc754cbdHo-Eun Ryu void WaitPortBufferCompletion(void); 726fc911638847488e09f42bdd125fbb79fc754cbdHo-Eun Ryu 737951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu /* Empty/FillThisBuffer */ 747951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu OMX_ERRORTYPE PushThisBuffer(OMX_BUFFERHEADERTYPE *pBuffer); 757951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu OMX_BUFFERHEADERTYPE *PopBuffer(void); 767951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu OMX_U32 BufferQueueLength(void); 777951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu 78fa693d49884f9188809c3a185ecd4cd38a878cb7Ho-Eun Ryu /* Empty/FillBufferDone */ 797951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu OMX_ERRORTYPE ReturnThisBuffer(OMX_BUFFERHEADERTYPE *pBuffer); 807951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu 811e23923a42d574088787d8bed30df25f032e3ffbHo-Eun Ryu /* retain buffer */ 821e23923a42d574088787d8bed30df25f032e3ffbHo-Eun Ryu OMX_ERRORTYPE RetainThisBuffer(OMX_BUFFERHEADERTYPE *pBuffer, 831e23923a42d574088787d8bed30df25f032e3ffbHo-Eun Ryu bool accumulate); 841e23923a42d574088787d8bed30df25f032e3ffbHo-Eun Ryu /* 851e23923a42d574088787d8bed30df25f032e3ffbHo-Eun Ryu * components have responsibilty of calling this function to return all 861e23923a42d574088787d8bed30df25f032e3ffbHo-Eun Ryu * accumulated buffers to omx-il clients. 871e23923a42d574088787d8bed30df25f032e3ffbHo-Eun Ryu */ 881e23923a42d574088787d8bed30df25f032e3ffbHo-Eun Ryu void ReturnAllRetainedBuffers(void); 891e23923a42d574088787d8bed30df25f032e3ffbHo-Eun Ryu 90fa693d49884f9188809c3a185ecd4cd38a878cb7Ho-Eun Ryu /* flush all buffers not under processing */ 91fa693d49884f9188809c3a185ecd4cd38a878cb7Ho-Eun Ryu OMX_ERRORTYPE FlushPort(void); 92fa693d49884f9188809c3a185ecd4cd38a878cb7Ho-Eun Ryu 93b2b1b8e0c1425cde2025791cfb74d9053170845cHo-Eun Ryu bool IsEnabled(void); 94b2b1b8e0c1425cde2025791cfb74d9053170845cHo-Eun Ryu 954f4d5a8c4138b7ebfa624eaad8dea29332ed97a0Ho-Eun Ryu OMX_DIRTYPE GetPortDirection(void); 964f4d5a8c4138b7ebfa624eaad8dea29332ed97a0Ho-Eun Ryu 975e6d63b7252c7bc59567ea764b1b30b76554dcd4Ho-Eun Ryu OMX_ERRORTYPE PushMark(OMX_MARKTYPE *mark); 985170f7519e52abd32252552df72fa16b12651a39Ho-Eun Ryu OMX_MARKTYPE *PopMark(void); 995e6d63b7252c7bc59567ea764b1b30b76554dcd4Ho-Eun Ryu 100df459a0924eb9309157e4bffa9fe26d0513b800bHo-Eun Ryu /* SendCommand(OMX_CommandPortDisable/Enable) */ 101df459a0924eb9309157e4bffa9fe26d0513b800bHo-Eun Ryu OMX_ERRORTYPE TransState(OMX_U8 state); 102df459a0924eb9309157e4bffa9fe26d0513b800bHo-Eun Ryu 103cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu /* end of component methods & helpers */ 104cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu 105df459a0924eb9309157e4bffa9fe26d0513b800bHo-Eun Ryu /* TransState, state */ 1066eef19eccd390d878724188ac5b62f4656a97110Ho-Eun Ryu static const OMX_U8 OMX_PortDisabled = 0; 1076eef19eccd390d878724188ac5b62f4656a97110Ho-Eun Ryu static const OMX_U8 OMX_PortEnabled = 1; 108df459a0924eb9309157e4bffa9fe26d0513b800bHo-Eun Ryu 109c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryuprivate: 110c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu /* common routines for constructor */ 111c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu void __PortBase(void); 112cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu 11365f90f13a4ae2f113daf17558f01ffda1a0d05afHo-Eun Ryu /* 11465f90f13a4ae2f113daf17558f01ffda1a0d05afHo-Eun Ryu * component methods & helpers 11565f90f13a4ae2f113daf17558f01ffda1a0d05afHo-Eun Ryu */ 11665f90f13a4ae2f113daf17558f01ffda1a0d05afHo-Eun Ryu OMX_STATETYPE GetOwnerState(void); 11765f90f13a4ae2f113daf17558f01ffda1a0d05afHo-Eun Ryu 11865f90f13a4ae2f113daf17558f01ffda1a0d05afHo-Eun Ryu /* end of component methods & helpers */ 11965f90f13a4ae2f113daf17558f01ffda1a0d05afHo-Eun Ryu 120974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu /* buffer headers */ 121974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu struct list *buffer_hdrs; 122974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu OMX_U32 nr_buffer_hdrs; 123974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu bool buffer_hdrs_completion; /* Use/Allocate/FreeBuffer completion flag */ 124974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu pthread_mutex_t hdrs_lock; 125974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu pthread_cond_t hdrs_wait; 126974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu 1277951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu struct queue bufferq; 1287951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu pthread_mutex_t bufferq_lock; 1297951efc74d2bac005b683460c159f34403a355b1Ho-Eun Ryu 1301e23923a42d574088787d8bed30df25f032e3ffbHo-Eun Ryu /* retained buffers (only accumulated buffer) */ 1311e23923a42d574088787d8bed30df25f032e3ffbHo-Eun Ryu struct queue retainedbufferq; 1321e23923a42d574088787d8bed30df25f032e3ffbHo-Eun Ryu pthread_mutex_t retainedbufferq_lock; 1331e23923a42d574088787d8bed30df25f032e3ffbHo-Eun Ryu 1345e6d63b7252c7bc59567ea764b1b30b76554dcd4Ho-Eun Ryu struct queue markq; 1355e6d63b7252c7bc59567ea764b1b30b76554dcd4Ho-Eun Ryu pthread_mutex_t markq_lock; 1365e6d63b7252c7bc59567ea764b1b30b76554dcd4Ho-Eun Ryu 137df459a0924eb9309157e4bffa9fe26d0513b800bHo-Eun Ryu /* state */ 138df459a0924eb9309157e4bffa9fe26d0513b800bHo-Eun Ryu OMX_U8 state; 139df459a0924eb9309157e4bffa9fe26d0513b800bHo-Eun Ryu pthread_mutex_t state_lock; 140df459a0924eb9309157e4bffa9fe26d0513b800bHo-Eun Ryu 141cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu /* parameter */ 1426c7f4263fbe4a642fb0a5c21b9e98c5c59c05468Ho-Eun Ryu OMX_PARAM_PORTDEFINITIONTYPE portdefinition; 1436c7f4263fbe4a642fb0a5c21b9e98c5c59c05468Ho-Eun Ryu /* room for portdefinition.format.*.cMIMEType */ 1446c7f4263fbe4a642fb0a5c21b9e98c5c59c05468Ho-Eun Ryu char definition_format_mimetype[OMX_MAX_STRINGNAME_SIZE]; 1456c7f4263fbe4a642fb0a5c21b9e98c5c59c05468Ho-Eun Ryu 146cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu OMX_AUDIO_PARAM_PORTFORMATTYPE audioparam; 1477b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu 1487b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu /* owner handle */ 1497b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu OMX_COMPONENTTYPE *owner; 15019b0e5f37c63579e9ad52b2538cddb90d601775aHo-Eun Ryu 15119b0e5f37c63579e9ad52b2538cddb90d601775aHo-Eun Ryu /* omx standard callbacks */ 15219b0e5f37c63579e9ad52b2538cddb90d601775aHo-Eun Ryu OMX_PTR appdata; 15319b0e5f37c63579e9ad52b2538cddb90d601775aHo-Eun Ryu OMX_CALLBACKTYPE *callbacks; 154c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu}; 155c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu 156904a08909b5c3870414fde9faec0d74d0edd536cHo-Eun Ryu/* end of PortBase */ 157904a08909b5c3870414fde9faec0d74d0edd536cHo-Eun Ryu 158c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu#endif /* __PORTBASE_H */ 159