Example #1
0
/*
 * set playing position (some media doesn't support this, they must
 * return zero.
 */
int callc fennec_plugin_setposition(unsigned long id, unsigned long ptype, void* pos)
{
	if(id >= pstreams_count)return 0;
	if(!pstreams[id].initialized)return 0;

	while(plugin_busy)
		sys_pass();

	plugin_busy = 1;

	switch(ptype)
	{
	case fennec_input_position_32ms:
		decoder_seek(id, ((double)*((unsigned long*)pos)) / ((double)(pstreams[id].duration * 1000)));
		break;

	case fennec_input_position_fraction:
		decoder_seek(id, *((double*)pos));
		break;

	default:
		plugin_busy = 0;
		return 0;

	}

	plugin_busy = 0;
	return 1;
}
Example #2
0
int callc fennec_plugin_setposition(unsigned long id, unsigned long ptype, void* pos)
{
	double dpos;

	if(id >= pstreams_count)return 0;
	if(!pstreams[id].initialized)return 0;

	while(plugin_busy)return 0; /* just return */
	plugin_busy = 1;

	switch(ptype)
	{
	case fennec_input_position_32ms:
		decoder_seek(id, ((double)(*(DWORD*)pos)) / decoder_getduration_ms(id));
		break;

	case fennec_input_position_fraction:
		dpos = *(double*)pos;
		if(dpos > 1 || dpos < 0)return 0;
		decoder_seek(id, dpos);
		break;

	case fennec_input_position_percent:
		decoder_seek(id, ((double)(*(DWORD*)pos)) / 100.0f);
		break;

	default:
		plugin_busy = 0;
		return 0;

	}

	plugin_busy = 0;
	return 1;
}
Example #3
0
/* callback for seeking */
static void
seek_cb(AppData *appdata,
	int seconds) {

  decoder_seek(appdata->decoder, seconds * 1000);
  decoder_play(appdata->decoder);
  gui_set_paused(appdata->gui, FALSE);

}
Example #4
0
/* callback for control buttons */
static void
control_cb(AppData *appdata,
	   int command) {

  switch (command) {
  case (PLAY):
    if (decoder_is_playing(appdata->decoder)) {
      decoder_stop(appdata->decoder);
      gui_set_paused(appdata->gui, TRUE);
    } else {
      decoder_play(appdata->decoder);
      gui_set_paused(appdata->gui, FALSE);
    }
    break;

  case (STOP):
    decoder_stop(appdata->decoder);
    decoder_seek(appdata->decoder, 0);
    appdata->current_position = decoder_get_position(appdata->decoder);
    gui_set_time(appdata->gui, 0, decoder_get_total(appdata->decoder));
    gui_set_paused(appdata->gui, FALSE);
    break;

  case (PREVIOUS):
    playlist_previous(appdata->playlist);
    break;

  case (NEXT):
    decoder_stop(appdata->decoder);
    playlist_next(appdata->playlist);
    break;

  case (CLEAR):
    playlist_clear(appdata->playlist);

  default:
    break;
  }

}
Example #5
0
void on_position_hscale_value_changed(GtkRange * range, gpointer user_data)
{
    decoder_seek(gtk_range_get_value(range));
    update_ui_position(app);
}