Make sure that the sample pipeline data is processed regularly.

This is necessary to move video decoding to the AssetLoader. Otherwise,
if the decoder max pending frame count is reached, the AssetLoader will
stop queuing frames to the pipeline, and process data will not be called
anymore.

PiperOrigin-RevId: 492392621
This commit is contained in:
kimvde 2022-12-02 07:36:47 +00:00 committed by Ian Baker
parent d711bf7b24
commit 85c48c481e
6 changed files with 338 additions and 341 deletions

View File

@ -14,6 +14,72 @@ format 1:
initializationData: initializationData:
data = length 30, hash F6F3D010 data = length 30, hash F6F3D010
data = length 10, hash 7A0D0F2B data = length 10, hash 7A0D0F2B
sample:
trackIndex = 0
dataHashCode = 555688582
size = 416
isKeyFrame = true
presentationTimeUs = 0
sample:
trackIndex = 0
dataHashCode = 2000837254
size = 418
isKeyFrame = true
presentationTimeUs = 4717
sample:
trackIndex = 0
dataHashCode = -1593942879
size = 418
isKeyFrame = true
presentationTimeUs = 9456
sample:
trackIndex = 0
dataHashCode = 587837542
size = 418
isKeyFrame = true
presentationTimeUs = 14196
sample:
trackIndex = 0
dataHashCode = -1836423877
size = 418
isKeyFrame = true
presentationTimeUs = 18935
sample:
trackIndex = 0
dataHashCode = 874705099
size = 418
isKeyFrame = true
presentationTimeUs = 23674
sample:
trackIndex = 0
dataHashCode = -269206181
size = 418
isKeyFrame = true
presentationTimeUs = 28413
sample:
trackIndex = 0
dataHashCode = -58682425
size = 418
isKeyFrame = true
presentationTimeUs = 33152
sample:
trackIndex = 0
dataHashCode = -859796970
size = 418
isKeyFrame = true
presentationTimeUs = 37892
sample:
trackIndex = 0
dataHashCode = 711911523
size = 418
isKeyFrame = true
presentationTimeUs = 42631
sample:
trackIndex = 0
dataHashCode = -694513071
size = 418
isKeyFrame = true
presentationTimeUs = 47370
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = -252482306 dataHashCode = -252482306
@ -104,72 +170,6 @@ sample:
size = 5525 size = 5525
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 567000 presentationTimeUs = 567000
sample:
trackIndex = 0
dataHashCode = 555688582
size = 416
isKeyFrame = true
presentationTimeUs = 0
sample:
trackIndex = 0
dataHashCode = 2000837254
size = 418
isKeyFrame = true
presentationTimeUs = 4717
sample:
trackIndex = 0
dataHashCode = -1593942879
size = 418
isKeyFrame = true
presentationTimeUs = 9456
sample:
trackIndex = 0
dataHashCode = 587837542
size = 418
isKeyFrame = true
presentationTimeUs = 14196
sample:
trackIndex = 0
dataHashCode = -1836423877
size = 418
isKeyFrame = true
presentationTimeUs = 18935
sample:
trackIndex = 0
dataHashCode = 874705099
size = 418
isKeyFrame = true
presentationTimeUs = 23674
sample:
trackIndex = 0
dataHashCode = -269206181
size = 418
isKeyFrame = true
presentationTimeUs = 28413
sample:
trackIndex = 0
dataHashCode = -58682425
size = 418
isKeyFrame = true
presentationTimeUs = 33152
sample:
trackIndex = 0
dataHashCode = -859796970
size = 418
isKeyFrame = true
presentationTimeUs = 37892
sample:
trackIndex = 0
dataHashCode = 711911523
size = 418
isKeyFrame = true
presentationTimeUs = 42631
sample:
trackIndex = 0
dataHashCode = -694513071
size = 418
isKeyFrame = true
presentationTimeUs = 47370
sample: sample:
trackIndex = 0 trackIndex = 0
dataHashCode = -1124371059 dataHashCode = -1124371059
@ -200,6 +200,12 @@ sample:
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 71066 presentationTimeUs = 71066
sample:
trackIndex = 1
dataHashCode = -637074022
size = 1082
isKeyFrame = false
presentationTimeUs = 500000
sample: sample:
trackIndex = 0 trackIndex = 0
dataHashCode = 1297086772 dataHashCode = 1297086772
@ -278,12 +284,6 @@ sample:
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 132676 presentationTimeUs = 132676
sample:
trackIndex = 1
dataHashCode = -637074022
size = 1082
isKeyFrame = false
presentationTimeUs = 500000
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = -1824027029 dataHashCode = -1824027029

