LinuxJni / HelloWorld / gdb的使用/图像格式

来源:互联网 发布:软件创新设计方案 编辑:程序博客网 时间:2024/05/01 01:02



  JNI接口函数命名方式:
  1.类型签名:Z/B/C/S/I/J/F/D;
  2.重载函数的JNI接口函数命名方式:应添加上类型签名以作为同名函数之间的区别.
  JNI函数与API:
  1.jstring转换为C风格字符串:char* test=(char*)(*env)->GetStringUTFChars(env,jstring,NULL); 使用完毕后,应调用:(*env)->ReleaseStringUTFChars(env,jstring,test);释放资源。
  2.C风格字符串转换为jstring:char charStr[50];jstring jstr;jstr=env->NewStringUTF(charStr);
  3.C语言中获取的一段char*的buffer传递给Java:在jni中new一个byte数组,然后使用(*env)->SetByteArrayRegion(env,bytearray,0,len,buffer);操作将buffer拷贝到数组中;主要是针对buffer中存在“\0”的情况,如果以C风格字符串的方式读入,就会损失“\0”之后的字符;
  4.数组操作,JNI函数:GetArrayLength(); NewObjectArray(); GetObjectArrayElement();SetObjectArrayElement(); GetObjectArrayRegion();SetObjectArrayRegion(); ReleaseObjectArrayRegion();

  Linux下Jni调用:
  Jni中C/C++差别,JNIEnv类的使用,C中使用jsize len=(*env)->GetArrayLength(env,array); C++中使用 jsize len=env->GetArrayLength(env,array);
  编译Sample1.c文件,$gcc -fPIC -D_REENTRANT -I/usr/lib/jvm/java-6-openjdk-amd64/include -I/usr/lib/jvm/java-6-openjdk-amd64/include/linux -c Sample1.c; #生成Sampel.o文件
  编译用到了jdk include中jni.h,include/linux中jni_md.h两个头文件:/usr/lib/java/include 是jin.h路径;  /usr/lib/java/include/linux 是jni_md.h路径;
  生成.so:gcc -shared Sample1.o -o libSample1.so;//生成libSample1.so
  $export LD_LIBRARY_PATH=/home/intelgb/workspace/Demo/LinuxJni  #配置环境变量,只在当前shall下有效.
  $java Sample1; #运行sample.

  Linux下编译helloworld:
  $gcc hello.c -o hello; #编译为hello文件; $./hello; #执行文件;
  $g++ Hello.cpp -o hello #编译C++程序;
  windows,静态库.lib为后缀,共享库.dll为后缀;linux,静态库.a为后缀,共享库.so为后缀;


  gdb的使用:
  gcc and g++分别是GNU的c & c++编译器;
  $gcc –g tst.c –o tst #编译tst.c
  $gdb tst #启动GDB;
  (gdb) l  #l命令相当于list,从第一行开始例出原码;
  (gdb) break 16  #设置断点,在源程序第16行处;
  (gdb) break func #设置断点,在函数func()入口处;
  (gdb) info break #查看断点信息;
  (gdb) r #运行程序,run命令简写;
  (gdb) n #单条语句执行,next命令简写;
  (gdb) c #继续运行程序,continue命令简写;
  (gdb) p i #打印变量i的值,print命令简写;
  (gdb) bt #查看函数堆栈;
  (gdb) finish #退出函数;
  (gdb) q  #退出gdb;




  多媒体:
  Android froyo版本多媒体引擎做了变动,新添加了stagefright框架,并且默认情况android选择stagefright,并没有完全抛弃opencore,主要是做了一个OMX层,仅仅是对opencore的omx-component部分做了引用;
  stagefright是在MediaPlayerService这一层加入的,和opencore是并列的;Stagefright在Android中是以shared library的形式存在libstagefright.so;
  stagefright使用event来进行驱动,event调度器和event运行在同一个线程中,播放器向队列插入event来驱动整个解码流程;OMX IL=OpenMAX IL;OpenMAX是一个多媒体应用程序的标准;由NVIDIA公司和Khronos™在2006年推出;
  .png,试图替代GIF和TIFF文件格式;可移植网络图形格式Portable Network Graphic Format;位图文件bitmap file存储格式;灰度图像的深度可多到16位,存储彩色图像时,彩色图像的深度可多到48位,并且还可存储多到16位的α通道数据;
  .gif,Graphics Interchange Format原义是“图像互换格式”;一种基于LZW算法的连续色调的无损压缩格式,其压缩率一般在50%左右;
  .bmp,Bitmap,位图文件;位图是Windows标准格式图形文件,它将图像定义为由点(像素)组成,每个点可以由多种色彩表示;
  RGB,位图颜色的一种编码方法,用红/绿/蓝三原色的光学强度来表示一种颜色;最常见的位图编码方法,可以直接用于屏幕显示;
  CMYK,位图颜色的一种编码方法,用青/品红/黄/黑四种颜料含量来表示一种颜色;常用的位图编码方法之一,可以直接用于彩色印刷;
  YUV,是被欧洲电视系统所采用的一种颜色编码方法(属于PAL),是PAL和SECAM模拟彩色电视制式采用的颜色空间;YUV色彩模型来源于RGB模型,该模型的特点是将亮度和色度分离开,从而适合于图像处理领域;
   YUV格式通常有两大类,打包packed格式和平面planar格式;YUV色彩空间的重要性是它的亮度信号Y和色度信号U/V是分离的;如果只有Y信号分量而没有U/V分量,那么这样表示的图像就是黑白灰度图像;
  目前世界上彩色电视主要有三种制式,即NTSC/PAL和SECAM制式,三种制式目前尚无法统一;我国采用的是PAL-D制式;
  Bit-map就是用一个bit位来标记某个元素对应的Value,而Key即是该元素;由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省;例如,0-7内的5个元素(4,7,2,5,3)排序(这里假设这些元素没有重复);
 


0 0
原创粉丝点击