static void omx_wait_for_done (GstGooEncPcm* self) { g_assert (self != NULL); OMX_BUFFERHEADERTYPE* omx_buffer = NULL; OMX_PARAM_PORTDEFINITIONTYPE* param = NULL; param = GOO_PORT_GET_DEFINITION (self->inport); int omxbufsiz = param->nBufferSize; int avail = gst_goo_adapter_available (self->adapter); if (goo_port_is_tunneled (self->inport)) { GST_INFO_OBJECT (self, "Tunneled Input port: Setting done"); goo_component_set_done (self->component); return; } if (avail < omxbufsiz && avail >= 0) { GST_DEBUG_OBJECT (self, "Sending an EOS buffer"); goo_component_send_eos (self->component); } else { /* For some reason the adapter didn't extract all possible buffers */ g_assert_not_reached (); } gst_goo_adapter_clear (self->adapter); GST_INFO_OBJECT (self, "Waiting for done signal"); goo_component_wait_for_done (self->component); return; }
static void gst_goo_filter_wait_for_done (GstGooFilter* self) { g_assert (self != NULL); GstGooFilterPrivate* priv = GST_GOO_FILTER_GET_PRIVATE (self); /* flushing the last buffers in adapter */ OMX_BUFFERHEADERTYPE* omx_buffer; OMX_PARAM_PORTDEFINITIONTYPE* param = GOO_PORT_GET_DEFINITION (self->inport); GstGooAdapter* adapter = self->adapter; int omxbufsiz = param->nBufferSize; int avail = gst_goo_adapter_available (adapter); if (goo_port_is_tunneled (self->inport)) { GST_INFO ("Input port is tunneled: Setting done"); goo_component_set_done (self->component); return; } if (avail < omxbufsiz && avail > 0) { GST_INFO ("Marking EOS buffer"); omx_buffer = goo_port_grab_buffer (self->inport); GST_DEBUG ("Peek to buffer %d bytes", avail); gst_goo_adapter_peek (adapter, avail, omx_buffer); omx_buffer->nFilledLen = avail; /* let's send the EOS flag right now */ omx_buffer->nFlags = OMX_BUFFERFLAG_EOS; /** @todo timestamp the buffers */ priv->incount++; goo_component_release_buffer (self->component, omx_buffer); } else if (avail == 0) { GST_DEBUG ("Sending empty buffer with EOS flag in it"); goo_component_send_eos (self->component); } else { /* For some reason the adapter didn't extract all possible buffers */ GST_ERROR ("Adapter algorithm error!"); goo_component_send_eos (self->component); } gst_goo_adapter_clear (adapter); if (goo_port_is_tunneled (self->outport)) { GST_INFO ("Outport is tunneled: Setting done"); goo_component_set_done (self->component); } else { GST_INFO ("Waiting for done signal"); goo_component_wait_for_done (self->component); } return; }