View File

@ -14,6 +14,78 @@ format 1:
initializationData: initializationData:
data = length 29, hash 4746B5D9 data = length 29, hash 4746B5D9
data = length 10, hash 7A0D0F2B data = length 10, hash 7A0D0F2B
sample:
trackIndex = 0
dataHashCode = 1868041800
size = 22
isKeyFrame = true
presentationTimeUs = 0
sample:
trackIndex = 0
dataHashCode = 1552866193
size = 8
isKeyFrame = true
presentationTimeUs = 230
sample:
trackIndex = 0
dataHashCode = 701848493
size = 160
isKeyFrame = true
presentationTimeUs = 313
sample:
trackIndex = 0
dataHashCode = 2000505720
size = 206
isKeyFrame = true
presentationTimeUs = 1980
sample:
trackIndex = 0
dataHashCode = 57276327
size = 222
isKeyFrame = true
presentationTimeUs = 4125
sample:
trackIndex = 0
dataHashCode = 382237408
size = 228
isKeyFrame = true
presentationTimeUs = 6438
sample:
trackIndex = 0
dataHashCode = 795308374
size = 228
isKeyFrame = true
presentationTimeUs = 8813
sample:
trackIndex = 0
dataHashCode = 356270426
size = 224
isKeyFrame = true
presentationTimeUs = 11188
sample:
trackIndex = 0
dataHashCode = 963641614
size = 244
isKeyFrame = true
presentationTimeUs = 13521
sample:
trackIndex = 0
dataHashCode = 2045272193
size = 234
isKeyFrame = true
presentationTimeUs = 16063
sample:
trackIndex = 0
dataHashCode = -251933090
size = 228
isKeyFrame = true
presentationTimeUs = 18500
sample:
trackIndex = 0
dataHashCode = -329315280
size = 234
isKeyFrame = true
presentationTimeUs = 20875
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = -770308242 dataHashCode = -770308242
@ -104,78 +176,6 @@ sample:
size = 5450 size = 5450
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 567233 presentationTimeUs = 567233
sample:
trackIndex = 0
dataHashCode = 1868041800
size = 22
isKeyFrame = true
presentationTimeUs = 0
sample:
trackIndex = 0
dataHashCode = 1552866193
size = 8
isKeyFrame = true
presentationTimeUs = 230
sample:
trackIndex = 0
dataHashCode = 701848493
size = 160
isKeyFrame = true
presentationTimeUs = 313
sample:
trackIndex = 0
dataHashCode = 2000505720
size = 206
isKeyFrame = true
presentationTimeUs = 1980
sample:
trackIndex = 0
dataHashCode = 57276327
size = 222
isKeyFrame = true
presentationTimeUs = 4125
sample:
trackIndex = 0
dataHashCode = 382237408
size = 228
isKeyFrame = true
presentationTimeUs = 6438
sample:
trackIndex = 0
dataHashCode = 795308374
size = 228
isKeyFrame = true
presentationTimeUs = 8813
sample:
trackIndex = 0
dataHashCode = 356270426
size = 224
isKeyFrame = true
presentationTimeUs = 11188
sample:
trackIndex = 0
dataHashCode = 963641614
size = 244
isKeyFrame = true
presentationTimeUs = 13521
sample:
trackIndex = 0
dataHashCode = 2045272193
size = 234
isKeyFrame = true
presentationTimeUs = 16063
sample:
trackIndex = 0
dataHashCode = -251933090
size = 228
isKeyFrame = true
presentationTimeUs = 18500
sample:
trackIndex = 0
dataHashCode = -329315280
size = 234
isKeyFrame = true
presentationTimeUs = 20875
sample: sample:
trackIndex = 0 trackIndex = 0
dataHashCode = -1536715689 dataHashCode = -1536715689
@ -284,6 +284,12 @@ sample:
size = 250 size = 250
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 67625 presentationTimeUs = 67625
sample:
trackIndex = 1
dataHashCode = -1830836678
size = 1051
isKeyFrame = false
presentationTimeUs = 500500
sample: sample:
trackIndex = 0 trackIndex = 0
dataHashCode = -1290952882 dataHashCode = -1290952882
@ -374,12 +380,6 @@ sample:
size = 8 size = 8
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 107646 presentationTimeUs = 107646
sample:
trackIndex = 1
dataHashCode = -1830836678
size = 1051
isKeyFrame = false
presentationTimeUs = 500500
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = 1767407540 dataHashCode = 1767407540

