KSYMediaPlayer *ksymp_create(int (*msg_loop)(void*)) { //#ifdef _ARM_ // LOGW("name=%s", name); // android::CallStack stack; // stack.update(1, 100); // stack.dump(""); //#endif KSYMediaPlayer *mp = (KSYMediaPlayer *) av_mallocz(sizeof(KSYMediaPlayer)); if (!mp) goto fail; mp->ffplayer = ffp_create(); if (!mp) goto fail; mp->msg_loop = msg_loop; ksymp_inc_ref(mp); pthread_mutex_init(&mp->mutex, NULL); return mp; fail: ksymp_destroy_p(&mp); return NULL; }
void ksymp_dec_ref(KSYMediaPlayer *mp) { if (!mp) return; int ref_count = __sync_sub_and_fetch(&mp->ref_count, 1); if (ref_count == 0) { MPTRACE("ksymp_dec_ref(): ref=0\n"); ksymp_shutdown(mp); ksymp_destroy_p(&mp); } }
KSYMediaPlayer *ksymp_create(int (*msg_loop)(void*)) { KSYMediaPlayer *mp = (KSYMediaPlayer *) av_mallocz(sizeof(KSYMediaPlayer)); if (!mp) goto fail; mp->ffplayer = ffp_create(); if (!mp) goto fail; mp->msg_loop = msg_loop; ksymp_inc_ref(mp); pthread_mutex_init(&mp->mutex, NULL); return mp; fail: ksymp_destroy_p(&mp); return NULL; }