portbase.h revision 65f90f13a4ae2f113daf17558f01ffda1a0d05af
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 7265f90f13a4ae2f113daf17558f01ffda1a0d05afHo-Eun Ryu /* 7365f90f13a4ae2f113daf17558f01ffda1a0d05afHo-Eun Ryu * component methods & helpers 7465f90f13a4ae2f113daf17558f01ffda1a0d05afHo-Eun Ryu */ 7565f90f13a4ae2f113daf17558f01ffda1a0d05afHo-Eun Ryu OMX_STATETYPE GetOwnerState(void); 7665f90f13a4ae2f113daf17558f01ffda1a0d05afHo-Eun Ryu 7765f90f13a4ae2f113daf17558f01ffda1a0d05afHo-Eun Ryu /* end of component methods & helpers */ 7865f90f13a4ae2f113daf17558f01ffda1a0d05afHo-Eun Ryu 79974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu /* buffer headers */ 80974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu struct list *buffer_hdrs; 81974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu OMX_U32 nr_buffer_hdrs; 82974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu bool buffer_hdrs_completion; /* Use/Allocate/FreeBuffer completion flag */ 83974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu pthread_mutex_t hdrs_lock; 84974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu pthread_cond_t hdrs_wait; 85974e5777ef2f549722c11ef999d5bb52bfcf199aHo-Eun Ryu 86cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu /* parameter */ 87cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu OMX_PARAM_PORTDEFINITIONTYPE portparam; 88cf05610bceb8d988f80ec9696104a8afceb1edfdHo-Eun Ryu OMX_AUDIO_PARAM_PORTFORMATTYPE audioparam; 897b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu 907b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu /* owner handle */ 917b94bb78335b52b812d8b4137ce80799bb6b9125Ho-Eun Ryu OMX_COMPONENTTYPE *owner; 92c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu}; 93c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu 94c8c36c18719f55a4fbb3c1efbad24a3644c0d54eHo-Eun Ryu#endif /* __PORTBASE_H */ 95