fix EOS handling in codec test.
Change-Id: I5eb6d00aa0c1a728a951c7ffa4faebcadd7b14a6
This commit is contained in:
@@ -49,6 +49,7 @@ struct CodecState {
|
||||
size_t mCSDIndex;
|
||||
Vector<sp<ABuffer> > mInBuffers;
|
||||
Vector<sp<ABuffer> > mOutBuffers;
|
||||
bool mSignalledInputEOS;
|
||||
bool mSawOutputEOS;
|
||||
int64_t mNumBuffersDecoded;
|
||||
int64_t mNumBytesDecoded;
|
||||
@@ -127,6 +128,7 @@ static int decode(
|
||||
}
|
||||
|
||||
state->mCSDIndex = 0;
|
||||
state->mSignalledInputEOS = false;
|
||||
state->mSawOutputEOS = false;
|
||||
|
||||
ALOGV("got %d pieces of codec specific data.", state->mCSD.size());
|
||||
@@ -180,33 +182,7 @@ static int decode(
|
||||
status_t err = extractor->getSampleTrackIndex(&trackIndex);
|
||||
|
||||
if (err != OK) {
|
||||
ALOGV("signalling EOS.");
|
||||
|
||||
for (size_t i = 0; i < stateByTrack.size(); ++i) {
|
||||
CodecState *state = &stateByTrack.editValueAt(i);
|
||||
|
||||
for (;;) {
|
||||
size_t index;
|
||||
err = state->mCodec->dequeueInputBuffer(&index, kTimeout);
|
||||
|
||||
if (err == -EAGAIN) {
|
||||
continue;
|
||||
}
|
||||
|
||||
CHECK_EQ(err, (status_t)OK);
|
||||
|
||||
err = state->mCodec->queueInputBuffer(
|
||||
index,
|
||||
0 /* offset */,
|
||||
0 /* size */,
|
||||
0ll /* timeUs */,
|
||||
MediaCodec::BUFFER_FLAG_EOS);
|
||||
|
||||
CHECK_EQ(err, (status_t)OK);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ALOGV("saw input eos");
|
||||
sawInputEOS = true;
|
||||
} else {
|
||||
CodecState *state = &stateByTrack.editValueFor(trackIndex);
|
||||
@@ -240,6 +216,33 @@ static int decode(
|
||||
CHECK_EQ(err, -EAGAIN);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (size_t i = 0; i < stateByTrack.size(); ++i) {
|
||||
CodecState *state = &stateByTrack.editValueAt(i);
|
||||
|
||||
if (!state->mSignalledInputEOS) {
|
||||
size_t index;
|
||||
status_t err =
|
||||
state->mCodec->dequeueInputBuffer(&index, kTimeout);
|
||||
|
||||
if (err == OK) {
|
||||
ALOGV("signalling input EOS on track %d", i);
|
||||
|
||||
err = state->mCodec->queueInputBuffer(
|
||||
index,
|
||||
0 /* offset */,
|
||||
0 /* size */,
|
||||
0ll /* timeUs */,
|
||||
MediaCodec::BUFFER_FLAG_EOS);
|
||||
|
||||
CHECK_EQ(err, (status_t)OK);
|
||||
|
||||
state->mSignalledInputEOS = true;
|
||||
} else {
|
||||
CHECK_EQ(err, -EAGAIN);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool sawOutputEOSOnAllTracks = true;
|
||||
|
||||
Reference in New Issue
Block a user