static gboolean xmms_asf_init (xmms_xform_t *xform) { xmms_asf_data_t *data; asf_iostream_t stream; gint ret; g_return_val_if_fail (xform, FALSE); data = g_new0 (xmms_asf_data_t, 1); stream.read = xmms_asf_read_callback; stream.write = NULL; stream.seek = xmms_asf_seek_callback; stream.opaque = xform; data->file = asf_open_cb (&stream); if (!data->file) { g_free (data); return FALSE; } data->packet = asf_packet_create (); data->outbuf = g_string_new (NULL); xmms_xform_private_data_set (xform, data); ret = asf_init (data->file); if (ret < 0) { XMMS_DBG ("ASF parser failed to init with error %d", ret); asf_packet_destroy (data->packet); asf_close (data->file); return FALSE; } data->track = xmms_asf_get_track (xform, data->file); if (data->track < 0) { XMMS_DBG ("No audio track found"); asf_packet_destroy (data->packet); asf_close (data->file); return FALSE; } xmms_asf_get_mediainfo (xform); XMMS_DBG ("ASF demuxer inited successfully!"); return TRUE; }
asf_file_t * asf_open_file(const char *filename) { asf_file_t *file; asf_iostream_t stream; FILE *fstream; fstream = fopen(filename, "rb"); if (!fstream) return NULL; stream.read = asf_fileio_read_cb; stream.write = NULL; stream.seek = asf_fileio_seek_cb; stream.opaque = fstream; file = asf_open_cb(&stream); if (!file) return NULL; file->filename = filename; return file; }