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_android_set_opensles_enabled(IjkMediaPlayer *mp, bool enabled) { if (!mp) return; MPTRACE("ijkmp_android_set_opensles_enabled(%d)", enabled ? 1 : 0); pthread_mutex_lock(&mp->mutex); if (mp) { if (enabled) { if (!SDL_AoutAndroid_IsObjectOfOpenSLES(mp->ffplayer->aout)) { ALOGI("recreate aout for OpenSL ES\n"); SDL_AoutFreeP(&mp->ffplayer->aout); mp->ffplayer->aout = SDL_AoutAndroid_CreateForOpenSLES(); } } else { if (!SDL_AoutAndroid_IsObjectOfAudioTrack(mp->ffplayer->aout)) { ALOGI("recreate aout for AudioTrack\n"); SDL_AoutFreeP(&mp->ffplayer->aout); mp->ffplayer->aout = SDL_AoutAndroid_CreateForAudioTrack(); } } } pthread_mutex_unlock(&mp->mutex); MPTRACE("ijkmp_android_set_opensles_enabled()=void"); }
static SDL_Aout *func_open_audio_output(IJKFF_Pipeline *pipeline, FFPlayer *ffp) { if (ffp->opensles) { return SDL_AoutAndroid_CreateForOpenSLES(); } else { return SDL_AoutAndroid_CreateForAudioTrack(); } }
IjkMediaPlayer *ijkmp_android_create(int(*msg_loop)(void*)) { IjkMediaPlayer *mp = ijkmp_create(msg_loop); 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->aout) goto fail; return mp; fail: ijkmp_dec_ref_p(&mp); return NULL; }