View File

@ -21,6 +21,12 @@ format 1:
initializationData: initializationData:
data = length 29, hash 4746B5D9 data = length 29, hash 4746B5D9
data = length 10, hash 7A0D0F2B data = length 10, hash 7A0D0F2B
sample:
trackIndex = 0
dataHashCode = 1205768497
size = 23
isKeyFrame = true
presentationTimeUs = 44000
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = -770308242 dataHashCode = -770308242
@ -111,12 +117,6 @@ sample:
size = 5450 size = 5450
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 567233 presentationTimeUs = 567233
sample:
trackIndex = 0
dataHashCode = 1205768497
size = 23
isKeyFrame = true
presentationTimeUs = 44000
sample: sample:
trackIndex = 0 trackIndex = 0
dataHashCode = 837571078 dataHashCode = 837571078
@ -129,6 +129,12 @@ sample:
size = 148 size = 148
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 90439 presentationTimeUs = 90439
sample:
trackIndex = 1
dataHashCode = -1830836678
size = 1051
isKeyFrame = false
presentationTimeUs = 500500
sample: sample:
trackIndex = 0 trackIndex = 0
dataHashCode = -822987359 dataHashCode = -822987359
@ -238,17 +244,41 @@ sample:
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 508399 presentationTimeUs = 508399
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -1830836678 dataHashCode = 1675188486
size = 1051 size = 228
isKeyFrame = false isKeyFrame = true
presentationTimeUs = 500500 presentationTimeUs = 531619
sample:
trackIndex = 0
dataHashCode = 888567545
size = 238
isKeyFrame = true
presentationTimeUs = 554839
sample:
trackIndex = 0
dataHashCode = -439631803
size = 234
isKeyFrame = true
presentationTimeUs = 578058
sample:
trackIndex = 0
dataHashCode = 1606694497
size = 231
isKeyFrame = true
presentationTimeUs = 601278
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = 1767407540 dataHashCode = 1767407540
size = 874 size = 874
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 467133 presentationTimeUs = 467133
sample:
trackIndex = 0
dataHashCode = 1747388653
size = 217
isKeyFrame = true
presentationTimeUs = 624498
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = 918440283 dataHashCode = 918440283
@ -327,36 +357,6 @@ sample:
size = 568 size = 568
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 934266 presentationTimeUs = 934266
sample:
trackIndex = 0
dataHashCode = 1675188486
size = 228
isKeyFrame = true
presentationTimeUs = 531619
sample:
trackIndex = 0
dataHashCode = 888567545
size = 238
isKeyFrame = true
presentationTimeUs = 554839
sample:
trackIndex = 0
dataHashCode = -439631803
size = 234
isKeyFrame = true
presentationTimeUs = 578058
sample:
trackIndex = 0
dataHashCode = 1606694497
size = 231
isKeyFrame = true
presentationTimeUs = 601278
sample:
trackIndex = 0
dataHashCode = 1747388653
size = 217
isKeyFrame = true
presentationTimeUs = 624498
sample: sample:
trackIndex = 0 trackIndex = 0
dataHashCode = -734560004 dataHashCode = -734560004

View File

