1 2from PyObjCTools.TestSupport import * 3from Quartz import * 4 5class TestCVPixelBuffer (TestCase): 6 def testConstants(self): 7 self.assertEqual(kCVPixelFormatType_1Monochrome, 0x00000001) 8 self.assertEqual(kCVPixelFormatType_2Indexed, 0x00000002) 9 self.assertEqual(kCVPixelFormatType_4Indexed, 0x00000004) 10 self.assertEqual(kCVPixelFormatType_8Indexed, 0x00000008) 11 self.assertEqual(kCVPixelFormatType_1IndexedGray_WhiteIsZero, 0x00000021) 12 self.assertEqual(kCVPixelFormatType_2IndexedGray_WhiteIsZero, 0x00000022) 13 self.assertEqual(kCVPixelFormatType_4IndexedGray_WhiteIsZero, 0x00000024) 14 self.assertEqual(kCVPixelFormatType_8IndexedGray_WhiteIsZero, 0x00000028) 15 self.assertEqual(kCVPixelFormatType_16BE555, 0x00000010) 16 self.assertEqual(kCVPixelFormatType_16LE555, fourcc(b'L555')) 17 self.assertEqual(kCVPixelFormatType_16LE5551, fourcc(b'5551')) 18 self.assertEqual(kCVPixelFormatType_16BE565, fourcc(b'B565')) 19 self.assertEqual(kCVPixelFormatType_16LE565, fourcc(b'L565')) 20 self.assertEqual(kCVPixelFormatType_24RGB, 0x00000018) 21 self.assertEqual(kCVPixelFormatType_24BGR, fourcc(b'24BG')) 22 self.assertEqual(kCVPixelFormatType_32ARGB, 0x00000020) 23 self.assertEqual(kCVPixelFormatType_32BGRA, fourcc(b'BGRA')) 24 self.assertEqual(kCVPixelFormatType_32ABGR, fourcc(b'ABGR')) 25 self.assertEqual(kCVPixelFormatType_32RGBA, fourcc(b'RGBA')) 26 self.assertEqual(kCVPixelFormatType_64ARGB, fourcc(b'b64a')) 27 self.assertEqual(kCVPixelFormatType_48RGB, fourcc(b'b48r')) 28 self.assertEqual(kCVPixelFormatType_32AlphaGray, fourcc(b'b32a')) 29 self.assertEqual(kCVPixelFormatType_16Gray, fourcc(b'b16g')) 30 self.assertEqual(kCVPixelFormatType_422YpCbCr8, fourcc(b'2vuy')) 31 self.assertEqual(kCVPixelFormatType_4444YpCbCrA8, fourcc(b'v408')) 32 self.assertEqual(kCVPixelFormatType_4444YpCbCrA8R, fourcc(b'r408')) 33 self.assertEqual(kCVPixelFormatType_444YpCbCr8, fourcc(b'v308')) 34 self.assertEqual(kCVPixelFormatType_422YpCbCr16, fourcc(b'v216')) 35 self.assertEqual(kCVPixelFormatType_422YpCbCr10, fourcc(b'v210')) 36 self.assertEqual(kCVPixelFormatType_444YpCbCr10, fourcc(b'v410')) 37 self.assertEqual(kCVPixelFormatType_420YpCbCr8Planar, fourcc(b'y420')) 38 39 self.assertIsInstance(kCVPixelBufferPixelFormatTypeKey, unicode) 40 self.assertIsInstance(kCVPixelBufferMemoryAllocatorKey, unicode) 41 self.assertIsInstance(kCVPixelBufferWidthKey, unicode) 42 self.assertIsInstance(kCVPixelBufferHeightKey, unicode) 43 self.assertIsInstance(kCVPixelBufferExtendedPixelsLeftKey, unicode) 44 self.assertIsInstance(kCVPixelBufferExtendedPixelsTopKey, unicode) 45 self.assertIsInstance(kCVPixelBufferExtendedPixelsRightKey, unicode) 46 self.assertIsInstance(kCVPixelBufferExtendedPixelsBottomKey, unicode) 47 self.assertIsInstance(kCVPixelBufferBytesPerRowAlignmentKey, unicode) 48 self.assertIsInstance(kCVPixelBufferCGBitmapContextCompatibilityKey, unicode) 49 self.assertIsInstance(kCVPixelBufferCGImageCompatibilityKey, unicode) 50 self.assertIsInstance(kCVPixelBufferOpenGLCompatibilityKey, unicode) 51 52 def testTypes(self): 53 self.assertIsCFType(CVPixelBufferRef) 54 55 def testStructures(self): 56 v = CVPlanarComponentInfo() 57 self.assertIsInstance(v.offset, (int, long)) 58 self.assertIsInstance(v.rowBytes, (int, long)) 59 60 v = CVPlanarPixelBufferInfo_YCbCrPlanar() 61 self.assertIsInstance(v.componentInfoY, CVPlanarComponentInfo) 62 self.assertIsInstance(v.componentInfoCb, CVPlanarComponentInfo) 63 self.assertIsInstance(v.componentInfoCr, CVPlanarComponentInfo) 64 65 def testFunctions(self): 66 self.assertIsInstance(CVPixelBufferGetTypeID(), (int, long)) 67 68 69 buf = self.makeBuffer() 70 self.assertIsInstance(buf, CVPixelBufferRef) 71 72 73 v = CVPixelBufferRetain(buf) 74 self.assertTrue(v is buf) 75 CVPixelBufferRelease(v) 76 77 self.assertArgIsOut(CVPixelBufferCreateResolvedAttributesDictionary, 2) 78 rv, v = CVPixelBufferCreateResolvedAttributesDictionary(None, [], None) 79 self.assertEqual(rv, 0) 80 self.assertIsInstance(v, CFDictionaryRef) 81 82 83 84 v = CVPixelBufferGetWidth(buf) 85 self.assertIsInstance(v, (int, long)) 86 87 v = CVPixelBufferGetHeight(buf) 88 self.assertIsInstance(v, (int, long)) 89 90 v = CVPixelBufferGetPixelFormatType(buf) 91 self.assertIsInstance(v, (int, long)) 92 93 rv = CVPixelBufferLockBaseAddress(buf, 0) 94 self.assertEqual(rv, 0) 95 96 self.assertResultHasType(CVPixelBufferGetBaseAddress, b'^v') 97 self.assertResultIsVariableSize(CVPixelBufferGetBaseAddress) 98 v = CVPixelBufferGetBaseAddress(buf) 99 self.assertIsInstance(v, objc.varlist) 100 self.assertIsInstance(v[0], str) 101 102 self.assertResultHasType(CVPixelBufferGetBaseAddressOfPlane, b'^v') 103 self.assertResultIsVariableSize(CVPixelBufferGetBaseAddressOfPlane) 104 v = CVPixelBufferGetBaseAddressOfPlane(buf, 0) 105 if v is not objc.NULL: 106 self.assertIsInstance(v, objc.varlist) 107 self.assertIsInstance(v[0], str) 108 109 rv = CVPixelBufferUnlockBaseAddress(buf, 0) 110 self.assertEqual(rv, 0) 111 112 v = CVPixelBufferGetBytesPerRow(buf) 113 self.assertIsInstance(v, (int, long)) 114 115 v = CVPixelBufferGetDataSize(buf) 116 self.assertIsInstance(v, (int, long)) 117 118 v = CVPixelBufferGetPlaneCount(buf) 119 self.assertIsInstance(v, (int, long)) 120 121 v = CVPixelBufferGetWidthOfPlane(buf, 0) 122 self.assertIsInstance(v, (int, long)) 123 124 v = CVPixelBufferGetHeightOfPlane(buf, 0) 125 self.assertIsInstance(v, (int, long)) 126 127 v = CVPixelBufferGetBytesPerRowOfPlane(buf, 0) 128 self.assertIsInstance(v, (int, long)) 129 130 self.assertArgIsOut(CVPixelBufferGetExtendedPixels, 1) 131 self.assertArgIsOut(CVPixelBufferGetExtendedPixels, 2) 132 self.assertArgIsOut(CVPixelBufferGetExtendedPixels, 3) 133 self.assertArgIsOut(CVPixelBufferGetExtendedPixels, 4) 134 v = CVPixelBufferGetExtendedPixels(buf, None, None, None, None) 135 self.assertEqual(len(v), 4) 136 for i in range(4): 137 self.assertIsInstance(v[i], (int, long)) 138 139 rv = CVPixelBufferFillExtendedPixels(buf) 140 self.assertIsInstance(rv, (int, long)) 141 142 143 144 def testManual(self): 145 self.fail("CVPixelBufferCreate requires manual wrapper") 146 self.fail("CVPixelBufferCreateWithBytes requires manual wrapper") 147 self.fail("CVPixelBufferCreateWithPlanarBytes requires manual wrapper") 148 149 150 151 152 def makeBuffer(self): 153 # Helper function for creating a buffer, needed until we write the 154 # manual wrappers for creating a buffer without a pool 155 rv, pool = CVPixelBufferPoolCreate(None, { 156 kCVPixelBufferPoolMinimumBufferCountKey: 1, 157 kCVPixelBufferPoolMaximumBufferAgeKey: 300, 158 }, { 159 kCVPixelBufferWidthKey: 100, 160 kCVPixelBufferHeightKey: 100, 161 kCVPixelBufferPixelFormatTypeKey: kCVPixelFormatType_32ARGB, 162 }, None) 163 self.assertEqual(rv, 0) 164 self.assertIsInstance(pool, CVPixelBufferPoolRef) 165 166 rv, image = CVPixelBufferPoolCreatePixelBuffer(None, pool, None) 167 self.assertEqual(rv, 0) 168 return image 169 170 @min_os_level('10.6') 171 def testConstants10_6(self): 172 self.assertEqual(kCVPixelBufferLock_ReadOnly, 1) 173 174 self.assertIsInstance(kCVPixelBufferPlaneAlignmentKey, unicode) 175 self.assertIsInstance(kCVPixelBufferIOSurfacePropertiesKey, unicode) 176 self.assertIsInstance(kCVPixelBufferIOSurfaceOpenGLTextureCompatibilityKey, unicode) 177 self.assertIsInstance(kCVPixelBufferIOSurfaceOpenGLFBOCompatibilityKey, unicode) 178 self.assertIsInstance(kCVPixelBufferIOSurfaceCoreAnimationCompatibilityKey, unicode) 179 180 @min_os_level('10.6') 181 def testFunctions10_6(self): 182 self.assertResultHasType(CVPixelBufferGetIOSurface, b'^{__IOSurfaceRef=}') 183 self.assertArgHasType(CVPixelBufferGetIOSurface, 0, b'^{__CVPixelBuffer=}') 184 self.assertArgHasType(CVPixelBufferCreateWithIOSurface, 1, b'^{__IOSurfaceRef=}') 185 self.assertArgIsOut(CVPixelBufferCreateWithIOSurface, 3) 186 187 188 189if __name__ == "__main__": 190 main() 191