に構造を追加私はこのコードを使用して薄い空気のうちCMVideoFormatDescriptionRef
を作成しています:NSDictionaryの
CMVideoDimensions dimensions = {
.width = width,
.height = height
};
CMVideoFormatDescriptionRef videoInfo = NULL;
NSDictionary *options2 = [NSDictionary dictionaryWithObjectsAndKeys:
@(YES), kCVPixelBufferCGImageCompatibilityKey,
@(YES), kCVPixelBufferCGBitmapContextCompatibilityKey,
dimensions, kCVImageBufferDisplayDimensionsKey,
nil];
CFDictionaryRef dictOptionsRef = (__bridge CFDictionaryRef)options2;
CMFormatDescriptionCreate(kCFAllocatorDefault, kCMMediaType_Video, 'brga', dictOptionsRef, &videoInfo);
IはCMFormatDescriptionCreate
にその辞書を渡す必要があります。
問題は、これは、その辞書にdimensions
を追加するための正しい方法ではありません
dimensions, kCVImageBufferDisplayDimensionsKey,
最後の行です。それはアプリをクラッシュさせます。
私はこれを使用してNSValue
に全体をラップしようとしている:それは理論、ノークラッシュで動作しますが、videoInfo
が正しく作成されていない
NSValue *miValue = [NSValue value: &dimensions
withObjCType:@encode(CMVideoDimensions)];
(OSStatus -12731)を。この最後の行を辞書から削除すると、videoInfo
が作成されますが、0x0ピクセルまたはcodecType
と想定される次元の定義はありません。下記参照:
<CMVideoFormatDescription 0x17044c270 [0x1b0330bb8]> {
mediaType:'vide'
mediaSubType:'brga'
mediaSpecific: {
codecType: 0 dimensions: 0 x 0 <--HERE!!!
}
extensions: {<CFBasicHash 0x17086dcc0 [0x1b0330bb8]>{type = immutable dict, count = 4,
entries =>
0 : <CFString 0x1aa9427c8 [0x1b0330bb8]>{contents = "CVImageBufferYCbCrMatrix"} = <CFString 0x1aa942808 [0x1b0330bb8]>{contents = "ITU_R_601_4"}
3 : <CFString 0x1aa942c68 [0x1b0330bb8]>{contents = "CGImageCompatibility"} = <CFBoolean 0x1b0331110 [0x1b0330bb8]>{value = true}
5 : <CFString 0x1aa9428a8 [0x1b0330bb8]>{contents = "CVImageBufferColorPrimaries"} = <CFString 0x1aa9427e8 [0x1b0330bb8]>{contents = "ITU_R_709_2"}
6 : <CFString 0x1aa942c48 [0x1b0330bb8]>{contents = "CGBitmapContextCompatibility"} = <CFBoolean 0x1b0331110 [0x1b0330bb8]>{value = true}
}
}
}
CMVideoFormatDescriptionRef
正規CMSampleBufferRef
示すcodecType
BGRA
として、フレームの定期的な大きさから、1920×1080、例えば。
どうすればよいですか?
にそれを変更しています!ありがとう! – SpaceDog