@ -15,6 +15,78 @@ format 1:
initializationData: initializationData:
data = length 33, hash D3FB879D data = length 33, hash D3FB879D
data = length 10, hash 7A0D0F2B data = length 10, hash 7A0D0F2B
sample:
trackIndex = 0
dataHashCode = -212376212
size = 20
isKeyFrame = true
presentationTimeUs = 0
sample:
trackIndex = 0
dataHashCode = -1948569090
size = 72
isKeyFrame = true
presentationTimeUs = 417
sample:
trackIndex = 0
dataHashCode = -1316750072
size = 84
isKeyFrame = true
presentationTimeUs = 1917
sample:
trackIndex = 0
dataHashCode = 1016428949
size = 88
isKeyFrame = true
presentationTimeUs = 3667
sample:
trackIndex = 0
dataHashCode = -1127325245
size = 96
isKeyFrame = true
presentationTimeUs = 5500
sample:
trackIndex = 0
dataHashCode = 1148147726
size = 92
isKeyFrame = true
presentationTimeUs = 7500
sample:
trackIndex = 0
dataHashCode = -2125685540
size = 76
isKeyFrame = true
presentationTimeUs = 9417
sample:
trackIndex = 0
dataHashCode = 473329679
size = 24
isKeyFrame = true
presentationTimeUs = 11000
sample:
trackIndex = 0
dataHashCode = 240990900
size = 176
isKeyFrame = true
presentationTimeUs = 11500
sample:
trackIndex = 0
dataHashCode = 777637182
size = 196
isKeyFrame = true
presentationTimeUs = 15167
sample:
trackIndex = 0
dataHashCode = 1872106264
size = 180
isKeyFrame = true
presentationTimeUs = 19250
sample:
trackIndex = 0
dataHashCode = -1520711499
size = 140
isKeyFrame = true
presentationTimeUs = 23000
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = 1949079733 dataHashCode = 1949079733
@ -123,78 +195,6 @@ sample:
size = 1109 size = 1109
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 600750 presentationTimeUs = 600750
sample:
trackIndex = 0
dataHashCode = -212376212
size = 20
isKeyFrame = true
presentationTimeUs = 0
sample:
trackIndex = 0
dataHashCode = -1948569090
size = 72
isKeyFrame = true
presentationTimeUs = 417
sample:
trackIndex = 0
dataHashCode = -1316750072
size = 84
isKeyFrame = true
presentationTimeUs = 1917
sample:
trackIndex = 0
dataHashCode = 1016428949
size = 88
isKeyFrame = true
presentationTimeUs = 3667
sample:
trackIndex = 0
dataHashCode = -1127325245
size = 96
isKeyFrame = true
presentationTimeUs = 5500
sample:
trackIndex = 0
dataHashCode = 1148147726
size = 92
isKeyFrame = true
presentationTimeUs = 7500
sample:
trackIndex = 0
dataHashCode = -2125685540
size = 76
isKeyFrame = true
presentationTimeUs = 9417
sample:
trackIndex = 0
dataHashCode = 473329679
size = 24
isKeyFrame = true
presentationTimeUs = 11000
sample:
trackIndex = 0
dataHashCode = 240990900
size = 176
isKeyFrame = true
presentationTimeUs = 11500
sample:
trackIndex = 0
dataHashCode = 777637182
size = 196
isKeyFrame = true
presentationTimeUs = 15167
sample:
trackIndex = 0
dataHashCode = 1872106264
size = 180
isKeyFrame = true
presentationTimeUs = 19250
sample:
trackIndex = 0
dataHashCode = -1520711499
size = 140
isKeyFrame = true
presentationTimeUs = 23000
sample: sample:
trackIndex = 0 trackIndex = 0
dataHashCode = 1580199067 dataHashCode = 1580199067

View File

