【转】HM移植
来源:互联网 发布:mac登陆密码怎么取消 编辑:程序博客网 时间:2024/04/29 16:09
HM的编码全部采用C/C++编写而成,要移植到Android平台上,如果完全重写整个解码器,时间是相当不够的。
好在有了Android NDK,可以轻松地利用已公开的源代码进行修改。
Android NDK使用指南可以参考我的这篇文章:http://blog.csdn.net/luofl1992/article/details/8663171
另外这篇文章也值得一看:http://www.cnblogs.com/hibraincol/archive/2011/05/30/2063847.html
一、
正确编译运行通过之后,会发现解码开始就造成程序崩溃了。
这是在TComRom.cpp中有一处代码不够严谨造成,
在394行左右有如下的语句
- // 其中 g_aucConvertToBit[ uiNumBlkSlide ] 是类型为Char的变量
- // 见 TComLib/TypeDef.h 有 typedef char Char;
- // 其值在初始化时为 -1
- UInt log2Blk = g_aucConvertToBit[ uiNumBlkSlide ] + 1;
- // 我们应该做的是把log2Blk类型修改为UChar,即
- UChar log2Blk = g_aucConvertToBit[ uiNumBlkSlide ] + 1;
至于为什么原来会出错,通过使用logcat工具输出调试信息可以发现某些时候log2Blk的值突然变成了256,
不是 -1 + 1= 0 吗?
这是因为在ARM下,char编译时默认为unsigned char,那么实际上
- g_aucConvertToBit[ uiNumBlkSlide ] = 255
最终导致程序崩溃。
当然程序中的类似问题不止这一处,要找到所有可能出错的地方一个个修改吗?
这得在原来的代码中增加多少LOG信息,所以我干脆换了另外一种方式。
如何简单解决呢?
我们看到了前面的有个TypeDef.h的头文件,修改一下这个typedef,即
- typedef signed char Char;
完成这个修改之后重新编译,会出很多错误,一般都是用字符串的地方也用了Char类型,
直接都使用强制类型转换进行修改把。
改了十来处的样子,Lib库就可以正常通过编译了。运行无错误。
如果要使用TApp的内容,当然也是差不多的问题,编译的时候找到出错的地方,进行强制类型转换,大概十多处。
建议大家的方法时除非明显的字符串变量直接改成char *类型或者 char []类型,
类的成员或函数成员尽量不要修改类型。
尽量使函数及接口维持原样,以避免引入更多的错误。
二、使用logcat调试
可以在C/C++代码中增加,也可以在JAVA的代码中增加。
在JAVA中需要这样使用
- #include <android/log.h>
- #define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "NcHevcPlayerActivity", __VA_ARGS__))
- #define LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR, "NcHevcPlayerActivity", __VA_ARGS__))
- #define LOGI LOGW
- #define LOG LOGI
- // 。。。。。。
- LOGW("x = %d", x); // ,....
原文:http://blog.csdn.net/luofl1992/article/details/8736149
- 【转】HM移植
- 移植HM(HEVC测试软件)到Android平台(ARM)
- bmp转YUV RGB转YUV HM学习
- 码控 HM
- HM学习心得
- HM地址
- HM过程
- HM intra
- H265 HM Overview
- HM代码粗略介绍
- HM代码粗略介绍
- HM简单介绍
- HM框架简要分析
- HM代码粗略介绍
- HM的代码流程
- HM代码使用
- HM-xCompressCU函数
- [HEVC] HM软件使用
- WinCE通知API的解析及在控制程序中的应用
- Android传感器简介
- 配置cocos2d-x-3.0alpha1 VS2012简单方式
- 黑马程序员_代理类知识总结
- java 计算两个日期的相隔 年月日
- 【转】HM移植
- OpenGL ES着色器语言之变量和数据类型
- Oracle 搜集统计信息
- 在函数的第一眼
- 给ubuntu 12.04 添加显示桌面按钮的方法
- OpenGL ES着色器语言之变量和数据类型(二)
- 编写一个程序,循环从键盘接收一批学生的某门课的成绩,并依次保存在数组score的相应元素中,直到输入的成绩为999时结束。
- 10、UISlider-OC+UI
- OpenGL ES着色器语言之变量和数据类型(操作数)