Пример #1
0
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;
}