2828import  androidx .test .ext .junit .runners .AndroidJUnit4 ;
2929import  com .google .common .collect .ImmutableMap ;
3030import  com .google .common .primitives .Bytes ;
31+ import  java .util .Arrays ;
3132import  org .junit .Before ;
3233import  org .junit .Rule ;
3334import  org .junit .Test ;
@@ -118,10 +119,10 @@ public void consume_validPackets() {
118119    h263Reader .createTracks (extractorOutput , /* trackId= */  0 );
119120    h263Reader .onReceivingFirstPacket (
120121        FRAME_1_FRAGMENT_1 .timestamp , FRAME_1_FRAGMENT_1 .sequenceNumber );
121-     consume (h263Reader , FRAME_1_FRAGMENT_1 );
122+     consume (h263Reader , copyPacket ( FRAME_1_FRAGMENT_1 ) );
122123    consume (h263Reader , FRAME_1_FRAGMENT_2 );
123-     consume (h263Reader , FRAME_2_FRAGMENT_1 );
124-     consume (h263Reader , FRAME_2_FRAGMENT_2 );
124+     consume (h263Reader , copyPacket ( FRAME_2_FRAGMENT_1 ) );
125+     consume (h263Reader , copyPacket ( FRAME_2_FRAGMENT_2 ) );
125126
126127    trackOutput  = extractorOutput .trackOutputs .get (0 );
127128    assertThat (trackOutput .getSampleCount ()).isEqualTo (2 );
@@ -137,9 +138,9 @@ public void consume_fragmentedFrameMissingFirstFragment() {
137138    h263Reader .createTracks (extractorOutput , /* trackId= */  0 );
138139    h263Reader .onReceivingFirstPacket (
139140        FRAME_1_FRAGMENT_1 .timestamp , FRAME_1_FRAGMENT_1 .sequenceNumber );
140-     consume (h263Reader , FRAME_1_FRAGMENT_2 );
141-     consume (h263Reader , FRAME_2_FRAGMENT_1 );
142-     consume (h263Reader , FRAME_2_FRAGMENT_2 );
141+     consume (h263Reader , copyPacket ( FRAME_1_FRAGMENT_2 ) );
142+     consume (h263Reader , copyPacket ( FRAME_2_FRAGMENT_1 ) );
143+     consume (h263Reader , copyPacket ( FRAME_2_FRAGMENT_2 ) );
143144
144145    trackOutput  = extractorOutput .trackOutputs .get (0 );
145146    assertThat (trackOutput .getSampleCount ()).isEqualTo (1 );
@@ -153,9 +154,9 @@ public void consume_fragmentedFrameMissingBoundaryFragment() {
153154    h263Reader .createTracks (extractorOutput , /* trackId= */  0 );
154155    h263Reader .onReceivingFirstPacket (
155156        FRAME_1_FRAGMENT_1 .timestamp , FRAME_1_FRAGMENT_1 .sequenceNumber );
156-     consume (h263Reader , FRAME_1_FRAGMENT_1 );
157-     consume (h263Reader , FRAME_2_FRAGMENT_1 );
158-     consume (h263Reader , FRAME_2_FRAGMENT_2 );
157+     consume (h263Reader , copyPacket ( FRAME_1_FRAGMENT_1 ) );
158+     consume (h263Reader , copyPacket ( FRAME_2_FRAGMENT_1 ) );
159+     consume (h263Reader , copyPacket ( FRAME_2_FRAGMENT_2 ) );
159160
160161    trackOutput  = extractorOutput .trackOutputs .get (0 );
161162    assertThat (trackOutput .getSampleCount ()).isEqualTo (2 );
@@ -172,10 +173,10 @@ public void consume_outOfOrderPackets() {
172173    h263Reader .createTracks (extractorOutput , /* trackId= */  0 );
173174    h263Reader .onReceivingFirstPacket (
174175        FRAME_1_FRAGMENT_1 .timestamp , FRAME_1_FRAGMENT_1 .sequenceNumber );
175-     consume (h263Reader , FRAME_1_FRAGMENT_1 );
176-     consume (h263Reader , FRAME_2_FRAGMENT_1 );
177-     consume (h263Reader , FRAME_1_FRAGMENT_2 );
178-     consume (h263Reader , FRAME_2_FRAGMENT_2 );
176+     consume (h263Reader , copyPacket ( FRAME_1_FRAGMENT_1 ) );
177+     consume (h263Reader , copyPacket ( FRAME_2_FRAGMENT_1 ) );
178+     consume (h263Reader , copyPacket ( FRAME_1_FRAGMENT_2 ) );
179+     consume (h263Reader , copyPacket ( FRAME_2_FRAGMENT_2 ) );
179180
180181    trackOutput  = extractorOutput .trackOutputs .get (0 );
181182    assertThat (trackOutput .getSampleCount ()).isEqualTo (2 );
@@ -195,4 +196,23 @@ private static void consume(RtpH263Reader h263Reader, RtpPacket rtpPacket) {
195196        rtpPacket .sequenceNumber ,
196197        /* isFrameBoundary= */  rtpPacket .marker );
197198  }
199+ 
200+   private  static  RtpPacket  copyPacket (RtpPacket  packet ) {
201+     RtpPacket .Builder  builder  =
202+         new  RtpPacket .Builder ()
203+             .setPadding (packet .padding )
204+             .setMarker (packet .marker )
205+             .setPayloadType (packet .payloadType )
206+             .setSequenceNumber (packet .sequenceNumber )
207+             .setTimestamp (packet .timestamp )
208+             .setSsrc (packet .ssrc );
209+ 
210+     if  (packet .csrc .length  > 0 ) {
211+       builder .setCsrc (Arrays .copyOf (packet .csrc , packet .csrc .length ));
212+     }
213+     if  (packet .payloadData .length  > 0 ) {
214+       builder .setPayloadData (Arrays .copyOf (packet .payloadData , packet .payloadData .length ));
215+     }
216+     return  builder .build ();
217+   }
198218}
0 commit comments