1

いくつかの大きなビデオ コーデックを Renderscript に移植しています。libx264 を移植し、生の H.264 ストリームにエンコードしました。これは、CIL を使用してライブラリをマージし、グローバルを静的にし、Android 独自の libc 文字列といくつかの stdio 関数 (マージ) と、事前に割り当てられたバッファーを使用するヒープ割り当て関数を移植することで実現しました。

libvpx を移植したいと思います。このライブラリは、libx264 よりも多くの中心的な関数に可変引数を使用します (基本的に、libx264 でコメントアウトする必要があったのは、残りが正しく構成されていることと、いくつかのマクロ定義を置き換えるためのログ記録だけでした)。

私の質問は、Renderscript で静的関数に可変引数リストを使用する方法について何かヒントがあれば教えてください。Google は、Renderscript は C99 に準拠しているため、何らかの方法で可能であると述べています。これに対するハックの提案があれば、現在サポートされていないかどうか教えてください。

/ハラルド

4

1 に答える 1

0

SDKディレクトリで、ヘッダーstdarg.hが実際には./android-sdks/platform-tools/renderscript/clang-include/stdarg.hに含まれていることがわかります。追加する場合

#include "stdarg.h" 

通常のincludeステートメントでは、コンパイラーはあなたが話していることを理解しているようです。ただし、コンパイル以外にこれをテストする実用的な方法はありません。

[編集]Windowsで「llvm-rs-cc.exeが動作を停止しました」というメッセージが表示されました。コンソールからのスタックダンプは、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'
于 2012-04-24T14:43:59.063 に答える