iphone上直接读取YUV数据测试算法程序

搞视频编码算法的同学,大多数都是C语言高手,但对ios,android的编程语言比如object-c,java,ndk等却一窍不通。让算法的同学去学各个平台的细节,又很浪费时间和精力。
另外,加载程序到手机上,读取yuv数据进行编码,获取编码后的码流都不方便。以前android还可以打开调试模式的时候,还可以直接命令行调试,现在android手机不再支持调试,如何在手机上调试算法就成为了一个难题。
本文介绍,如何在iPhone上开发C语言算法测试程序,直接读取yuv,输出视频编码或者其他算法处理后的数据。同时介绍如何利用iPhone的profile工具,对算法进行优化。

  1. 用c语言编写可以在各个平台的运行的算法
  2. 用c语言编写在windows或Linux或mac上运行的测试程序
  3. 增加iPhone上对文件打开关闭的特殊处理:
    要点即:
    a. 编辑程序的info.plist文件,打开app的文件共享功能(Application supports iTunes file share),这样可以通过itune把需要的yuv文件上传到iPhone上。
    b. 上传的yuv文件,通过以下代码,在程序里面找到文件路径,并打开:
#ifdef __APPLE__
char* pFolder = "/Documents/";
CFURLRef homeDir =CFCopyHomeDirectoryURL();
char inputPath[200];
char outputPath[200];
if (!CFURLGetFileSystemRepresentation(homeDir, TRUE, (UInt8 *)inputPath, PATH_MAX))
{
	printf("CFURLGetFileSystemRepresentation error\n");
}
if (!CFURLGetFileSystemRepresentation(homeDir, TRUE, (UInt8 *)outputPath, PATH_MAX))
{
	printf("CFURLGetFileSystemRepresentation error\n");
}
CFRelease(homeDir);

memcpy(inputPath + strlen(inputPath), pFolder, strlen(pFolder) + 1);
memcpy(outputPath + strlen(outputPath), pFolder, strlen(pFolder) + 1);
memcpy(inputPath + strlen(inputPath), argv[1], strlen(argv[1]) + 1);
memcpy(outputPath + strlen(outputPath), argv[2], strlen(argv[2]) + 1);
printf("input file: %s, output file %s\n", inputPath, outputPath);
inputImageFile      = fopen (inputPath, "rb");
outputBitstreamFile = fopen (outputPath, "wb");
#else
inputImageFile      = fopen (argv[1], "rb");
outputBitstreamFile = fopen (argv[2], "wb");
#endif

如此,这般,后面的测试代码就可以和其他平台一样,用fread,fwrite直接对文件进行操作了。
c. 视频编码,图像处理后的数据文件,也可以用itune直接拖到pc上。

飞~

补充,如果链接的时候报link CFURLGetFileSystemRepresentation等error,在项目build phase中选link binary with libraries,然后把CoreFoundation.Framework加入。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值