static GstStateChangeReturn gst_dtsdec_change_state (GstElement * element, GstStateChange transition) { GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; GstDtsDec *dts = GST_DTSDEC (element); switch (transition) { case GST_STATE_CHANGE_NULL_TO_READY:{ GstDtsDecClass *klass; klass = GST_DTSDEC_CLASS (G_OBJECT_GET_CLASS (dts)); dts->state = dts_init (klass->dts_cpuflags); break; } case GST_STATE_CHANGE_READY_TO_PAUSED: dts->samples = dts_samples (dts->state); dts->bit_rate = -1; dts->sample_rate = -1; dts->stream_channels = 0; /* FIXME force stereo for now */ dts->request_channels = DTS_CHANNEL; dts->using_channels = 0; dts->level = 1; dts->bias = 0; dts->current_ts = 0; break; case GST_STATE_CHANGE_PAUSED_TO_PLAYING: break; default: break; } ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); switch (transition) { case GST_STATE_CHANGE_PLAYING_TO_PAUSED: break; case GST_STATE_CHANGE_PAUSED_TO_READY: dts->samples = NULL; if (dts->cache) { gst_buffer_unref (dts->cache); dts->cache = NULL; } break; case GST_STATE_CHANGE_READY_TO_NULL: dts_free (dts->state); dts->state = NULL; break; default: break; } return ret; }
static gboolean gst_dtsdec_start (GstAudioDecoder * dec) { GstDtsDec *dts = GST_DTSDEC (dec); GstDtsDecClass *klass; GST_DEBUG_OBJECT (dec, "start"); klass = GST_DTSDEC_CLASS (G_OBJECT_GET_CLASS (dts)); dts->state = dca_init (klass->dts_cpuflags); dts->samples = dca_samples (dts->state); dts->bit_rate = -1; dts->sample_rate = -1; dts->stream_channels = DCA_CHANNEL; dts->using_channels = DCA_CHANNEL; dts->level = 1; dts->bias = 0; dts->flag_update = TRUE; /* call upon legacy upstream byte support (e.g. seeking) */ gst_audio_decoder_set_estimate_rate (dec, TRUE); return TRUE; }