組み込みの RenderScript スクリプトを使用して NV21 を RGBA8888 に変換しようとしていますが、Allocation オブジェクトのバッファーのサイズを確認しても、次のエラーが発生します。
Fatal signal 11 (SIGSEGV) at 0x4eb30000 (code=1), thread 18458 (epthsyncexample)
私のコード:
rs = RenderScript.create(context);
yuvToRgbIntrinsic = ScriptIntrinsicYuvToRGB.create(rs, Element.U8_4(rs));
Type.Builder yuvType = new Type.Builder(rs, Element.U8_4(rs))
.setX(1280).setY(720)
.setYuvFormat(android.graphics.ImageFormat.NV21);
Allocation in = Allocation.createTyped(rs, yuvType.create(), Allocation.USAGE_SCRIPT);
in.copyFrom(YUVArray); //<<<<<<<<<<<<<<<<<<<<<<<<<<
Type.Builder rgbaType = new Type.Builder(rs, Element.U8_4(rs))
.setX(W).setY(H);
Allocation out = Allocation.createTyped(rs, rgbaType.create(), Allocation.USAGE_SCRIPT);
byte[] RGBOut = new byte[W * H * 4];
//
yuvToRgbIntrinsic.setInput(in);
yuvToRgbIntrinsic.forEach(out);
out.copyTo(RGBOut);
return RGBOut;
エラー自体はわかりやすいのですが、なぜ起こるのかわかりません。NV21 イメージを表すために使用するバイト配列のサイズは 1382400 バイトです。割り当てバッファは 1280*720*1.5 = 1382400 バイトです。マークされたコード行がセグメンテーション違反を引き起こした理由がわかりません。
ヒントはありますか?
thisやthisのような投稿をいくつか読みましたが、それらはまったく異なる問題に関するものです。それと関係があるかもしれない唯一の質問はこれです。この制限についてどこで確認できますか?