`

jni参数的转换(3)

 
阅读更多
1.
java中:
private native FFMpegAVFormatContext native_av_setInputFile(String filePath) throws IOException;
JNI中:
static jobject FFMpeg_setInputFile(JNIEnv *env, jobject obj, jstring filePath) {
const char *_filePath = (*env)->GetStringUTFChars(env, filePath, NULL);
AVFormatContext *fileContext = opt_input_file(_filePath);
if(fileContext == NULL) {
jniThrowException(env,
  "java/io/IOException",
                  "Can't create input file");
}
jobject *file = AVFormatContext_create(env, fileContext);
jobject *inFormat = AVInputFormat_create(env, fileContext->iformat);
jfieldID f = (*env)->GetFieldID(env,
AVFormatContext_getClass(env),
"mInFormat",
AVInputFormat_getClassSignature());
(*env)->SetObjectField(env, file, f, inFormat);
return file;
}
2.
java中:
  private native FFMpegAVFormatContext native_av_setOutputFile(String filePath) throws IOException;
JNI中:
static jobject FFMpeg_setOutputFile(JNIEnv *env, jobject obj, jstring filePath) {
const char *_filePath = (*env)->GetStringUTFChars(env, filePath, NULL);
AVFormatContext *fileContext = opt_output_file(_filePath);
if(fileContext == NULL) {
jniThrowException(env,
  "java/io/IOException",
                  "Can't create output file");
}
return AVFormatContext_create(env, fileContext);
}
3.private native void native_av_parse_options(String[] args) throws RuntimeException;
static void FFMpeg_parseOptions(JNIEnv *env, jobject obj, jobjectArray args) {
int i = 0;
int argc = 0;
char **argv = NULL;

if (args != NULL) {
argc = (*env)->GetArrayLength(env, args);
argv = (char **) malloc(sizeof(char *) * argc);

for(i=0;i<argc;i++)
{
jstring str = (jstring)(*env)->GetObjectArrayElement(env, args, i);
argv[i] = (char *)(*env)->GetStringUTFChars(env, str, NULL);  
}
}

    /* parse options */
    parse_options(argc, argv, options, opt_output_file);

    if(nb_output_files <= 0 && nb_input_files == 0) {
        jniThrowException(env,
                          "java/lang/RuntimeException",
                          "Use -h to get full help or, even better, run 'man ffmpeg");
    }

    /* file converter / grab */
    if (nb_output_files <= 0) {
        jniThrowException(env,
                          "java/lang/RuntimeException",
                          "At least one output file must be specified");
    }

    if (nb_input_files == 0) {
        jniThrowException(env,
                          "java/lang/RuntimeException",
                          "At least one input file must be specified");
    }
}
4.
分享到:
评论

相关推荐

    jni参数详解

    今天,我们将讨论JNI参数的详解,了解JNI参数的含义和使用方法。 一、JNI参数的基本概念 JNI参数是native代码中使用的参数类型,它们是Java类型到C/C++类型的映射关系。JNI参数可以分为基本类型和复杂类型两种。...

    jni数据类型转换

    #### String参数的转换 在JNI环境中,处理Java的`String`类型尤其需要注意,因为其在C/C++中表现为`char*`形式。 1. **从Java到C/C++**: 当Java传递一个`String`至C/C++时,首先会转换为`jstring`。若需进一步...

    通过Jcom调用JNI将Office文档转换Pdf

    本主题聚焦于使用Jcom调用JNI技术来实现这一转换。以下是对这个过程的详细解析: 首先,理解几个核心概念: 1. **Jcom**:Jcom是一款Java组件,它提供了对COM组件(Component Object Model)的访问能力。COM是微软...

    android NDK 自动生成jni头文件

    其中,[options] 是可选参数,&lt;classes&gt; 是要转换的 Java 类文件的名称。 javah 命令提供了多种选项,包括: * -help:显示帮助信息 * -classpath &lt;path&gt;:指定类文件的搜索路径 * -bootclasspath &lt;path&gt;:指定...

    JNI 调 C C++ 参数String

    3. JNI函数的命名遵循特定的约定,即 `Java_&lt;包名下划线&gt;_类名_方法名`,其中下划线代表点。 总结,JNI是Java与本地代码交互的重要工具,尤其适用于需要高性能计算或者利用已有的C/C++库的场景。在处理字符串时,要...

    Jni中C++和Java的参数传递

    在C++中,我们可以使用`jobject`或`jclass`来表示Java对象,通过JNI函数进行参数转换。 传递`DiskInfo`结构体到Java中,我们首先需要在Java中定义对应的类,然后在C++中实现本地方法来处理这些参数。使用`javah`...

    JNI中C和Java参数传递详细例子

    ### JNI中C和Java参数传递详解 #### 一、引言 Java Native Interface (JNI) 是Java平台标准的一部分,用于让Java代码与其他语言写的代码进行交互。本文将深入探讨在JNI环境中,C/C++和Java之间如何进行参数传递,...

    开发JNI程序的工具集

    这个文件会详细列出所有可用的JNI函数,包括它们的参数、返回值以及用途。开发者可以通过查阅这个文件,了解如何声明和使用本地方法,如何初始化Java虚拟机(JVM),如何调用Java对象的方法和访问其字段,以及如何...

    Android调用Jni返回自定义对象

    3. 类型转换:在JNI中,Java对象和本地类型之间需要进行转换,如`jstring`到`std::string`,`jobject`到特定的Java对象等。 4. 性能:频繁的JNI调用会影响性能,尽量减少不必要的跨语言通信。 通过以上步骤,你就...

    JNI

    首先,本地方法的参数和返回值都需要转换为JNI数据类型,如`jint`, `jobject`等。其次,线程安全是个挑战,因为Java的多线程机制和C/C++的多线程处理方式不同,需要谨慎管理线程同步。最后,性能优化是另一个重要...

    C++库封装JNI接口-实现java调用c++

    在跨平台的软件开发中,有时我们需要...这个过程需要理解Java和C++之间的数据类型转换,以及如何在两种语言之间传递参数和返回值。熟练掌握JNI可以极大地扩展Java应用的功能,尤其是在需要高性能计算或利用硬件特性时。

    jniDemo简单版

    3. C/C++本地方法的编写,包括JNI函数原型和`JNIEnv`指针的使用。 4. 使用NDK编译C/C++代码生成.so文件。 5. Java与C/C++之间的数据类型转换和方法调用流程。 这个简单的示例是学习JNI开发的一个良好起点,可以帮助...

    JNI完全技术手册 带完整书签

    Chap7:Jni中C++和Java的参数传递... 33 Chap8:如何将java传递过来的jbyteArray转换成C/C++中的BYTE数组... 47 Chap5:使用JNI技术实现java程序调用第三方dll(c/c++)文件的功能... 47 Chap9:如何编写jni方法(转载...

    jni.rar_3GPP AMR jni_amr_ilbc_jni_jni amr

    1. Java源代码:用于调用JNI接口的Java类,可能包含了设置参数、发起转换请求等操作。 2. JNI接口定义:头文件(.h)和实现文件(.c或.cpp),定义了与Java层交互的函数,如初始化、编码、解码等。 3. 静态或动态库...

    jni操作arraylist对象

    3. **创建int类型的Java对象**:由于ArrayList的`add`方法期望一个Object参数,我们需要将int值转换为Integer对象。为此,我们需要使用`env-&gt;NewObject`方法创建一个Integer对象。 ```c++ jclass integerClass = ...

    jni实现图片格式转换实例

    我们首先使用JNI的`GetStringUTFChars`获取Java字符串的UTF-8表示,然后使用OpenCV的`imread`函数读取图片,如果图片读取成功,再用`imwrite`写入转换后的图片,这里以转换为PNG为例,通过设置`IMWRITE_PNG_...

    JNI接口开发

    Java方法调用本地方法时,需要将Java中的参数转换为JNI支持的类型: - **基础类型**:如int转换为`jint`,long转换为`jlong`等。 - **String**:转换为`jstring`。 - **其他类型**:包括数组和其他Java对象,统一...

    jni.h文件,完美适配ida软件,直接就可以使用。

    4. **数据类型转换**:JNI提供了一系列函数,如`jobjectToHandle`、`GetXXXField`和`SetXXXField`,用于在Java对象和本地数据类型之间进行转换。 5. **异常处理**:JNI允许本地代码抛出和捕获Java异常,通过`Throw`...

    JNI完全技术手册

    4. **处理数据类型**:JNI支持Java和C/C++之间的数据类型转换。例如,Java的`int`在JNI中对应`jint`,`String`对应`jstring`,对象则对应`jobject`。开发者需要了解这些映射关系,以便正确地传递参数和返回值。 5. ...

    android jni 屏幕截图 NativeScreenCapture

    JNI包括一系列的函数调用,如`JNIEnv`指针,用于在Java和本地代码之间传递参数、调用Java方法等。 2. **屏幕截图原理**:Android系统的屏幕截图通常涉及获取显示服务器的缓冲区数据。在JNI中,我们需要通过系统服务...

Global site tag (gtag.js) - Google Analytics