libmix: report missing reference frame in AVC decoder
BZ: 147912
1)record the reference frame missing in updateDPB.
2)change the variable name to keep coding style consistency.
Change-Id: Ib305e3cfe03a2f060e26730c8aab422d2e7afbae
Signed-off-by: Dan Liang <dan.liang@intel.com>
Signed-off-by: pingshix <pingx.shi@intel.com>
diff --git a/videodecoder/VideoDecoderAVC.cpp b/videodecoder/VideoDecoderAVC.cpp
index 6396440..67ce66f 100644
--- a/videodecoder/VideoDecoderAVC.cpp
+++ b/videodecoder/VideoDecoderAVC.cpp
@@ -445,6 +445,9 @@
dpb->surfaceBuffer = findRefSurfaceBuffer(ref);
if (dpb->surfaceBuffer == NULL) {
ETRACE("Reference frame %d is missing for current frame %d", dpb->poc, getPOC(&(picParam->CurrPic)));
+ // Error DecodeRefMissing is counted once even there're multiple
+ mAcquiredBuffer->renderBuffer.errBuf.errorNumber = 1;
+ mAcquiredBuffer->renderBuffer.errBuf.errorArray[0].type = DecodeRefMissing;
if (dpb->poc == getPOC(&(picParam->CurrPic))) {
WTRACE("updateDPB: Using the current picture for missing reference.");
dpb->surfaceBuffer = mAcquiredBuffer;
diff --git a/videodecoder/VideoDecoderBase.cpp b/videodecoder/VideoDecoderBase.cpp
index eaacfff..bb3bef5 100644
--- a/videodecoder/VideoDecoderBase.cpp
+++ b/videodecoder/VideoDecoderBase.cpp
@@ -1345,29 +1345,29 @@
return DECODE_SUCCESS;
}
-void VideoDecoderBase::drainDecodingErrors(VideoErrorBuffer *outErrBuf, VideoRenderBuffer *CurrentSurface) {
- if (mErrReportEnabled && outErrBuf && CurrentSurface) {
- memcpy(outErrBuf, &(CurrentSurface->errBuf), sizeof(VideoErrorBuffer));
+void VideoDecoderBase::drainDecodingErrors(VideoErrorBuffer *outErrBuf, VideoRenderBuffer *currentSurface) {
+ if (mErrReportEnabled && outErrBuf && currentSurface) {
+ memcpy(outErrBuf, &(currentSurface->errBuf), sizeof(VideoErrorBuffer));
- CurrentSurface->errBuf.errorNumber = 0;
- CurrentSurface->errBuf.timeStamp = INVALID_PTS;
+ currentSurface->errBuf.errorNumber = 0;
+ currentSurface->errBuf.timeStamp = INVALID_PTS;
}
}
-void VideoDecoderBase::fillDecodingErrors(VideoRenderBuffer *CurrentSurface) {
+void VideoDecoderBase::fillDecodingErrors(VideoRenderBuffer *currentSurface) {
VAStatus ret;
if (mErrReportEnabled) {
- CurrentSurface->errBuf.timeStamp = CurrentSurface->timeStamp;
+ currentSurface->errBuf.timeStamp = currentSurface->timeStamp;
// TODO: is 10 a suitable number?
VASurfaceDecodeMBErrors *err_drv_output;
- ret = vaQuerySurfaceError(mVADisplay, CurrentSurface->surface, VA_STATUS_ERROR_DECODING_ERROR, (void **)&err_drv_output);
+ ret = vaQuerySurfaceError(mVADisplay, currentSurface->surface, VA_STATUS_ERROR_DECODING_ERROR, (void **)&err_drv_output);
if (ret)
return;
- for (int i = CurrentSurface->errBuf.errorNumber; i < MAX_ERR_NUM - 1; i++) {
+ for (int i = currentSurface->errBuf.errorNumber; i < MAX_ERR_NUM - 1; i++) {
if (err_drv_output[i].status != -1) {
- CurrentSurface->errBuf.errorNumber++;
- CurrentSurface->errBuf.errorArray[i].type = (VideoDecodeErrorType)err_drv_output[i].decode_error_type;
+ currentSurface->errBuf.errorNumber++;
+ currentSurface->errBuf.errorArray[i].type = (VideoDecodeErrorType)err_drv_output[i].decode_error_type;
}
}
}
diff --git a/videodecoder/VideoDecoderBase.h b/videodecoder/VideoDecoderBase.h
index dcc1548..6bd0d1b 100644
--- a/videodecoder/VideoDecoderBase.h
+++ b/videodecoder/VideoDecoderBase.h
@@ -98,8 +98,8 @@
private:
Decode_Status mapSurface(void);
void initSurfaceBuffer(bool reset);
- void drainDecodingErrors(VideoErrorBuffer *outErrBuf, VideoRenderBuffer *CurrentSurface);
- void fillDecodingErrors(VideoRenderBuffer *CurrentSurface);
+ void drainDecodingErrors(VideoErrorBuffer *outErrBuf, VideoRenderBuffer *currentSurface);
+ void fillDecodingErrors(VideoRenderBuffer *currentSurface);
bool mInitialized;
pthread_mutex_t mLock;