Почему камера Apple FaceTime HD не поддерживает формат пикселей MJPEG / DMB1 - PullRequest
0 голосов
/ 04 августа 2020

Я пытался развернуть структуру 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?

1 Ответ

0 голосов
/ 08 августа 2020

Возможно, вы захотите написать драйвер CMIO для отображения формата MJPEG

...