@@ -16,7 +16,7 @@ cdef object _cinit_bypass_sentinel
16
16
supported_np_pix_fmts = {
17
17
" abgr" , " argb" , " bayer_bggr16be" , " bayer_bggr16le" , " bayer_bggr8" , " bayer_gbrg16be" ,
18
18
" bayer_gbrg16le" , " bayer_gbrg8" , " bayer_grbg16be" , " bayer_grbg16le" , " bayer_grbg8" ,
19
- " bayer_rggb16be" , " bayer_rggb16le" , " bayer_rggb8" , " bgr24" , " bgr8" , " bgra" ,
19
+ " bayer_rggb16be" , " bayer_rggb16le" , " bayer_rggb8" , " bgr24" , " bgr48be " , " bgr48le " , " bgr8" , " bgra" , " bgra64be " , " bgra64le " ,
20
20
" gbrapf32be" , " gbrapf32le" , " gbrp" , " gbrp10be" , " gbrp10le" , " gbrp12be" , " gbrp12le" ,
21
21
" gbrp14be" , " gbrp14le" , " gbrp16be" , " gbrp16le" , " gbrpf32be" , " gbrpf32le" , " gray" ,
22
22
" gray16be" , " gray16le" , " gray8" , " grayf32be" , " grayf32le" , " nv12" , " pal8" , " rgb24" ,
@@ -342,6 +342,8 @@ cdef class VideoFrame(Frame):
342
342
" bayer_rggb16le" : (2 , " uint16" ),
343
343
" bayer_rggb16be" : (2 , " uint16" ),
344
344
" bgr24" : (3 , " uint8" ),
345
+ " bgr48be" : (6 , " uint16" ),
346
+ " bgr48le" : (6 , " uint16" ),
345
347
" bgr8" : (1 , " uint8" ),
346
348
" bgra" : (4 , " uint8" ),
347
349
" gbrapf32be" : (4 , " float32" ),
@@ -370,6 +372,8 @@ cdef class VideoFrame(Frame):
370
372
" rgba" : (4 , " uint8" ),
371
373
" rgba64be" : (8 , " uint16" ),
372
374
" rgba64le" : (8 , " uint16" ),
375
+ " bgra64be" : (8 , " uint16" ),
376
+ " bgra64le" : (8 , " uint16" ),
373
377
" yuv444p" : (1 , " uint8" ),
374
378
" yuv444p16be" : (2 , " uint16" ),
375
379
" yuv444p16le" : (2 , " uint16" ),
@@ -467,43 +471,58 @@ cdef class VideoFrame(Frame):
467
471
if not width:
468
472
width = array.shape[1 ]
469
473
470
- if format in ( " rgb24" , " bgr24" ) :
474
+ if format in { " rgb24" , " bgr24" } :
471
475
check_ndarray(array, " uint8" , 3 )
472
476
check_ndarray_shape(array, array.shape[2 ] == 3 )
473
477
if array.strides[1 :] != (3 , 1 ):
474
478
raise ValueError (" provided array does not have C_CONTIGUOUS rows" )
479
+ linesizes = (array.strides[0 ], )
480
+ elif format in {" rgb48le" , " rgb48be" , " bgr48le" , " bgr48be" }:
481
+ check_ndarray(array, " uint16" , 3 )
482
+ check_ndarray_shape(array, array.shape[2 ] == 3 )
483
+ if array.strides[1 :] != (6 , 2 ):
484
+ raise ValueError (" provided array does not have C_CONTIGUOUS rows" )
475
485
linesizes = (array.strides[0 ], )
476
- elif format in ( " rgba" , " bgra" ) :
486
+ elif format in { " rgba" , " bgra" , " argb " , " abgr " } :
477
487
check_ndarray(array, " uint8" , 3 )
478
488
check_ndarray_shape(array, array.shape[2 ] == 4 )
479
489
if array.strides[1 :] != (4 , 1 ):
480
490
raise ValueError (" provided array does not have C_CONTIGUOUS rows" )
481
491
linesizes = (array.strides[0 ], )
482
- elif format in (" gray" , " gray8" , " rgb8" , " bgr8" ):
492
+ elif format in {" rgba64le" , " rgba64be" , " bgra64le" , " bgra64be" }:
493
+ check_ndarray(array, " uint16" , 3 )
494
+ check_ndarray_shape(array, array.shape[2 ] == 4 )
495
+ if array.strides[1 :] != (8 , 2 ):
496
+ raise ValueError (" provided array does not have C_CONTIGUOUS rows" )
497
+ linesizes = (array.strides[0 ], )
498
+ elif format in {" gray" , " gray8" , " rgb8" , " bgr8" ," bayer_bggr8" , " bayer_rggb8" , " bayer_gbrg8" , " bayer_grbg8" }:
483
499
check_ndarray(array, " uint8" , 2 )
484
500
if array.strides[1 ] != 1 :
485
501
raise ValueError (" provided array does not have C_CONTIGUOUS rows" )
486
502
linesizes = (array.strides[0 ], )
487
- elif format in (" yuv420p" , " yuvj420p" , " nv12" ):
503
+ elif format in {" gray16le" , " gray16be" , " bayer_rggb16le" , " bayer_gbrg16le" , " bayer_grbg16le" ," bayer_bggr16be" , " bayer_rggb16be" , " bayer_gbrg16be" , " bayer_grbg16be" }:
504
+ check_ndarray(array, " uint16" , 2 )
505
+ if array.strides[1 ] != 2 :
506
+ raise ValueError (" provided array does not have C_CONTIGUOUS rows" )
507
+ linesizes = (array.strides[0 ], )
508
+ elif format in {" grayf32le" , " grayf32be" }:
509
+ check_ndarray(array, " float32" , 2 )
510
+ if array.strides[1 ] != 4 :
511
+ raise ValueError (" provided array does not have C_CONTIGUOUS rows" )
512
+ linesizes = (array.strides[0 ], )
513
+ elif format in {" yuv420p" , " yuvj420p" , " nv12" }:
488
514
check_ndarray(array, " uint8" , 2 )
489
515
check_ndarray_shape(array, array.shape[0 ] % 3 == 0 )
490
516
check_ndarray_shape(array, array.shape[1 ] % 2 == 0 )
491
517
height = height // 6 * 4
492
518
if array.strides[1 ] != 1 :
493
519
raise ValueError (" provided array does not have C_CONTIGUOUS rows" )
494
- if format in ( " yuv420p" , " yuvj420p" ) :
520
+ if format in { " yuv420p" , " yuvj420p" } :
495
521
# For YUV420 planar formats, the UV plane stride is always half the Y stride.
496
522
linesizes = (array.strides[0 ], array.strides[0 ] // 2 , array.strides[0 ] // 2 )
497
523
else :
498
524
# Planes where U and V are interleaved have the same stride as Y.
499
525
linesizes = (array.strides[0 ], array.strides[0 ])
500
- elif format in {" bayer_bggr8" , " bayer_rggb8" , " bayer_gbrg8" , " bayer_grbg8" ," bayer_bggr16le" , " bayer_rggb16le" , " bayer_gbrg16le" , " bayer_grbg16le" ," bayer_bggr16be" , " bayer_rggb16be" , " bayer_gbrg16be" , " bayer_grbg16be" }:
501
- check_ndarray(array, " uint8" if format.endswith(" 8" ) else " uint16" , 2 )
502
-
503
- if array.strides[1 ] != (1 if format.endswith(" 8" ) else 2 ):
504
- raise ValueError (" provided array does not have C_CONTIGUOUS rows" )
505
-
506
- linesizes = (array.strides[0 ],)
507
526
else :
508
527
raise ValueError (f" Conversion from numpy array with format `{format}` is not yet supported" )
509
528
@@ -717,13 +736,13 @@ cdef class VideoFrame(Frame):
717
736
elif format in {" argb" , " rgba" , " abgr" , " bgra" }:
718
737
check_ndarray(array, " uint8" , 3 )
719
738
check_ndarray_shape(array, array.shape[2 ] == 4 )
720
- elif format in {" rgb48be" , " rgb48le" }:
739
+ elif format in {" rgb48be" , " rgb48le" , " bgr48be " , " bgr48le " }:
721
740
check_ndarray(array, " uint16" , 3 )
722
741
check_ndarray_shape(array, array.shape[2 ] == 3 )
723
742
frame = VideoFrame(array.shape[1 ], array.shape[0 ], format)
724
743
copy_array_to_plane(byteswap_array(array, format.endswith(" be" )), frame.planes[0 ], 6 )
725
744
return frame
726
- elif format in {" rgba64be" , " rgba64le" }:
745
+ elif format in {" rgba64be" , " rgba64le" , " bgra64be " , " bgra64le " }:
727
746
check_ndarray(array, " uint16" , 3 )
728
747
check_ndarray_shape(array, array.shape[2 ] == 4 )
729
748
frame = VideoFrame(array.shape[1 ], array.shape[0 ], format)
0 commit comments