Я пытался развернуть структуру CoreMediaIO для захвата Ma c встроенный поток камеры:
OSStatus result;
UInt32 dataSize;
CMIOObjectPropertyAddress opa = {kCMIOObjectPropertyClass,
kCMIOObjectPropertyScopeGlobal, 0};
opa.mSelector = kCMIOStreamPropertyDirection;
UInt32 direction;
result = CMIOObjectGetPropertyData(objectID, &opa, 0, NULL, sizeof(UInt32),
&dataSize, &direction);
if (result != 0) {
printf("Error getting kCMIOStreamPropertyDirection for stream\n");
return;
}
printf("Stream is %s\n", direction == 0 ? "output" : "input");
opa.mSelector = kCMIOStreamPropertyFormatDescriptions;
CFArrayRef streamDescriptions = NULL;
if (CMIOObjectHasProperty(objectID, &opa)) {
printf("Stream offers multiple formats\n");
result =
CMIOObjectGetPropertyData(objectID, &opa, 0, NULL, sizeof(CFArrayRef),
&dataSize, &streamDescriptions);
if (result != 0) {
printf("Error in CMIOObjectGetPropertyData for stream\n");
return;
}
}
Удивительно, но предлагаются только форматы YUV:
"<CMVideoFormatDescription 0x7fd360c0f970 [0x7fff8b4d1b60]> {\n\tmediaType:'vide' \n\tmediaSubType:'2vuy' \n\tmediaSpecific: {\n\t\tcodecType: '2vuy'\t\tdimensions: 160 x 120 \n\t} \n\textensions: {{\n CVBytesPerRow = 320;\n CVFieldCount = 1;\n CVImageBufferColorPrimaries = \"ITU_R_709_2\";\n CVImageBufferTransferFunction = \"ITU_R_709_2\";\n CVImageBufferYCbCrMatrix = \"ITU_R_709_2\";\n FormatName = \"Y'CbCr 4:2:2 - uyvy\";\n \"com.apple.cmio.format_extension.video.only_has_i_frames\" = 1;\n}}\n}",
Очевидно , аппаратное обеспечение датчика камеры поддерживает формат кадра MJPEG. Но почему он недоступен во фреймворке CoreMediaIO?