提交 8189163c 编写于 作者: Z Zhang Rui

ijkplayer: add ijkmp_reset

上级 99ba69d1
......@@ -2550,6 +2550,21 @@ int ijkff_wait_stop(FFPlayer *ffp)
return 0;
}
int ijkff_seek_to_l(FFPlayer *ffp, long msec)
{
assert(ffp);
VideoState *is = ffp->is;
if (!is)
return EIJK_NULL_IS_PTR;
// FIXME: thread-safe
// FIXME: seek by bytes
// FIXME: seek out of range
// FIXME: seekable
stream_seek(ffp, milliseconds_to_fftime(msec), 0, 0);
return 0;
}
long ijkff_get_current_position_l(FFPlayer *ffp)
{
assert(ffp);
......
......@@ -38,6 +38,7 @@ int ijkff_stop_l(FFPlayer *ffp);
int ijkff_wait_stop(FFPlayer *ffp);
/* all in milliseconds */
int ijkff_seek_to_l(IjkMediaPlayer *mp, long msec);
long ijkff_get_current_position_l(FFPlayer *ffp);
long ijkff_get_duration_l(FFPlayer *ffp);
......
......@@ -406,7 +406,8 @@ typedef struct FFPlayer {
#define IJKFF_MSG_SEEK_COMPLETED 6
#define IJKFF_SAFE_FREE(p) do {free(p); p = NULL;} while(0)
#define fftime_to_milliseconds(t) (t / (AV_TIME_BASE / 1000))
#define fftime_to_milliseconds(ts) (ts / (AV_TIME_BASE / 1000))
#define milliseconds_to_fftime(ms) (ms * (AV_TIME_BASE / 1000))
inline static void ijkff_reset(FFPlayer *ffp)
{
......
......@@ -99,7 +99,20 @@ IjkMediaPlayer *ijkmp_create()
void ijkmp_shutdown(IjkMediaPlayer *mp)
{
assert(mp);
// FIXME: implement
// FIXME: implement
}
void ijkmp_reset(IjkMediaPlayer *mp)
{
assert(mp);
ijkmp_stop(mp);
ijkff_reset(mp->ffplayer);
free(mp->data_source);
mp->data_source = NULL;
mp->mp_state = MP_STATE_IDLE;
}
void ijkmp_inc_ref(IjkMediaPlayer *mp)
......@@ -304,12 +317,6 @@ int ijkmp_stop(IjkMediaPlayer *mp)
return retval;
}
int ijkmp_seek_to(IjkMediaPlayer *mp, long msec)
{
// FIXME: implement
return 0;
}
bool ijkmp_is_playing(IjkMediaPlayer *mp)
{
assert(mp);
......@@ -321,6 +328,39 @@ bool ijkmp_is_playing(IjkMediaPlayer *mp)
return false;
}
int ijkmp_seek_to_l(IjkMediaPlayer *mp, long msec)
{
assert(mp);
MPST_CHECK_NOT_RET(mp->mp_state, MP_STATE_IDLE);
MPST_CHECK_NOT_RET(mp->mp_state, MP_STATE_INITIALIZED);
// MPST_CHECK_NOT_RET(mp->mp_state, MP_STATE_ASYNC_PREPARING);
// MPST_CHECK_NOT_RET(mp->mp_state, MP_STATE_PREPARED);
// MPST_CHECK_NOT_RET(mp->mp_state, MP_STATE_STARTED);
// MPST_CHECK_NOT_RET(mp->mp_state, MP_STATE_PAUSED);
// MPST_CHECK_NOT_RET(mp->mp_state, MP_STATE_COMPLETED);
MPST_CHECK_NOT_RET(mp->mp_state, MP_STATE_STOPPED);
MPST_CHECK_NOT_RET(mp->mp_state, MP_STATE_ERROR);
MPST_CHECK_NOT_RET(mp->mp_state, MP_STATE_END);
int retval = ijkmp_seek_to_l(mp->ffplayer, msec);
if (retval < 0) {
return retval;
}
return 0;
}
int ijkmp_seek_to(IjkMediaPlayer *mp, long msec)
{
assert(mp);
pthread_mutex_lock(&mp->mutex);
int retval = ijkmp_seek_to(mp, msec);
pthread_mutex_unlock(&mp->mutex);
return retval;
}
static long ijkmp_get_current_position_l(IjkMediaPlayer *mp)
{
return ijkff_get_current_position_l(mp->ffplayer);
......@@ -349,11 +389,6 @@ long ijkmp_get_duration(IjkMediaPlayer *mp)
return retval;
}
void ijkmp_reset(IjkMediaPlayer *mp)
{
// FIXME: implement
}
void ijkmp_set_vout(IjkMediaPlayer *mp, SDL_Vout *vout)
{
mp->ffplayer->vout = vout;
......
......@@ -251,7 +251,6 @@ IjkMediaPlayer_release(JNIEnv *env, jobject thiz)
static void
IjkMediaPlayer_reset(JNIEnv *env, jobject thiz)
{
// FIXME: consider create new MediaPlayer
IjkMediaPlayer *mp = jni_get_media_player(env, thiz);
JNI_CHECK_GOTO(mp, env, NULL, "mpjni: reset: null mp", LABEL_RETURN);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册