@ -27,6 +27,12 @@ format 1:
initializationData: initializationData:
data = length 31, hash 4B108214 data = length 31, hash 4B108214
data = length 9, hash FBA158BB data = length 9, hash FBA158BB
sample:
trackIndex = 0
dataHashCode = 620415738
size = 508
isKeyFrame = true
presentationTimeUs = 7020
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = 983000500 dataHashCode = 983000500
@ -219,18 +225,18 @@ sample:
size = 151 size = 151
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 516666 presentationTimeUs = 516666
sample:
trackIndex = 0
dataHashCode = 620415738
size = 508
isKeyFrame = true
presentationTimeUs = 7020
sample: sample:
trackIndex = 0 trackIndex = 0
dataHashCode = 33931768 dataHashCode = 33931768
size = 504 size = 504
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 28354 presentationTimeUs = 28354
sample:
trackIndex = 1
dataHashCode = 264118578
size = 2235
isKeyFrame = false
presentationTimeUs = 533333
sample: sample:
trackIndex = 0 trackIndex = 0
dataHashCode = 800699278 dataHashCode = 800699278
@ -370,17 +376,23 @@ sample:
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 519020 presentationTimeUs = 519020
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 264118578 dataHashCode = 204379389
size = 2235 size = 504
isKeyFrame = false isKeyFrame = true
presentationTimeUs = 533333 presentationTimeUs = 540354
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = 64254117 dataHashCode = 64254117
size = 164 size = 164
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 550000 presentationTimeUs = 550000
sample:
trackIndex = 0
dataHashCode = 694913274
size = 508
isKeyFrame = true
presentationTimeUs = 561687
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = -1000078879 dataHashCode = -1000078879
@ -556,23 +568,29 @@ sample:
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 1033333 presentationTimeUs = 1033333
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 204379389 dataHashCode = 65238903
size = 504 size = 163
isKeyFrame = true isKeyFrame = false
presentationTimeUs = 540354 presentationTimeUs = 1050000
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 694913274 dataHashCode = 1720840922
size = 508 size = 2043
isKeyFrame = true isKeyFrame = false
presentationTimeUs = 561687 presentationTimeUs = 1066666
sample: sample:
trackIndex = 0 trackIndex = 0
dataHashCode = 289018778 dataHashCode = 289018778
size = 513 size = 513
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 583020 presentationTimeUs = 583020
sample:
trackIndex = 1
dataHashCode = -1006231050
size = 178
isKeyFrame = false
presentationTimeUs = 1083333
sample: sample:
trackIndex = 0 trackIndex = 0
dataHashCode = -693167785 dataHashCode = -693167785
@ -700,29 +718,35 @@ sample:
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 1031020 presentationTimeUs = 1031020
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 65238903 dataHashCode = -320096195
size = 163 size = 509
isKeyFrame = false isKeyFrame = true
presentationTimeUs = 1050000 presentationTimeUs = 1052354
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 1720840922 dataHashCode = -744850549
size = 2043 size = 511
isKeyFrame = false isKeyFrame = true
presentationTimeUs = 1066666 presentationTimeUs = 1073687
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -1006231050 dataHashCode = 1457899387
size = 178 size = 505
isKeyFrame = false isKeyFrame = true
presentationTimeUs = 1083333 presentationTimeUs = 1095020
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = 1742965952 dataHashCode = 1742965952
size = 2022 size = 2022
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 1100000 presentationTimeUs = 1100000
sample:
trackIndex = 0
dataHashCode = 168118808
size = 519
isKeyFrame = true
presentationTimeUs = 1116354
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = -971065365 dataHashCode = -971065365
@ -861,30 +885,6 @@ sample:
size = 119 size = 119
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 1483333 presentationTimeUs = 1483333
sample:
trackIndex = 0
dataHashCode = -320096195
size = 509
isKeyFrame = true
presentationTimeUs = 1052354
sample:
trackIndex = 0
dataHashCode = -744850549
size = 511
isKeyFrame = true
presentationTimeUs = 1073687
sample:
trackIndex = 0
dataHashCode = 1457899387
size = 505
isKeyFrame = true
presentationTimeUs = 1095020
sample:
trackIndex = 0
dataHashCode = 168118808
size = 519
isKeyFrame = true
presentationTimeUs = 1116354
sample: sample:
trackIndex = 0 trackIndex = 0
dataHashCode = 896298799 dataHashCode = 896298799

View File

