Example #1
0
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;
}
Example #2
0
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;
}
Example #3
0
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;
}
Example #4
0
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;
}
Example #5
0
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;
}