2012-04-24 39 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