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