HI Ravi According to Omx call sequence doc for OMX Transition Loaded->Idle State:
The buffer allocation is handled as part of the allocation to the Idle state. During this transition, PV Framework: ● Issues command to the OMX component to change state from OMX_StateLoaded to OMX_StateIdle via “OMX_SendCommand” call ● Issues a series of either “OMX_UseBuffer” calls or “OMX_AllocateBuffer” calls to the OMX component. The call is used NumInputBuffer times for input port, and NumOutputBuffers for the output port. ● Waits for the EventHandler callback to arrive from the component which notifies the framework that the component state transition is complete (OMX_EventCmdComplete). Since buffer allocation takes time,component has to wait for buffer to be allocated so that it can go to Idle state. What mechanism they are using to make component wait for buffers. Are they using locking mechanism?. Please give me some inputs? Regards Gururaja B O On Dec 30, 9:26 am, guru <[email protected]> wrote: > Hi All, > > I have integrated decoder component with OpenCore. If i try to play > audio file it is failing. when I saw the log it is failing when it > tries to change its state to Idle. > > My understanding is : > > Before it can change to idle state it has to allocate buffers to input > and output ports. then it should call event handler about the state > change. > > But according to the log, before allocating the buffers it is trying > to check for buffers(whether allocated) then fails. after failure, > buffers are allocated. > > It should be: > > Buffer allocation > state transition to idle > > but in my case > > State transition to idle > Buffer allocation. is happening > > What may be the reason? > Since state change is occuring in Component Thread and buffer > allocation in main thread, so is there any timing issue? > > E/PV ( 878): PVLOG:TID > (0x5b950):Time=1150:PVMFOMXAudioDecNode::DoPrepare() > : Changing Component state Loaded -> Idle > E/ ( 878): ....Calling OMX_SendCommand > E/ ( 878): OMX_AACLC_COMP.c MySendCommand IN > E/ ( 878): .... State transition command start --> component > thread > E/ ( 878): .... case OMX_StateIdle > E/ ( 878): ........Inside StateIdle While Loop > E/ ( 878): ........Inside StateIdle While Loop > E/ ( 878): ........Inside StateIdle While Loop > E/ ( 878): ........Inside StateIdle While Loop > E/ ( 878): ........Inside StateIdle While Loop > E/ ( 878): ........Inside StateIdle While Loop > E/ ( 878): ........Inside StateIdle While Loop > E/ ( 878): ........Inside StateIdle While Loop > E/ ( 878): ........Inside StateIdle While Loop > E/ ( 878): ........Inside StateIdle While Loop > E/ ( 878): .... Calling Event Handler8 > E/ ( 878): CallbackEventHandler Multithread IN > E/ ( 878): CallbackEventHandler Multithread OUT > E/ ( 878): Idle transition failed > E/ ( 878): .... State transition command end --> component > thread ends > E/ ( 878): OMX_AACLC_COMP.c MySendCommand OUT > E/ ( 878): ....Exiting in OMX_SenCommand > E/PV ( 878): PVLOG:TID > (0x5b950):Time=1152:PVMFOMXAudioDecNode::CreateInput > MemPool() start > E/PV ( 878): PVLOG:TID > (0x5b950):Time=1152:PVMFOMXAudioDecNode::CreateInput > MemPool() allocating buffer header pointers and shared media data > ptrs > E/PV ( 878): PVLOG:TID > (0x5b950):Time=1152:PVMFOMXAudioDecNode::CreateInput > MemPool() done > E/PV ( 878): PVLOG:TID > (0x5b950):Time=1152:PVMFOMXAudioDecNode::ProvideBuff > ersToComponent() enter > E/ ( 878): OMX_AACLC_COMP.c MyAllocateBuffer IN > E/ ( 878): OMX_AACLC_COMP.c MyAllocateBuffer OUT > E/PV ( 878): PVLOG:TID > (0x5b950):Time=1153:PVMFOMXAudioDecNode::ProvideBuff > ersToComponent() done > E/PV ( 878): PVLOG:TID > (0x5b950):Time=1153:PVMFOMXAudioDecNode::CreateOutMe > mPool() start > E/PV ( 878): PVLOG:TID > (0x5b950):Time=1153:PVMFOMXAudioDecNode::CreateOutMe > mPool() Allocating output buffer header pointers > E/PV ( 878): PVLOG:TID > (0x5b950):Time=1153:PVMFOMXAudioDecNode::CreateOutMe > mPool() done > E/PV ( 878): PVLOG:TID > (0x5b950):Time=1154:PVMFOMXAudioDecNode::ProvideBuff > ersToComponent() enter > E/ ( 878): OMX_AACLC_COMP.c MyAllocateBuffer IN > E/ ( 878): OMX_AACLC_COMP.c MyAllocateBuffer OUT > E/PV ( 878): PVLOG:TID > (0x5b950):Time=1154:PVMFOMXAudioDecNode::ProvideBuff > ersToComponent() done > E/PV ( 878): PVLOG:TID > (0x5b950):Time=1154:EventHandlerThreadSafeCallbackAO > ::Run() In > E/PV ( 878): PVLOG:TID > (0x5b950):Time=1154:EventHandlerThreadSafeCallbackAO > ::Run() - No more events, call PendForExec() > E/PV ( 878): PVLOG:TID > (0x5b950):Time=1155:EventHandlerThreadSafeCallbackAO > _Audio::Run() - Calling Process Event > E/PV ( 878): PVLOG:TID > (0x5b950):Time=1155:PVMFOMXAudioDecNode::EventHandle > rProcessing: Event Generated - 1 > E/PV ( 878): PVLOG:TID > (0x5b950):Time=1155:PVMFOMXAudioDecNode::EventHandle > rProcessing: OMX_EventError > > Thanks > Gururaja -- unsubscribe: [email protected] website: http://groups.google.com/group/android-porting
