@@ -463,6 +463,70 @@ protected void onFlush(StreamMetadata streamMetadata) {
463
463
assertThat (lastPositionOffsetUs .get ()).isEqualTo (500_000 );
464
464
}
465
465
466
+ @ Test
467
+ public void flush_beforeRegisteringFirstInput_maintainsPreviousPositionOffset () throws Exception {
468
+ AtomicLong lastPositionOffsetUs = new AtomicLong (C .TIME_UNSET );
469
+ BaseAudioProcessor fakeProcessor =
470
+ new PassthroughAudioProcessor () {
471
+ @ Override
472
+ protected void onFlush (StreamMetadata streamMetadata ) {
473
+ lastPositionOffsetUs .set (streamMetadata .positionOffsetUs );
474
+ }
475
+ };
476
+ AudioGraph audioGraph =
477
+ new AudioGraph (
478
+ new DefaultAudioMixer .Factory (), /* effects= */ ImmutableList .of (fakeProcessor ));
479
+
480
+ audioGraph .flush (/* positionOffsetUs= */ 500_000 );
481
+ lastPositionOffsetUs .set (C .TIME_UNSET );
482
+ audioGraph .registerInput (FAKE_ITEM , getPcmFormat (MONO_44100 ));
483
+
484
+ assertThat (lastPositionOffsetUs .get ()).isEqualTo (500_000 );
485
+ }
486
+
487
+ @ Test
488
+ public void flush_multipleTimes_propagatesLastPositionOffsetAfterFirstInput () throws Exception {
489
+ AtomicLong lastPositionOffsetUs = new AtomicLong (C .TIME_UNSET );
490
+ BaseAudioProcessor fakeProcessor =
491
+ new PassthroughAudioProcessor () {
492
+ @ Override
493
+ protected void onFlush (StreamMetadata streamMetadata ) {
494
+ lastPositionOffsetUs .set (streamMetadata .positionOffsetUs );
495
+ }
496
+ };
497
+ AudioGraph audioGraph =
498
+ new AudioGraph (
499
+ new DefaultAudioMixer .Factory (), /* effects= */ ImmutableList .of (fakeProcessor ));
500
+
501
+ audioGraph .flush (/* positionOffsetUs= */ 500_000 );
502
+ audioGraph .flush (/* positionOffsetUs= */ 600_000 );
503
+ audioGraph .flush (/* positionOffsetUs= */ 700_000 );
504
+ audioGraph .registerInput (FAKE_ITEM , getPcmFormat (MONO_44100 ));
505
+
506
+ assertThat (lastPositionOffsetUs .get ()).isEqualTo (700_000 );
507
+ }
508
+
509
+ @ Test
510
+ public void flush_afterRegisteringFirstInput_updatesPositionOffset () throws Exception {
511
+ AtomicLong lastPositionOffsetUs = new AtomicLong (C .TIME_UNSET );
512
+ BaseAudioProcessor fakeProcessor =
513
+ new PassthroughAudioProcessor () {
514
+ @ Override
515
+ protected void onFlush (StreamMetadata streamMetadata ) {
516
+ lastPositionOffsetUs .set (streamMetadata .positionOffsetUs );
517
+ }
518
+ };
519
+ AudioGraph audioGraph =
520
+ new AudioGraph (
521
+ new DefaultAudioMixer .Factory (), /* effects= */ ImmutableList .of (fakeProcessor ));
522
+
523
+ audioGraph .registerInput (FAKE_ITEM , getPcmFormat (MONO_44100 ));
524
+ assertThat (lastPositionOffsetUs .get ()).isEqualTo (0 );
525
+ audioGraph .flush (/* positionOffsetUs= */ 500_000 );
526
+
527
+ assertThat (lastPositionOffsetUs .get ()).isEqualTo (500_000 );
528
+ }
529
+
466
530
/** Drains the graph and returns the number of bytes output. */
467
531
private static int drainAudioGraph (AudioGraph audioGraph ) throws ExportException {
468
532
int bytesOutput = 0 ;
0 commit comments