void bgav_audio_parser_init_dca(bgav_audio_parser_t * parser) { dca_t * priv = calloc(1, sizeof(*priv)); priv->state = dts_init(0); parser->priv = priv; parser->parse = parse_dca; parser->cleanup = cleanup_dca; parser->parse_frame = parse_frame_dca; }
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; }
ADM_AudiocodecDCA::ADM_AudiocodecDCA( uint32_t fourcc, WAVHeader *info) : ADM_Audiocodec(fourcc) { int flags=0; ADM_assert(fourcc==WAV_DTS); dts_handle=NULL; #if (defined( ARCH_X86) || defined(ARCH_X86_64)) #define CHK(x,y) if(CpuCaps::has##x()) flags|=MM_ACCEL_X86_##y; CHK(MMX,MMX); CHK(3DNOW,3DNOW); CHK(MMXEXT,MMXEXT); #endif dts_handle=(void *)dts_init(flags); if(!dts_handle) { printf("Cannot init libdca\n"); ADM_assert(0); } _wavHeader = info; }
/***************************************************************************** * Open: *****************************************************************************/ static int Open( vlc_object_t *p_this, filter_sys_t *p_sys, audio_format_t input, audio_format_t output ) { p_sys->b_dynrng = config_GetInt( p_this, "dts-dynrng" ); p_sys->b_dontwarn = 0; /* We'll do our own downmixing, thanks. */ p_sys->i_nb_channels = aout_FormatNbChannels( &output ); switch ( (output.i_physical_channels & AOUT_CHAN_PHYSMASK) & ~AOUT_CHAN_LFE ) { case AOUT_CHAN_CENTER: if ( (output.i_original_channels & AOUT_CHAN_CENTER) || (output.i_original_channels & (AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT)) ) { p_sys->i_flags = DTS_MONO; } break; case AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT: if ( output.i_original_channels & AOUT_CHAN_DOLBYSTEREO ) { p_sys->i_flags = DTS_DOLBY; } else if ( input.i_original_channels == AOUT_CHAN_CENTER ) { p_sys->i_flags = DTS_MONO; } else if ( input.i_original_channels & AOUT_CHAN_DUALMONO ) { p_sys->i_flags = DTS_CHANNEL; } else { p_sys->i_flags = DTS_STEREO; } break; case AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_CENTER: p_sys->i_flags = DTS_3F; break; case AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_REARCENTER: p_sys->i_flags = DTS_2F1R; break; case AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_CENTER | AOUT_CHAN_REARCENTER: p_sys->i_flags = DTS_3F1R; break; case AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT: p_sys->i_flags = DTS_2F2R; break; case AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_CENTER | AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT: p_sys->i_flags = DTS_3F2R; break; default: msg_Warn( p_this, "unknown sample format!" ); free( p_sys ); return -1; } if ( output.i_physical_channels & AOUT_CHAN_LFE ) { p_sys->i_flags |= DTS_LFE; } //p_sys->i_flags |= DTS_ADJUST_LEVEL; /* Initialize libdts */ p_sys->p_libdts = dts_init( 0 ); if( p_sys->p_libdts == NULL ) { msg_Err( p_this, "unable to initialize libdts" ); return VLC_EGENERIC; } aout_CheckChannelReorder( pi_channels_in, pi_channels_out, output.i_physical_channels & AOUT_CHAN_PHYSMASK, p_sys->i_nb_channels, p_sys->pi_chan_table ); return VLC_SUCCESS; }