OMX_EVENTTYPE event, OMX_U32 data1,
OMX_U32 data2, OMX_PTR eventData)
{
+ fprintf(stderr, "%s[%d]\n", __func__, __LINE__);
switch(event) {
case OMX_EventCmdComplete:
switch (data1) {
case OMX_CommandStateSet:
+ fprintf(stderr, "%s[%d]:OMX_CommandStateSet\n", __func__, __LINE__);
OMXWakeUp((OMX_STATETYPE) data2);
break;
case OMX_CommandFlush:
+ fprintf(stderr, "%s[%d]:OMX_CommandFlush\n", __func__, __LINE__);
break;
case OMX_CommandPortDisable:
+ fprintf(stderr, "%s[%d]:OMX_CommandPortDisable\n", __func__, __LINE__);
if (data2 == 130) phello_video2->input_port_def.bEnabled = OMX_FALSE;
if (data2 == 131) phello_video2->output_port_def.bEnabled = OMX_FALSE;
break;
case OMX_CommandPortEnable:
+ fprintf(stderr, "%s[%d]:OMX_CommandPortEnable\n", __func__, __LINE__);
if (data2 == 130) phello_video2->input_port_def.bEnabled = OMX_TRUE;
if (data2 == 131) phello_video2->output_port_def.bEnabled = OMX_TRUE;
break;
OMXWakeupPortSettingsChanged();
break;
case OMX_EventBufferFlag:
+ fprintf(stderr, "%s[%d]OMX_EventBufferFlag\n", __func__, __LINE__);
+ break;
case OMX_EventResourcesAcquired:
+ fprintf(stderr, "%s[%d]OMX_EventResourcesAcquired\n", __func__, __LINE__);
+ break;
case OMX_EventDynamicResourcesAvailable:
+ fprintf(stderr, "%s[%d]OMX_EventDynamicResourcesAvailable\n", __func__, __LINE__);
+ break;
case OMX_EventMark:
+ fprintf(stderr, "%s[%d]OMX_EventDynamicResourcesAvailable\n", __func__, __LINE__);
break;
default:
break;
}
return OMX_ErrorNone;
-};
+}
/******************************************************************************/
OMX_ERRORTYPE bufferFilled(OMX_HANDLETYPE hComp, OMX_PTR pAppD, OMX_BUFFERHEADERTYPE *buffer)
{
- phello_video2->output_buffer_usage |= *((unsigned int *)buffer->pAppPrivate);
-// fprintf(stderr, "******** callback:bufferFilled, buffer->nFilledLen=%d\n", buffer->nFilledLen);
+ fprintf(stderr, "phello_video2->output_buffer_usage:0x%08x,pAppPrivate:0x%08x,nFilledLenL:%d\n", phello_video2->output_buffer_usage, *((unsigned int *)buffer->pAppPrivate), buffer->nFilledLen);
+ OMXWakeUpFilled();
OMXWakeUpFilled();
output_port_def.nBufferCountActual = 16;
ErrorCode = OMX_SetParameter(component, OMX_IndexParamPortDefinition, &output_port_def);
if (ErrorCode != OMX_ErrorNone) {
- fprintf(stderr, "%s[%d]%s\n", __func__, __LINE__, OMX_strerror(ErrorCode));
+ fprintf(stderr, "Err: %s[%d]%s\n", __func__, __LINE__, OMX_strerror(ErrorCode));
+ exit(0);
}
return ErrorCode;
{
ErrorCode = OMX_ErrorNone;
unsigned int *pPrivateData;
+ OMX_U8 *buf;
+ buf = NULL;
for (unsigned int i = 0; i < num; i++) {
pPrivateData = &output_buffer_number[i];
*pPrivateData = (1 << i);
output_buffer_usage |= *pPrivateData;
+
#if 0 // Use OMX_AllocateBuffer()
ErrorCode = OMX_AllocateBuffer(component, &output_buffer_header[i], output_port_def.nPortIndex, pPrivateData, output_port_def.nBufferSize);
#else // Use OMX_UseBuffer()
- OMX_U8 *tmp;
- tmp = (OMX_U8*)malloc(output_port_def.nBufferSize);
- if (tmp == NULL) {
+ buf = (OMX_U8*)malloc(output_port_def.nBufferSize);
+ if (buf == NULL) {
fprintf(stderr, "Failed to alloc output buffer %u. %s\n", i, OMX_strerror(ErrorCode));
exit(0);
}
- ErrorCode = OMX_UseBuffer(component, &output_buffer_header[i], output_port_def.nPortIndex, pPrivateData, output_port_def.nBufferSize, tmp);
+ ErrorCode = OMX_UseBuffer(component, &output_buffer_header[i], output_port_def.nPortIndex, pPrivateData, output_port_def.nBufferSize, buf);
#endif
if (ErrorCode == OMX_ErrorNone) {
- fprintf(stderr, "Okay:prepare_output_buffers:Output buffer %u allocated,%d.\n", i + 1, output_port_def.nBufferSize);
+ fprintf(stderr, "Okay:prepare_output_buffers: Port %d: Output buffer %d: allocated %d:buff %p:output_buffer_usage 0x%x\n", output_port_def.nPortIndex, i + 1, output_port_def.nBufferSize, buf, output_buffer_usage);
}
else {
fprintf(stderr, "Err:prepare_output_buffers:%d. %s\n", i, OMX_strerror(ErrorCode));
OMX_BUFFERHEADERTYPE * hello_video2::get_free_output_buffer()
{
- while (true) {
+ if (output_buffer_usage == 0) {
+ for (unsigned int i = 0; i < output_port_def.nBufferCountActual; i++) {
+ output_buffer_usage |= 0x1 < i;
+ }
+ }
+
+ while (true)
+ {
for (unsigned int i = 0; i < output_port_def.nBufferCountActual; i++) {
if ((output_buffer_usage & *((unsigned int *)output_buffer_header[i]->pAppPrivate)) != 0) {
+ output_buffer_usage &= ~(*((unsigned int *)output_buffer_header[i]->pAppPrivate));
+ fprintf(stderr, "get_free_output_buffer:0x%08x\n", output_buffer_usage);
return output_buffer_header[i];
}
}
+ fprintf(stderr, "OMXWaitForFilled wait..\n");
OMXWaitForFilled();
+ fprintf(stderr, "OMXWaitForFilled done!.\n");
}
return NULL;
OMX_ERRORTYPE bufferFilled(OMX_HANDLETYPE hComp, OMX_PTR pAppD, OMX_BUFFERHEADERTYPE *buffer)
{
- phello_video2->output_buffer_usage |= *((unsigned int *)buffer->pAppPrivate);
-
+ fprintf(stderr, "phello_video2->output_buffer_usage:0x%08x,pAppPrivate:0x%08x,nFilledLenL:%d\n", phello_video2->output_buffer_usage, *((unsigned int *)buffer->pAppPrivate), buffer->nFilledLen);
OMXWakeUpFilled();
-
+
+ fprintf(stderr, "buffer filled done:%p\n", buffer->pBuffer);
if (buffer->nFilledLen == 0) {
phello_video2->fill_buffer();
OMX_BUFFERHEADERTYPE *out_buffer;
out_buffer = get_free_output_buffer();
+ fprintf(stderr, "OMX_FillThisBuffer:%p\n", out_buffer->pBuffer);
OMX_FillThisBuffer(component, out_buffer);
return OMX_ErrorNone;
output_port_def.nBufferCountActual = 16;
ErrorCode = OMX_SetParameter(component, OMX_IndexParamPortDefinition, &output_port_def);
if (ErrorCode != OMX_ErrorNone) {
- fprintf(stderr, "%s[%d]%s\n", __func__, __LINE__, OMX_strerror(ErrorCode));
+ fprintf(stderr, "Err: %s[%d]%s\n", __func__, __LINE__, OMX_strerror(ErrorCode));
+ exit(0);
}
return ErrorCode;
tbm_bo_handle handle_bo;
ErrorCode = OMX_ErrorNone;
tbm_bo tmp;
- unsigned char *buf;
+ OMX_U8 *buf;
unsigned int *pPrivateData;
for (unsigned int i = 0; i < num; i++)
*pPrivateData = (1 << i);
output_buffer_usage |= *pPrivateData;
- tmp = tbm_bo_alloc(_tbm_bufmgr, output_port_def.nBufferSize, TBM_BO_WC);
- handle_bo = tbm_bo_get_handle(tmp, TBM_DEVICE_CPU);
- buf = (unsigned char*)handle_bo.ptr;
+ if (1) {
+ tmp = tbm_bo_alloc(_tbm_bufmgr, output_port_def.nBufferSize, TBM_BO_WC);
+ handle_bo = tbm_bo_get_handle(tmp, TBM_DEVICE_CPU);
+ buf = (OMX_U8*)handle_bo.ptr;
+ } else {
+ buf = (OMX_U8*)malloc(output_port_def.nBufferSize);
+ }
+
+#if 1 // Check if handle_bo.ptr is valid.
+ memset(handle_bo.ptr, 0x00, output_port_def.nBufferSize);
+#endif // Check
ErrorCode = OMX_UseBuffer(component, &output_buffer_header[i], output_port_def.nPortIndex, pPrivateData, output_port_def.nBufferSize, buf);
if (ErrorCode == OMX_ErrorNone) {
- fprintf(stderr, "Okay:prepare_output_buffers:Output buffer %u allocated,%d.\n", i + 1, output_port_def.nBufferSize);
+ fprintf(stderr, "Okay:prepare_output_buffers: Port %d: Output buffer %d: allocated %d:buff %p:output_buffer_usage 0x%x\n", output_port_def.nPortIndex, i + 1, output_port_def.nBufferSize, buf, output_buffer_usage);
}
else {
fprintf(stderr, "Err:prepare_output_buffers:%d. %s\n", i, OMX_strerror(ErrorCode));
OMX_BUFFERHEADERTYPE * hello_video2::get_free_output_buffer()
{
+ if (output_buffer_usage == 0) {
+ for (unsigned int i = 0; i < output_port_def.nBufferCountActual; i++) {
+ output_buffer_usage |= 0x1 < i;
+ }
+ }
+
while (true)
{
for (unsigned int i = 0; i < output_port_def.nBufferCountActual; i++) {
if ((output_buffer_usage & *((unsigned int *)output_buffer_header[i]->pAppPrivate)) != 0) {
+ output_buffer_usage &= ~(*((unsigned int *)output_buffer_header[i]->pAppPrivate));
+ fprintf(stderr, "get_free_output_buffer:0x%08x\n", output_buffer_usage);
return output_buffer_header[i];
}
}
+ fprintf(stderr, "OMXWaitForFilled wait..\n");
OMXWaitForFilled();
+ fprintf(stderr, "OMXWaitForFilled done!.\n");
}
return NULL;