@@ -755,3 +755,41 @@ test(t => {
755
755
frame . close ( ) ;
756
756
} , 'Test a VideoFrame constructed from canvas can drop the alpha channel.' ) ;
757
757
758
+ promise_test ( async t => {
759
+ let fmt = 'RGBA' ;
760
+ const rgb_plane = [
761
+ 0xBA , 0xDF , 0x00 , 0xD0 , 0xBA , 0xDF , 0x01 , 0xD0 , 0xBA , 0xDF , 0x02 , 0xD0 ,
762
+ 0xBA , 0xDF , 0x03 , 0xD0
763
+ ] ;
764
+ let data = new Uint8Array ( rgb_plane ) ;
765
+ let unused_buffer = new ArrayBuffer ( 123 ) ;
766
+ let init = {
767
+ format : fmt ,
768
+ timestamp : 1234 ,
769
+ codedWidth : 2 ,
770
+ codedHeight : 2 ,
771
+ visibleRect : { x : 0 , y : 0 , width : 2 , height : 2 } ,
772
+ transfer : [ data . buffer , unused_buffer ]
773
+ } ;
774
+ assert_equals ( data . length , 16 , 'data.length' ) ;
775
+ assert_equals ( unused_buffer . byteLength , 123 , 'unused_buffer.byteLength' ) ;
776
+
777
+ let frame = new VideoFrame ( data , init ) ;
778
+ assert_equals ( frame . format , fmt , 'format' ) ;
779
+ assert_equals ( data . length , 0 , 'data.length after detach' ) ;
780
+ assert_equals ( unused_buffer . byteLength , 0 , 'unused_buffer after detach' ) ;
781
+
782
+ const options = {
783
+ rect : { x : 0 , y : 0 , width : init . codedWidth , height : init . codedHeight }
784
+ } ;
785
+ let size = frame . allocationSize ( options ) ;
786
+ let output_data = new Uint8Array ( size ) ;
787
+ let layout = await frame . copyTo ( output_data , options ) ;
788
+ let expected_data = new Uint8Array ( rgb_plane ) ;
789
+ assert_equals ( expected_data . length , size , 'expected_data size' ) ;
790
+ for ( let i = 0 ; i < size ; i ++ ) {
791
+ assert_equals ( expected_data [ i ] , output_data [ i ] , `expected_data[${ i } ]` ) ;
792
+ }
793
+
794
+ frame . close ( ) ;
795
+ } , 'Test transfering ArrayBuffer to VideoFrame' ) ;
0 commit comments