static GstStateChangeReturn gst_goo_encarmaac_change_state (GstElement* element, GstStateChange transition) { GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; GstGooEncArmAac *self = GST_GOO_ENCARMAAC (element); /* upwards state changes */ switch (transition) { case GST_STATE_CHANGE_READY_TO_PAUSED: GST_OBJECT_LOCK (self); { self->ts = 0; self->outcount = 0; #if 0 /* this code overrides the parameters */ OMX_AUDIO_PARAM_AACPROFILETYPE* param = NULL; param = GOO_TI_ARMAACENC_GET_OUTPUT_PORT_PARAM (self->component); param->nBitRate = DEFAULT_BITRATE; param->eAACStreamFormat = DEFAULT_OUTPUTFORMAT; param->eAACProfile = DEFAULT_PROFILE; param->nChannels = DEFAULT_CHANNELS; param->nSampleRate = DEFAULT_SAMPLERATE; #endif gst_goo_adapter_clear (self->adapter); } GST_OBJECT_UNLOCK (self); break; default: break; } ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); /* downwards state changes */ switch (transition) { case GST_STATE_CHANGE_PLAYING_TO_PAUSED: /* goo_component_set_state_paused (self->component); */ break; case GST_STATE_CHANGE_READY_TO_NULL: omx_stop (self); break; default: break; } return ret; }
static GstStateChangeReturn gst_goo_encpcm_state_change (GstElement* element, GstStateChange transition) { g_assert (GST_IS_GOO_ENCPCM (element)); GstGooEncPcm* self = GST_GOO_ENCPCM (element); GstStateChangeReturn ret; switch (transition) { case GST_STATE_CHANGE_READY_TO_PAUSED: GST_DEBUG_OBJECT (self, "GST_STATE_CHANGE_READY_TO_PAUSED"); self->rate = 0; self->channels = 0; self->ts = 0; self->outcount = 0; gst_goo_adapter_clear (self->adapter); break; default: break; } ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); switch (transition) { case GST_STATE_CHANGE_PLAYING_TO_PAUSED: GST_OBJECT_LOCK (self); goo_component_set_state_pause (self->component); GST_OBJECT_UNLOCK (self); break; case GST_STATE_CHANGE_PAUSED_TO_READY: break; case GST_STATE_CHANGE_READY_TO_NULL: omx_stop (self); break; default: break; } return ret; }
static GstStateChangeReturn gst_goo_encgsmhr_state_change (GstElement* element, GstStateChange transition) { g_assert (GST_IS_GOO_ENCGSMHR (element)); GstGooEncGsmHr* self = GST_GOO_ENCGSMHR (element); GstStateChangeReturn ret; switch (transition) { case GST_STATE_CHANGE_READY_TO_PAUSED: self->ts = 0; self->outcount = 0; gst_goo_adapter_clear (self->adapter); break; default: break; } ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); switch (transition) { case GST_STATE_CHANGE_PLAYING_TO_PAUSED: /* goo_component_set_state_paused (self->component); */ break; case GST_STATE_CHANGE_READY_TO_NULL: omx_stop (self); break; default: break; } GST_DEBUG_OBJECT (self, ""); return ret; }
static gboolean gst_goo_encarmaac_setcaps (GstPad * pad, GstCaps * caps) { GstGooEncArmAac* self = GST_GOO_ENCARMAAC (gst_pad_get_parent (pad)); GstStructure* structure = gst_caps_get_structure (caps, 0); gint channels, samplerate, width; gulong samples, bytes, fmt = 0; gboolean result = FALSE; GstCaps* srccaps = NULL; if (!gst_caps_is_fixed (caps)) { goto done; } omx_stop (self); if (!gst_structure_get_int (structure, "channels", &channels) || !gst_structure_get_int (structure, "rate", &samplerate)) { goto done; } if (gst_structure_has_name (structure, "audio/x-raw-int")) { gst_structure_get_int (structure, "width", &width); switch (width) { case 16: fmt = 16; break; default: g_return_val_if_reached (FALSE); } } else { g_return_val_if_reached (FALSE); } /* 20 msec */ gint outputframes = 0; g_object_get (self->component, "frames-buffer", &outputframes, NULL); self->duration = outputframes * gst_util_uint64_scale_int (1, GST_SECOND, 50); GST_OBJECT_LOCK (self); /* input params */ { OMX_AUDIO_PARAM_PCMMODETYPE* param = NULL; param = GOO_TI_ARMAACENC_GET_INPUT_PORT_PARAM (self->component); param->nBitPerSample = fmt; param->nChannels = channels; param->nSamplingRate = samplerate; } /* output params */ { OMX_AUDIO_PARAM_AACPROFILETYPE* param = NULL; param = GOO_TI_ARMAACENC_GET_OUTPUT_PORT_PARAM (self->component); param->nChannels = channels; param->nSampleRate = samplerate; if (channels == 1) { param->eChannelMode = OMX_AUDIO_ChannelModeMono; } if (channels == 2) { param->eChannelMode = OMX_AUDIO_ChannelModeStereo; } } GST_OBJECT_UNLOCK (self); omx_start (self); /* now create a caps for it all */ srccaps = gst_caps_new_simple ("audio/mpeg", "mpegversion", G_TYPE_INT, 4, "channels", G_TYPE_INT, channels, "rate", G_TYPE_INT, samplerate, NULL); result = gst_pad_set_caps (self->srcpad, srccaps); gst_caps_unref (srccaps); done: gst_object_unref (self); return result; }
static GstStateChangeReturn gst_goo_encjpeg_change_state (GstElement* element, GstStateChange transition) { GST_LOG (""); GstGooEncJpeg* self = GST_GOO_ENCJPEG (element); GstStateChange result; g_assert (self->component != NULL); g_assert (self->inport != NULL); g_assert (self->outport != NULL); switch (transition) { case GST_STATE_CHANGE_NULL_TO_READY: break; case GST_STATE_CHANGE_READY_TO_PAUSED: { GstGooEncJpegPrivate* priv = GST_GOO_ENCJPEG_GET_PRIVATE (self); priv->num_input_buffers = NUM_INPUT_BUFFERS_DEFAULT; priv->num_output_buffers = NUM_OUTPUT_BUFFERS_DEFAULT; priv->incount = 0; priv->outcount = 0; priv->quality = QUALITY_DEFAULT; priv->colorformat = COLOR_FORMAT_DEFAULT; priv->width = WIDTH_DEFAULT; priv->height = HEIGHT_DEFAULT; priv->omxbufsiz = 0; break; } case GST_STATE_CHANGE_PAUSED_TO_PLAYING: GST_OBJECT_LOCK (self); if (goo_component_get_state (self->component) == OMX_StatePause) { goo_component_set_state_executing (self->component); } GST_OBJECT_UNLOCK (self); break; default: break; } result = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); switch (transition) { case GST_STATE_CHANGE_PLAYING_TO_PAUSED: GST_OBJECT_LOCK (self); goo_component_set_state_pause (self->component); GST_OBJECT_UNLOCK (self); break; case GST_STATE_CHANGE_PAUSED_TO_READY: if ( ! (goo_port_is_tunneled (self->inport)) ) { omx_stop (self); } break; case GST_STATE_CHANGE_READY_TO_NULL: break; default: break; } return result; }