2012-04-24 23 views
1

我正在将一些较大的视频编解码器移植到Renderscript中。我刚刚设法移植libx264并将其编码为原始H.264流。我通过使用CIL合并库并使全局变量为静态,以及移植Android自己的libc字符串和一些stdio函数(合并)以及使用预分配缓冲区的堆分配函数来实现这一点。Renderscript中的变量参数列表

现在我想要移植libvpx。这个库使用可变参数比libx264更集中的功能(基本上,我需要在libx264中注释的唯一部分是日志记录,剩下的部分只是配置正确,还有一些宏定义来替换它们)。

所以我的问题是任何人有任何提示如何在Renderscript中使用静态函数的可变参数列表? Google声明Renderscript符合C99规范,因此必须以某种方式进行。如果任何人有这样的黑客建议让我知道,如果它目前不支持。

/哈拉尔

回答

0

在你的SDK目录,你可以发现,头STDARG.H其实包含在./android-sdks/platform-tools/renderscript/clang-include/stdarg.h。如果你添加了

#include "stdarg.h" 

你跟普通的include语句一样,编译器似乎明白你在说什么。但我没有实际的方法来测试这个超越编译。

[编辑]我刚收到一个“llvm-rs-cc.exe已停止工作”的消息在windows中。来自控制台的堆栈转储表明,在解析我添加的示例函数以查看varargs是否可以编译时失败。这是堆栈转储。编译器每次崩溃。我的猜测是它在理论上受到支持,但编译器无法正确处理它。

Stack dump: 
0. engine.rs:882:32: current parser token ';' 
1. engine.rs:876:1: parsing function body 'average' 
2. engine.rs:876:1: in compound statement ('{}') 

删除功能,但在离开包头包括后,下面使它到控制台(不崩溃):

C:\android-sdks\platform-tools\renderscript\clang-include\stdarg.h:30:9: error: unknown type name '__builtin_va_list' 
C:\android-sdks\platform-tools\renderscript\clang-include\stdarg.h:48:9: error: unknown type name '__builtin_va_list' 
+0

谢谢,这是关于据我得到的也。似乎他们已经忘记处理__builtin_va_ *函数并输入* = {start,end,arg,list}。我知道这样做并不容易,因为它非常依赖目标。例如,__builtin_va_start将“...”之前的变量作为输入。如果这是在堆栈上,并且我们知道堆栈增长的方向,则可以使用它来获取指向第一个arg的指针,但这非常符合目标和编译器。通常一些参数通过寄存器传递。但我认为LLVM IR/bitcode有关于此的一些信息。 – 2012-04-24 15:23:20

+0

是的。 RenderScript仍处于起步阶段。正如文档所指出的那样,预期的目标是让它在许多不同的处理器类型上运行,而这些处理器类型与目标相关的东西可能是一件非常困难的事情。谷歌指出,某些功能尚未包含在内,因为它阻止了他们保证代码在所有目标上运行。也许随着环境的增长,他们会增加这个功能,但至少现在看来,这是不可能的。 – Jared 2012-04-24 15:28:24