実際に画面に表示しているのは、SurfaceViewでしょうか。それともImageView
でしょうか。
コードが一部しかないのでポイントを外しているかもしれませんが、、、
ImageViewは、Viewシステムの管理化にあり、別スレッドから操作できません。
従って、重い変換・合成処理を別スレッドでやっている場合は、そのまま
ImageViewに表示しようとしても、反映されません。
もし別スレッドからImageViewにアクセスしているのであれば、その部分の処
理をHandlerを経由するか、ThreadでなくAsyncTaskを使っては如何でしょうか。
当該処理部分を、別スレッドにしていない場合ですが、decodeYUV420SPの処理
には時間がかかるので、メインスレッド内で実行した場合、画面が更新されない
ように見える可能性があります。
この場合も、AsyncTaskなどで非同期処理にすることをお勧めします。
また、プレビューフレームをリアルタイムで合成するのは性能的に難しいの
で、適当に中抜きをした方がよいと考えます。
最後に、Exceptionは、そのままでなく、個別のExceptionをキャッチすること
をお勧めします。個別のExceptionをキャッチせず、また、Exceptionをcatchし
た時に、なんの出力も行わないと、エラーが起こっていてもその事が判らず、開
発の妨げになります。
> int y = (0xff& ((int) date[yp])) - 16;
> if (y< 0) y = 0;
> if ((i& 1) == 0) {
> v = (0xff& date[uvp++]) - 128;
> u = (0xff& date[uvp++]) - 128;
> }
>
> int y1192 = 1192 * y;
> int r = (y1192 + 1634 * v);
> int g = (y1192 - 833 * v - 400 * u);
> int b = (y1192 + 2066 * u);
>
> if (r< 0) r = 0; else if (r> 262143) r = 262143;
> if (g< 0) g = 0; else if (g> 262143) g = 262143;
> if (b< 0) b = 0; else if (b> 262143) b = 262143;
>
> rgb[yp] = 0xff000000 | ((r<< 6)& 0xff0000) | ((g>>
> 2)& 0xff00) | ((b>> 10)& 0xff);
--
Keiji,
ml_an...@c-lis.co.jp