static int mp_play(void) { player_pb_state_t state = player_playback_get_state(mp->player); if (state == PLAYER_PB_STATE_PAUSE) player_playback_pause(mp->player); /* unpause */ else if (state == PLAYER_PB_STATE_IDLE) player_playback_start(mp->player); return 0; }
GF_Err LIBPLAYER_ServiceCommand(GF_InputService *plug, GF_NetworkCommand *com) { LibPlayerIn *read = (LibPlayerIn *) plug->priv; GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[LibPlayerIN] ServiceCommand for instance %d, read->state=%d\n", read->player_id, read->state)); if (!com->base.on_channel) return GF_NOT_SUPPORTED; if (com->command_type==GF_NET_SERVICE_HAS_AUDIO) return GF_NOT_SUPPORTED; switch (com->command_type) { case GF_NET_CHAN_SET_PULL: return GF_NOT_SUPPORTED; case GF_NET_CHAN_INTERACTIVE: return GF_OK; /*since data is file-based, no padding is needed (decoder plugin will handle it itself)*/ case GF_NET_CHAN_SET_PADDING: return GF_OK; case GF_NET_CHAN_BUFFER: return GF_OK; com->buffer.max = com->buffer.min = 0; return GF_OK; case GF_NET_CHAN_DURATION: /*this module is not made for updates, use undefined duration*/ com->duration.duration = -1; return GF_OK; case GF_NET_CHAN_PLAY: if (read->state==0) { #ifndef TEST_LIBPLAYER player_playback_start(read->player); #endif read->state = 1; GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[LibPlayerIN] Starting playback for instance %d\n", read->player_id)); } return GF_OK; case GF_NET_CHAN_STOP: if (read->state==1) { #ifndef TEST_LIBPLAYER player_playback_pause(read->player); #endif read->state = 0; GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[LibPlayerIN] Stopping playback for instance %d\n", read->player_id)); } return GF_OK; case GF_NET_CHAN_CONFIG: return GF_OK; case GF_NET_CHAN_GET_DSI: com->get_dsi.dsi = NULL; com->get_dsi.dsi_len = 0; return GF_OK; } return GF_OK; }
static int on_libplayer_event(player_event_t e, void *data) { GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[LibPlayerIN] Received event %d\n", e)); switch (e) { case PLAYER_EVENT_PLAYBACK_FINISHED: player_playback_stop(data); player_playback_start(data); if ((in.w && in.h) || (out.w && out.h)) player_video_io_windows_set(data, &in, &out); break; case PLAYER_EVENT_FE_HAS_LOCK: break; case PLAYER_EVENT_FE_TIMEDOUT: break; default: break; } return 0; }
static int on_libplayer_event(player_event_t e, void *data) { GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[LibPlayerEvent] Received event %d\n", e)); switch (e) { case PLAYER_EVENT_PLAYBACK_FINISHED: player_playback_stop(data); player_playback_start(data); break; case PLAYER_EVENT_FE_HAS_LOCK: break; case PLAYER_EVENT_FE_TIMEDOUT: break; case PLAYER_EVENT_VIDEO_PICTURE: break; default: break; } return 0; }