OpenGLフレーム用のCMSampleBufferを取得する必要があります。私はこれを使用しています:AVAssestWritterを使用したOpenGLのCMSampleBuffer
int s = 1;
UIScreen * screen = [UIScreen mainScreen];
if ([screen respondsToSelector:@selector(scale)]){
s = (int)[screen scale];
}
const int w = viewController.view.frame.size.width/2;
const int h = viewController.view.frame.size.height/2;
const NSInteger my_data_length = 4*w*h*s*s;
// allocate array and read pixels into it.
GLubyte * buffer = malloc(my_data_length);
glReadPixels(0, 0, w*s, h*s, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
// gl renders "upside down" so swap top to bottom into new array.
GLubyte * buffer2 = malloc(my_data_length);
for(int y = 0; y < h*s; y++){
memcpy(buffer2 + (h*s - 1 - y)*4*w*s, buffer + (4*y*w*s), 4*w*s);
}
free(buffer);
CMBlockBufferRef * cm_block_buffer_ref;
CMBlockBufferAccessDataBytes(cm_block_buffer_ref,0,my_data_length,buffer2,*buffer2);
CMSampleBufferRef * cm_buffer;
CMSampleBufferCreate (kCFAllocatorDefault,cm_block_buffer_ref,true,NULL,NULL,NULL,1,1,NULL,0,NULL,cm_buffer);
CMSampleBufferCreateのEXEC_BAD_ACCESSを取得します。
ご協力いただきありがとうございます。
ありがとうございました。 cm_block_buffer_refにOpenGLデータを含めるにはどうすればよいですか? –
@Matthew - CVPixelBufferを作成し、CMSampleBufferCreate()の代わりに '' CMSampleBufferCreateForImageBuffer() 'を使う必要があると思います。実際、AVAssetWriterInputPixelBufferAdaptorを使用するほうが良いでしょう。http://developer.apple.com/library/ios/#documentation/AVFoundation/Reference/AVAssetWriterInputPixelBufferAdaptor_Class/Reference/Reference.html –
ああ、私は私自身。私はそれを動作させることができた(少し遅いが、次にglReadPixelsがあるはずである)。でもありがとう。 –