Loading media/libstagefright/codecs/avc/dec/AVCDecoder.cpp +35 −2 Original line number Diff line number Diff line Loading @@ -14,6 +14,10 @@ * limitations under the License. */ //#define LOG_NDEBUG 0 #define LOG_TAG "AVCDecoder" #include <utils/Log.h> #include "AVCDecoder.h" #include "avcdec_api.h" Loading Loading @@ -44,7 +48,8 @@ AVCDecoder::AVCDecoder(const sp<MediaSource> &source) mHandle(new tagAVCHandle), mInputBuffer(NULL), mAnchorTimeUs(0), mNumSamplesOutput(0) { mNumSamplesOutput(0), mPendingSeekTimeUs(-1) { memset(mHandle, 0, sizeof(tagAVCHandle)); mHandle->AVCObject = NULL; mHandle->userData = this; Loading Loading @@ -152,6 +157,7 @@ status_t AVCDecoder::start(MetaData *) { mAnchorTimeUs = 0; mNumSamplesOutput = 0; mPendingSeekTimeUs = -1; mStarted = true; return OK; Loading Loading @@ -195,6 +201,21 @@ status_t AVCDecoder::read( MediaBuffer **out, const ReadOptions *options) { *out = NULL; int64_t seekTimeUs; if (options && options->getSeekTo(&seekTimeUs)) { LOGV("seek requested to %lld us (%.2f secs)", seekTimeUs, seekTimeUs / 1E6); CHECK(seekTimeUs >= 0); mPendingSeekTimeUs = seekTimeUs; if (mInputBuffer) { mInputBuffer->release(); mInputBuffer = NULL; } PVAVCDecReset(mHandle); } if (mInputBuffer == NULL) { LOGV("fetching new input buffer."); Loading @@ -203,7 +224,19 @@ status_t AVCDecoder::read( mCodecSpecificData.removeAt(0); } else { for (;;) { status_t err = mSource->read(&mInputBuffer); if (mPendingSeekTimeUs >= 0) { LOGV("reading data from timestamp %lld (%.2f secs)", mPendingSeekTimeUs, mPendingSeekTimeUs / 1E6); } ReadOptions seekOptions; if (mPendingSeekTimeUs >= 0) { seekOptions.setSeekTo(mPendingSeekTimeUs); mPendingSeekTimeUs = -1; } status_t err = mSource->read(&mInputBuffer, &seekOptions); seekOptions.clearSeekTo(); if (err != OK) { return err; } Loading media/libstagefright/include/AVCDecoder.h +1 −0 Original line number Diff line number Diff line Loading @@ -57,6 +57,7 @@ private: int64_t mAnchorTimeUs; int64_t mNumSamplesOutput; int64_t mPendingSeekTimeUs; void addCodecSpecificData(const uint8_t *data, size_t size); Loading Loading
media/libstagefright/codecs/avc/dec/AVCDecoder.cpp +35 −2 Original line number Diff line number Diff line Loading @@ -14,6 +14,10 @@ * limitations under the License. */ //#define LOG_NDEBUG 0 #define LOG_TAG "AVCDecoder" #include <utils/Log.h> #include "AVCDecoder.h" #include "avcdec_api.h" Loading Loading @@ -44,7 +48,8 @@ AVCDecoder::AVCDecoder(const sp<MediaSource> &source) mHandle(new tagAVCHandle), mInputBuffer(NULL), mAnchorTimeUs(0), mNumSamplesOutput(0) { mNumSamplesOutput(0), mPendingSeekTimeUs(-1) { memset(mHandle, 0, sizeof(tagAVCHandle)); mHandle->AVCObject = NULL; mHandle->userData = this; Loading Loading @@ -152,6 +157,7 @@ status_t AVCDecoder::start(MetaData *) { mAnchorTimeUs = 0; mNumSamplesOutput = 0; mPendingSeekTimeUs = -1; mStarted = true; return OK; Loading Loading @@ -195,6 +201,21 @@ status_t AVCDecoder::read( MediaBuffer **out, const ReadOptions *options) { *out = NULL; int64_t seekTimeUs; if (options && options->getSeekTo(&seekTimeUs)) { LOGV("seek requested to %lld us (%.2f secs)", seekTimeUs, seekTimeUs / 1E6); CHECK(seekTimeUs >= 0); mPendingSeekTimeUs = seekTimeUs; if (mInputBuffer) { mInputBuffer->release(); mInputBuffer = NULL; } PVAVCDecReset(mHandle); } if (mInputBuffer == NULL) { LOGV("fetching new input buffer."); Loading @@ -203,7 +224,19 @@ status_t AVCDecoder::read( mCodecSpecificData.removeAt(0); } else { for (;;) { status_t err = mSource->read(&mInputBuffer); if (mPendingSeekTimeUs >= 0) { LOGV("reading data from timestamp %lld (%.2f secs)", mPendingSeekTimeUs, mPendingSeekTimeUs / 1E6); } ReadOptions seekOptions; if (mPendingSeekTimeUs >= 0) { seekOptions.setSeekTo(mPendingSeekTimeUs); mPendingSeekTimeUs = -1; } status_t err = mSource->read(&mInputBuffer, &seekOptions); seekOptions.clearSeekTo(); if (err != OK) { return err; } Loading
media/libstagefright/include/AVCDecoder.h +1 −0 Original line number Diff line number Diff line Loading @@ -57,6 +57,7 @@ private: int64_t mAnchorTimeUs; int64_t mNumSamplesOutput; int64_t mPendingSeekTimeUs; void addCodecSpecificData(const uint8_t *data, size_t size); Loading