diff options
-rw-r--r-- | media/codec2/components/dav1d/C2SoftDav1dDec.cpp | 38 | ||||
-rw-r--r-- | media/libstagefright/codecs/m4v_h263/dec/SoftMPEG4.cpp | 7 |
2 files changed, 23 insertions, 22 deletions
diff --git a/media/codec2/components/dav1d/C2SoftDav1dDec.cpp b/media/codec2/components/dav1d/C2SoftDav1dDec.cpp index 10e4b79c24..76680a3790 100644 --- a/media/codec2/components/dav1d/C2SoftDav1dDec.cpp +++ b/media/codec2/components/dav1d/C2SoftDav1dDec.cpp @@ -648,6 +648,24 @@ void C2SoftDav1dDec::process(const std::unique_ptr<C2Work>& work, if (res == 0) { ALOGV("dav1d found a sequenceHeader (%dx%d) for in_frameIndex=%ld.", seq.max_width, seq.max_height, (long)in_frameIndex); + if (seq.max_width != mWidth || seq.max_height != mHeight) { + drainInternal(DRAIN_COMPONENT_NO_EOS, pool, work); + mWidth = seq.max_width; + mHeight = seq.max_height; + + C2StreamPictureSizeInfo::output size(0u, mWidth, mHeight); + std::vector<std::unique_ptr<C2SettingResult>> failures; + c2_status_t err = mIntf->config({&size}, C2_MAY_BLOCK, &failures); + if (err == C2_OK) { + work->worklets.front()->output.configUpdate.push_back(C2Param::Copy(size)); + } else { + ALOGE("Config update size failed"); + mSignalledError = true; + work->result = C2_CORRUPTED; + work->workletsProcessed = 1u; + return; + } + } } // insert OBU TD if it is not present. @@ -921,26 +939,6 @@ bool C2SoftDav1dDec::outputBuffer(const std::shared_ptr<C2BlockPool>& pool, return false; } - const int width = img.p.w; - const int height = img.p.h; - if (width != mWidth || height != mHeight) { - mWidth = width; - mHeight = height; - - C2StreamPictureSizeInfo::output size(0u, mWidth, mHeight); - std::vector<std::unique_ptr<C2SettingResult>> failures; - c2_status_t err = mIntf->config({&size}, C2_MAY_BLOCK, &failures); - if (err == C2_OK) { - work->worklets.front()->output.configUpdate.push_back(C2Param::Copy(size)); - } else { - ALOGE("Config update size failed"); - mSignalledError = true; - work->result = C2_CORRUPTED; - work->workletsProcessed = 1u; - return false; - } - } - getVuiParams(&img); // out_frameIndex that the decoded picture returns from dav1d. diff --git a/media/libstagefright/codecs/m4v_h263/dec/SoftMPEG4.cpp b/media/libstagefright/codecs/m4v_h263/dec/SoftMPEG4.cpp index a4b3e2f434..14c3fa0875 100644 --- a/media/libstagefright/codecs/m4v_h263/dec/SoftMPEG4.cpp +++ b/media/libstagefright/codecs/m4v_h263/dec/SoftMPEG4.cpp @@ -312,8 +312,11 @@ void SoftMPEG4::onQueueFilled(OMX_U32 /* portIndex */) { outHeader->nFilledLen = frameSize; List<BufferInfo *>::iterator it = outQueue.begin(); - while ((*it)->mHeader != outHeader) { - ++it; + while (it != outQueue.end() && (*it)->mHeader != outHeader) { + ++it; + } + if (it == outQueue.end()) { + return; } BufferInfo *outInfo = *it; |