zoukankan      html  css  js  c++  java
  • FFmpeg(13)-创建OpenSLES混音器CreateOutputMix初始化

    一.包含头文件和库文件

    CMakeLists

    target_link_libraries( # Specifies the target library.
                           native-lib
                           OpenSLES
    
                           # Links the target library to the log library
                           # included in the NDK.
                           ${log-lib} )

    代码

    #include <SLES/OpenSLES.h>
    #include <SLES/OpenSLES_Android.h>

    二.示例代码

    #include <jni.h>
    #include <string>
    #include <android/log.h>
    #include <SLES/OpenSLES.h>
    #include <SLES/OpenSLES_Android.h>
    
    
    #define LOG_TAG "xp.chen"
    #ifdef LOG_TAG
        #define LOGI(...)  __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
        #define LOGE(...)  __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)
        #define LOGV(...)  __android_log_print(ANDROID_LOG_VERBOSE,LOG_TAG,__VA_ARGS__)
    #else
        #define LOGI(...)
        #define LOGE(...)
        #define LOGV(...)
    #endif
    
    
    static SLObjectItf engineSL = NULL;
    SLEngineItf CreateSL()
    {
        SLresult ret;
        SLEngineItf en;
        // 创建引擎
        ret = slCreateEngine(&engineSL, 0, 0, 0, 0, 0);
        if (ret != SL_RESULT_SUCCESS) {
            LOGE("slCreateEngine() failed ");
            return NULL;
        }
        // 实例化
        ret = (*engineSL)->Realize(engineSL, SL_BOOLEAN_FALSE);
        if (ret != SL_RESULT_SUCCESS) {
            LOGE("Realize failed");
            return NULL;
        }
        // 获取接口
        ret = (*engineSL)->GetInterface(engineSL, SL_IID_ENGINE, &en);
        if (ret != SL_RESULT_SUCCESS) {
            LOGE("GetInterface failed");
            return NULL;
        }
        return en;
    }
    
    
    extern "C" JNIEXPORT jstring
    JNICALL
    Java_com_yuneec_yongdaimi_testopensl_MainActivity_stringFromJNI(
            JNIEnv *env,
            jobject /* this */) {
        std::string hello = "Hello from C++";
        // 创建引擎
        SLEngineItf eng = CreateSL();
        if (eng) {
            LOGI("CreateSL success");
        } else {
            LOGE("CreateSL failed");
        }
        // 创建混音器
        SLObjectItf mix = NULL;
        SLresult ret = 0;
        ret = (*eng)->CreateOutputMix(eng, &mix, 0, 0, 0);
        if (ret != SL_RESULT_SUCCESS) {
            LOGE("CreateOutputMix failed");
        }
        ret = (*mix)->Realize(mix, SL_BOOLEAN_FALSE);
        if (ret != SL_BOOLEAN_FALSE) {
            LOGE("(*mix)->Realize failed!");
        }
        SLDataLocator_OutputMix outmix = {SL_DATALOCATOR_OUTPUTMIX, mix};
        SLDataSink audioSink = {&outmix, 0};
    
        return env->NewStringUTF(hello.c_str());
    }
  • 相关阅读:
    oozie的简易安装
    flume监控一个linux指定的一个文件夹的文件信息
    FastDFS图片服务器java后台的简单调用
    java对象与json互转
    final关键字详解
    文件压缩和解压缩工具类
    web上下文监听器ServletContextListener
    基本类型的相互转换
    用java代码在创建hbase表时指定region的范围
    String类的一些常用操作方法
  • 原文地址:https://www.cnblogs.com/yongdaimi/p/9836357.html
Copyright © 2011-2022 走看看