@ -17,7 +17,6 @@
package androidx.media3.transformer; package androidx.media3.transformer;
import static androidx.media3.common.util.Assertions.checkNotNull; import static androidx.media3.common.util.Assertions.checkNotNull;
import static androidx.media3.common.util.Assertions.checkStateNotNull;
import static androidx.media3.transformer.TransformationException.ERROR_CODE_MUXING_FAILED; import static androidx.media3.transformer.TransformationException.ERROR_CODE_MUXING_FAILED;
import static androidx.media3.transformer.Transformer.PROGRESS_STATE_AVAILABLE; import static androidx.media3.transformer.Transformer.PROGRESS_STATE_AVAILABLE;
import static androidx.media3.transformer.Transformer.PROGRESS_STATE_UNAVAILABLE; import static androidx.media3.transformer.Transformer.PROGRESS_STATE_UNAVAILABLE;
@ -91,7 +90,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
private static final int MSG_DRAIN_PIPELINES = 4; private static final int MSG_DRAIN_PIPELINES = 4;
private static final int MSG_END = 5; private static final int MSG_END = 5;
private static final int DRAIN_PIPELINES_DELAY_MS = 10; private static final int DRAIN_PIPELINES_DELAY_MS = 50;
private final Context context; private final Context context;
private final TransformationRequest transformationRequest; private final TransformationRequest transformationRequest;
@ -223,13 +222,13 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
startInternal(); startInternal();
break; break;
case MSG_REGISTER_SAMPLE_PIPELINE: case MSG_REGISTER_SAMPLE_PIPELINE:
samplePipelines.add((SamplePipeline) msg.obj); registerSamplePipelineInternal((SamplePipeline) msg.obj);
break; break;
case MSG_DEQUEUE_INPUT: case MSG_DEQUEUE_INPUT:
dequeueInputInternal(/* samplePipelineIndex= */ msg.arg1); dequeueInputInternal(/* samplePipelineIndex= */ msg.arg1);
break; break;
case MSG_QUEUE_INPUT: case MSG_QUEUE_INPUT:
queueInputInternal(/* samplePipelineIndex= */ msg.arg1); samplePipelines.get(/* samplePipelineIndex= */ msg.arg1).queueInputBuffer();
break; break;
case MSG_DRAIN_PIPELINES: case MSG_DRAIN_PIPELINES:
drainPipelinesInternal(); drainPipelinesInternal();
@ -254,12 +253,19 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
exoPlayerAssetLoader.start(); exoPlayerAssetLoader.start();
} }
private void registerSamplePipelineInternal(SamplePipeline samplePipeline) {
samplePipelines.add(samplePipeline);
if (!isDrainingPipelines) {
// Make sure pipelines are drained regularly to prevent them from getting stuck.
internalHandler.sendEmptyMessageDelayed(MSG_DRAIN_PIPELINES, DRAIN_PIPELINES_DELAY_MS);
isDrainingPipelines = true;
}
}
private void dequeueInputInternal(int samplePipelineIndex) throws TransformationException { private void dequeueInputInternal(int samplePipelineIndex) throws TransformationException {
SamplePipeline samplePipeline = samplePipelines.get(samplePipelineIndex); SamplePipeline samplePipeline = samplePipelines.get(samplePipelineIndex);
// The sample pipeline is drained before dequeuing input. It can't be done before queuing // The sample pipeline is drained before dequeuing input to maximise the chances of having an
// input because, if the pipeline is full, dequeuing input would forever return a null buffer. // input buffer to dequeue.
// Draining the pipeline at regular intervals would be inefficient because a low interval could
// result in many no-op operations, and a high interval could slow down data queuing.
while (samplePipeline.processData()) {} while (samplePipeline.processData()) {}
pendingInputBuffer = samplePipeline.dequeueInputBuffer(); pendingInputBuffer = samplePipeline.dequeueInputBuffer();
dequeueBufferConditionVariable.open(); dequeueBufferConditionVariable.open();
@ -269,15 +275,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
} }
} }
private void queueInputInternal(int samplePipelineIndex) throws TransformationException {
DecoderInputBuffer pendingInputBuffer = checkStateNotNull(this.pendingInputBuffer);
samplePipelines.get(samplePipelineIndex).queueInputBuffer();
if (pendingInputBuffer.isEndOfStream() && !isDrainingPipelines) {
internalHandler.sendEmptyMessageDelayed(MSG_DRAIN_PIPELINES, DRAIN_PIPELINES_DELAY_MS);
isDrainingPipelines = true;
}
}
private void drainPipelinesInternal() throws TransformationException { private void drainPipelinesInternal() throws TransformationException {
for (int i = 0; i < samplePipelines.size(); i++) { for (int i = 0; i < samplePipelines.size(); i++) {
while (samplePipelines.get(i).processData()) {} while (samplePipelines.get(i).processData()) {}