示例#1
0
static gboolean
xmms_mpc_init (xmms_xform_t *xform)
{
    xmms_mpc_data_t *data;
    xmms_error_t error;

    data = g_new0 (xmms_mpc_data_t, 1);
    xmms_xform_private_data_set (xform, data);

    if (!xmms_apetag_read (xform)) {
        XMMS_DBG ("Failed to read APEv2 tag");
    }

    /* Reset to start after reading the tags */
    xmms_error_reset (&error);
    xmms_xform_seek (xform, 0, XMMS_XFORM_SEEK_SET, &error);

    data->buffer = g_string_new (NULL);

    data->reader.read = xmms_mpc_callback_read;
    data->reader.seek = xmms_mpc_callback_seek;
    data->reader.tell = xmms_mpc_callback_tell;
    data->reader.canseek = xmms_mpc_callback_canseek;
    data->reader.get_size = xmms_mpc_callback_get_size;

    data->reader.data = xform;

#ifdef HAVE_MPCDEC_OLD
    mpc_streaminfo_init (&data->info);
    if (mpc_streaminfo_read (&data->info, &data->reader) != ERROR_CODE_OK)
        return FALSE;

    mpc_decoder_setup (&data->decoder, &data->reader);

    if (mpc_decoder_initialize (&data->decoder, &data->info) == FALSE)
        return FALSE;
#else
    data->demux = mpc_demux_init (&data->reader);
    if (!data->demux) return FALSE;

    mpc_demux_get_info (data->demux,  &data->info);
#endif

    xmms_mpc_cache_streaminfo (xform);

    xmms_xform_outdata_type_add (xform,
                                 XMMS_STREAM_TYPE_MIMETYPE,
                                 "audio/pcm",
                                 XMMS_STREAM_TYPE_FMT_FORMAT,
                                 XMMS_SAMPLE_FORMAT_FLOAT,
                                 XMMS_STREAM_TYPE_FMT_CHANNELS,
                                 data->info.channels,
                                 XMMS_STREAM_TYPE_FMT_SAMPLERATE,
                                 data->info.sample_freq,
                                 XMMS_STREAM_TYPE_END);

    return TRUE;
}
示例#2
0
static gboolean
xmms_mpc_init (xmms_xform_t *xform)
{
	xmms_mpc_data_t *data;

	data = g_new0 (xmms_mpc_data_t, 1);
	xmms_xform_private_data_set (xform, data);

	xmms_mpc_collect_metadata (xform);


	data->buffer = g_string_new (NULL);

	data->reader.read = xmms_mpc_callback_read;
	data->reader.seek = xmms_mpc_callback_seek;
	data->reader.tell = xmms_mpc_callback_tell;
	data->reader.canseek = xmms_mpc_callback_canseek;
	data->reader.get_size = xmms_mpc_callback_get_size;

	data->reader.data = xform;

#ifdef HAVE_MPCDEC_OLD
	mpc_streaminfo_init (&data->info);
	if (mpc_streaminfo_read (&data->info, &data->reader) != ERROR_CODE_OK)
		return FALSE;

	mpc_decoder_setup (&data->decoder, &data->reader);

	if (mpc_decoder_initialize (&data->decoder, &data->info) == FALSE)
		return FALSE;
#else
	data->demux = mpc_demux_init (&data->reader);
	if (!data->demux) return FALSE;

	mpc_demux_get_info (data->demux,  &data->info);
#endif

	xmms_mpc_cache_streaminfo (xform);

	xmms_xform_outdata_type_add (xform,
	                             XMMS_STREAM_TYPE_MIMETYPE,
	                             "audio/pcm",
	                             XMMS_STREAM_TYPE_FMT_FORMAT,
	                             XMMS_SAMPLE_FORMAT_FLOAT,
	                             XMMS_STREAM_TYPE_FMT_CHANNELS,
	                             data->info.channels,
	                             XMMS_STREAM_TYPE_FMT_SAMPLERATE,
	                             data->info.sample_freq,
	                             XMMS_STREAM_TYPE_END);

	return TRUE;
}