static int ijkmp_stop_l(IjkMediaPlayer *mp) { assert(mp); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_IDLE); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_INITIALIZED); // MPST_RET_IF_EQ(mp->mp_state, MP_STATE_ASYNC_PREPARING); // MPST_RET_IF_EQ(mp->mp_state, MP_STATE_PREPARED); // MPST_RET_IF_EQ(mp->mp_state, MP_STATE_STARTED); // MPST_RET_IF_EQ(mp->mp_state, MP_STATE_PAUSED); // MPST_RET_IF_EQ(mp->mp_state, MP_STATE_COMPLETED); // MPST_RET_IF_EQ(mp->mp_state, MP_STATE_STOPPED); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_ERROR); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_END); ffp_remove_msg(mp->ffplayer, FFP_REQ_START); ffp_remove_msg(mp->ffplayer, FFP_REQ_PAUSE); int retval = ffp_stop_l(mp->ffplayer); if (retval < 0) { return retval; } ijkmp_change_state_l(mp, MP_STATE_STOPPED); return 0; }
static int ijkmp_set_data_source_l(IjkMediaPlayer *mp, const char *url) { assert(mp); assert(url); // MPST_RET_IF_EQ(mp->mp_state, MP_STATE_IDLE); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_INITIALIZED); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_ASYNC_PREPARING); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_PREPARED); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_STARTED); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_PAUSED); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_COMPLETED); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_STOPPED); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_ERROR); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_END); char *dup_url = strdup(url); if (!dup_url) return EIJK_OUT_OF_MEMORY; av_freep(&mp->data_source); mp->data_source = av_strdup(url); mp->mp_state = MP_STATE_INITIALIZED; return 0; }
static int ksymp_set_data_source_l(KSYMediaPlayer *mp, const char *url, const char *header) { assert(mp); assert(url); // MPST_RET_IF_EQ(mp->mp_state, MP_STATE_IDLE); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_INITIALIZED); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_ASYNC_PREPARING); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_PREPARED); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_STARTED); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_PAUSED); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_COMPLETED); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_STOPPED); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_ERROR); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_END); av_freep(&mp->data_source); mp->data_source = av_strdup(url); if (!mp->data_source) return EKSY_OUT_OF_MEMORY; if(header != NULL){ av_freep(&mp->header); mp->header = av_strdup(header); if (!mp->header) return EKSY_OUT_OF_MEMORY; } ksymp_change_state_l(mp, MP_STATE_INITIALIZED); return 0; }
static int ijkmp_prepare_async_l(IjkMediaPlayer *mp) { assert(mp); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_IDLE); // MPST_RET_IF_EQ(mp->mp_state, MP_STATE_INITIALIZED); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_ASYNC_PREPARING); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_PREPARED); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_STARTED); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_PAUSED); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_COMPLETED); // MPST_RET_IF_EQ(mp->mp_state, MP_STATE_STOPPED); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_ERROR); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_END); assert(mp->data_source); ijkmp_change_state_l(mp, MP_STATE_ASYNC_PREPARING); msg_queue_start(&mp->ffplayer->msg_queue); // released in msg_loop ijkmp_inc_ref(mp); mp->msg_thread = SDL_CreateThreadEx(&mp->_msg_thread, mp->msg_loop, mp, "ff_msg_loop"); // TODO: 9 release weak_thiz if pthread_create() failed; int retval = ffp_prepare_async_l(mp->ffplayer, mp->data_source); if (retval < 0) { ijkmp_change_state_l(mp, MP_STATE_ERROR); return retval; } return 0; }
static int ikjmp_chkst_seek_l(int mp_state) { MPST_RET_IF_EQ(mp_state, MP_STATE_IDLE); MPST_RET_IF_EQ(mp_state, MP_STATE_INITIALIZED); // MPST_RET_IF_EQ(mp_state, MP_STATE_ASYNC_PREPARING); // MPST_RET_IF_EQ(mp_state, MP_STATE_PREPARED); // MPST_RET_IF_EQ(mp_state, MP_STATE_STARTED); // MPST_RET_IF_EQ(mp_state, MP_STATE_PAUSED); // MPST_RET_IF_EQ(mp_state, MP_STATE_COMPLETED); MPST_RET_IF_EQ(mp_state, MP_STATE_STOPPED); MPST_RET_IF_EQ(mp_state, MP_STATE_ERROR); MPST_RET_IF_EQ(mp_state, MP_STATE_END); return 0; }
static int airstashmp_set_data_source_l(AirStashMediaPlayer *mp, const char *url) { assert(mp); assert(url); // MPST_RET_IF_EQ(mp->mp_state, MP_STATE_IDLE); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_INITIALIZED); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_ASYNC_PREPARING); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_PREPARED); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_STARTED); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_PAUSED); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_COMPLETED); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_STOPPED); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_ERROR); MPST_RET_IF_EQ(mp->mp_state, MP_STATE_END); freep((void**)&mp->data_source); mp->data_source = strdup(url); if (!mp->data_source) return EAIRSTASH_OUT_OF_MEMORY; airstashmp_change_state_l(mp, MP_STATE_INITIALIZED); return 0; }