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 seek_done (void *data) { xmms_output_t *output = (xmms_output_t *)data; g_mutex_lock (output->playtime_mutex); output->played = output->filler_seek * xmms_sample_frame_size_get (output->format); output->toskip = output->filler_skip * xmms_sample_frame_size_get (output->format); g_mutex_unlock (output->playtime_mutex); xmms_output_flush (output); 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; }