AVAssetWriter
の助けを借りて、OpenGLでレンダリングしたイメージをムービーファイルに記録したいとします。問題は、OpenGLフレームバッファからピクセルにアクセスする唯一の方法は、iOSでRGBAピクセル形式のみをサポートするglReadPixelsを使用することです。しかし、AVAssetWriter
はこの形式をサポートしていません。ここでは、ARGBまたはBGRAを使用できます。アルファ値を無視することができるように、私はARGBにRGBAを変換するための最速の方法は、glReadPixelsに1バイトずつシフトバッファを与えることだろうと、結論に達しました:RGBAをARGBに変換する(glReadPixels - > AVAssetWriter)
UInt8 *buffer = malloc(width*height*4+1);
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer+1);
問題は、そのglReadPixels
ですコールはEXC_BAD_ACCESS
クラッシュにつながります。バッファを1バイトシフトさせなければ、ビデオファイルに間違った色が付いていても問題はありません。ここで何が問題なの?
があなたの代わりにサイズ+ 4を割り当てることができません、呼び出し、その後、AVAssetWriterに+ 3をバッファglReadPixelsにバッファ+ 4を送りますか?そうすれば、iOS上で必要なGLコールを整列させることができます。 –