static gboolean song_changed (void *data) { /* executes in the output thread; NOT the filler thread */ xmms_output_song_changed_arg_t *arg = (xmms_output_song_changed_arg_t *)data; xmms_medialib_entry_t entry; entry = xmms_xform_entry_get (arg->chain); XMMS_DBG ("Running hotspot! Song changed!! %d", entry); arg->output->played = 0; arg->output->current_entry = entry; if (!xmms_output_format_set (arg->output, xmms_xform_outtype_get (arg->chain))) { XMMS_DBG ("Couldn't set format, stopping filler.."); xmms_output_filler_state_nolock (arg->output, FILLER_STOP); xmms_ringbuf_set_eos (arg->output->filler_buffer, TRUE); return FALSE; } if (arg->flush) xmms_output_flush (arg->output); xmms_object_emit_f (XMMS_OBJECT (arg->output), XMMS_IPC_SIGNAL_OUTPUT_CURRENTID, XMMSV_TYPE_UINT32, entry); return TRUE; }
static gboolean xmms_ofa_init (xmms_xform_t *xform) { xmms_ofa_data_t *data; xmms_medialib_entry_t entry; char *fp; g_return_val_if_fail (xform, FALSE); data = g_new0 (xmms_ofa_data_t, 1); g_return_val_if_fail (data, FALSE); data->thread = g_thread_new ("x2 ofa calc", xmms_ofa_thread, data); if (!data->thread) { g_free (data); return FALSE; } g_mutex_init (&data->mutex); g_cond_init (&data->cond); data->bytes_to_read = 44100 * 135 * 4; data->buf = g_malloc (data->bytes_to_read); entry = xmms_xform_entry_get (xform); /* TODO: #2482 fp = xmms_medialib_entry_property_get_str (entry, "ofa_fingerprint"); */ fp = NULL; if (fp) { XMMS_DBG ("Entry already has ofa_fingerprint, not recalculating"); /* keep it! */ xmms_xform_metadata_set_str (xform, "ofa_fingerprint", fp); g_free (fp); } else { data->run_ofa = TRUE; } xmms_xform_private_data_set (xform, data); xmms_xform_outdata_type_copy (xform); return TRUE; }
static gboolean song_changed (void *data) { /* executes in the output thread; NOT the filler thread */ xmms_output_song_changed_arg_t *arg = (xmms_output_song_changed_arg_t *)data; xmms_medialib_entry_t entry; xmms_stream_type_t *type; entry = xmms_xform_entry_get (arg->chain); XMMS_DBG ("Running hotspot! Song changed!! %d", entry); arg->output->played = 0; arg->output->current_entry = entry; type = xmms_xform_outtype_get (arg->chain); if (!xmms_output_format_set (arg->output, type)) { gint fmt, rate, chn; fmt = xmms_stream_type_get_int (type, XMMS_STREAM_TYPE_FMT_FORMAT); rate = xmms_stream_type_get_int (type, XMMS_STREAM_TYPE_FMT_SAMPLERATE); chn = xmms_stream_type_get_int (type, XMMS_STREAM_TYPE_FMT_CHANNELS); XMMS_DBG ("Couldn't set format %s/%d/%d, stopping filler..", xmms_sample_name_get (fmt), rate, chn); xmms_output_filler_state_nolock (arg->output, FILLER_STOP); xmms_ringbuf_set_eos (arg->output->filler_buffer, TRUE); return FALSE; } if (arg->flush) xmms_output_flush (arg->output); xmms_object_emit (XMMS_OBJECT (arg->output), XMMS_IPC_SIGNAL_PLAYBACK_CURRENTID, xmmsv_new_int (entry)); return TRUE; }