IjkMediaPlayer *ijkmp_create(void *(*msg_loop)(void*)) { IjkMediaPlayer *mp = (IjkMediaPlayer *) av_mallocz(sizeof(IjkMediaPlayer)); if (!mp) goto fail; mp->ffplayer = ffp_create(); if (!mp) goto fail; mp->ffplayer->vout = SDL_VoutAndroid_CreateForAndroidSurface(); if (!mp->ffplayer->vout) goto fail; mp->ffplayer->aout = SDL_AoutAndroid_CreateForAudioTrack(); if (!mp->ffplayer->vout) goto fail; mp->msg_loop = msg_loop; ijkmp_inc_ref(mp); pthread_mutex_init(&mp->mutex, NULL); return mp; fail: ijkmp_destroy_p(&mp); return NULL; }
void ijkmp_dec_ref(IjkMediaPlayer *mp) { if (!mp) return; int ref_count = __sync_sub_and_fetch(&mp->ref_count, 1); if (ref_count == 0) { MPTRACE("ijkmp_dec_ref(): ref=0\n"); ijkmp_shutdown(mp); ijkmp_destroy_p(&mp); } }
IjkMediaPlayer *ijkmp_create(int (*msg_loop)(void*)) { IjkMediaPlayer *mp = (IjkMediaPlayer *) av_mallocz(sizeof(IjkMediaPlayer)); if (!mp) goto fail; mp->ffplayer = ffp_create(); if (!mp) goto fail; mp->msg_loop = msg_loop; ijkmp_inc_ref(mp); pthread_mutex_init(&mp->mutex, NULL); return mp; fail: ijkmp_destroy_p(&mp); return NULL; }