2014-04-28 31 views
7

piksel formatlarını eşleme CVPixelBuffer.h numarasında V4L eşdeğerlerine numaralandırılmış bir OSX CoreVideo piksel formatı eşleştirmem gerekiyor. Örneğin, kCVPixelFormatType_24RGB, V4L2_PIX_FMT_RGB24 ile eşlenir.CVPixelBuffer'dan eşdeğer V4L

fourcc kullanarak eşleştirmeyi denedim, ancak OSX ve V4L'nin tanımları eşleşmiyor. Tam düzenini incelemek ve el ile eşleştirmenin yanı sıra, örneğin, kCVPixelFormatType_422YpCbCr8'un nerede görüntüleneceğini gösteren bir program tablosu veya bir bilgi tablosu var mı?

cevap

5

Core Video, Apple dışındaki sistemlerle birlikte çalışabilir şekilde tasarlanmamıştır ve Core Video uyumluluğu, V4L için hiçbir zaman bir hedef değildir, bu nedenle yalnızca bir kitaplıkta bulunan bazı piksel biçimleri vardır. RGB24 gibi bazı formatlar, hem Linux hem de OS X/iOS'un ele alması gereken ortak formatlar oldukları için vardır. İki piksel biçiminin aynı olduğunu onaylamak için, düzenlerini beklemeniz ve bunları manuel olarak eşleştirmeniz gerekir. Her iki kitaplıkta da sizin için eşleme yapmanın bir işlevi yoktur.

Bu, CVPixelBuffer.h ve videodev2.h'de piksel biçimlerini güvenle eşleştirmenize izin veren oldukça iyi yorumlar var. Bazı formatların eşleştirilmesinin anahtarı, YUV ve Y'CbCr'nin sıklıkla birbirinin yerine kullanıldığını anlamaktır.

açısından vs Y'UV, YUV, YCbCr, YPbPr, kapsamı, Wikipedia gereğince, bazen belirsiz ve örtüşen olduğunu. Tarihsel olarak YUV ve Y'UV terimleri, televizyon sistemlerinde renk bilgisinin belirli bir analog kodlaması için kullanılırken, YCbCr video ve hala görüntü sıkıştırma ve MPEG ve JPEG gibi iletim için uygun renk bilgilerinin dijital kodlanması için kullanılmıştır. Bugün YUV terimi, YCbCr kullanılarak kodlanan dosya formatlarını tanımlamak için bilgisayar endüstrisinde yaygın olarak kullanılmaktadır.

V4L da V4L biçimlerine CVPixelBuffer.h açıklamalarda maç için yardımcı olabilir onun piksel biçimleri üzerinde excellent documentation sahiptir.

Özellikle, kCVPixelFormatType_422YpCbCr8 ürününün nasıl bir harita olacağını sormuştunuz. Bu bilgi verildiğinde, V4L2_PIX_FMT_UYVY ile eşleşmelidir. Aşağıda, bu bilgileri kullanarak oluşturulan V4L biçimli Çekirdek Video piksel Biçimleri haritası verilmiştir. Tabloda bir biçim görünmüyorsa, bunun anlamı her iki kütüphanede de desteklenmemektedir. Bu bilgi herhangi bir gerçek sınamaya dayanmamaktadır, dolayısıyla yanlış olabilir.

İki kitaplık arasında yalnızca 8 bitlik biçimlerin ortak olduğunu unutmayın. Aynı 16 veya 32 bit formatları destekledikleri durumlarda bile, endian farklılıklarından dolayı değildir. Örneğin, kCVPixelFormatType_16Gray, V4L2_PIX_FMT_Y16 ile eşleşmiyor, çünkü eski büyük-endian ve ikinci küçük-endian.

| Core Video | Video4Linux | | kCVPixelFormatType_16BE555 | V4L2_PIX_FMT_RGB555X | | kCVPixelFormatType_16LE555 | V4L2_PIX_FMT_RGB555 | | kCVPixelFormatType_16BE565 | V4L2_PIX_FMT_RGB565X | | kCVPixelFormatType_16LE565 | V4L2_PIX_FMT_RGB565 | | kCVPixelFormatType_24RGB | V4L2_PIX_FMT_RGB24 | | kCVPixelFormatType_24BGR | V4L2_PIX_FMT_BGR24 | | kCVPixelFormatType_32ARGB | V4L2_PIX_FMT_RGB32 | | kCVPixelFormatType_32BGRA | V4L2_PIX_FMT_BGR32 | | kCVPixelFormatType_422YpCbCr8 | V4L2_PIX_FMT_UYVY | | kCVPixelFormatType_420YpCbCr8Planar* | V4L2_PIX_FMT_YUV420 | | kCVPixelFormatType_422YpCbCr8_yuvs | V4L2_PIX_FMT_YUYV |

* Çekirdek video versiyonu big-endian uçaklar bulundukları yerleri oluşan başlık ve kaç bayt satır başına her düzlem vardır içerir. V4L sürümü buna sahip değil, bu yüzden CoreVideo'dan V4L'ye gitmek ve V4L'den Core Video'ya gitmek için onu kaldırmak zorunda kalacaksınız.