Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b8b11e9e authored by Wonsik Kim's avatar Wonsik Kim Committed by android-build-merger
Browse files

Merge "codecs: check OMX buffer size before use in VP8 encoder." into lmp-dev...

Merge "codecs: check OMX buffer size before use in VP8 encoder." into lmp-dev am: 19a06a9c am: 881b2274 am: ead21cee am: 800e972c am: 73acbbb2
am: 274250ff

* commit '274250ff':
  codecs: check OMX buffer size before use in VP8 encoder.
parents 297a8d26 274250ff
Loading
Loading
Loading
Loading
+22 −6
Original line number Diff line number Diff line
@@ -729,9 +729,10 @@ void SoftVPXEncoder::onQueueFilled(OMX_U32 /* portIndex */) {
        const uint8_t *source =
            inputBufferHeader->pBuffer + inputBufferHeader->nOffset;

        size_t frameSize = mWidth * mHeight * 3 / 2;
        if (mInputDataIsMeta) {
            source = extractGraphicBuffer(
                    mConversionBuffer, mWidth * mHeight * 3 / 2,
                    mConversionBuffer, frameSize,
                    source, inputBufferHeader->nFilledLen,
                    mWidth, mHeight);
            if (source == NULL) {
@@ -739,12 +740,22 @@ void SoftVPXEncoder::onQueueFilled(OMX_U32 /* portIndex */) {
                notify(OMX_EventError, OMX_ErrorUndefined, 0, 0);
                return;
            }
        } else if (mColorFormat == OMX_COLOR_FormatYUV420SemiPlanar) {
        } else {
            if (inputBufferHeader->nFilledLen < frameSize) {
                android_errorWriteLog(0x534e4554, "27569635");
                notify(OMX_EventError, OMX_ErrorUndefined, 0, 0);
                return;
            } else if (inputBufferHeader->nFilledLen > frameSize) {
                ALOGW("Input buffer contains too many pixels");
            }

            if (mColorFormat == OMX_COLOR_FormatYUV420SemiPlanar) {
                ConvertYUV420SemiPlanarToYUV420Planar(
                        source, mConversionBuffer, mWidth, mHeight);

                source = mConversionBuffer;
            }
        }
        vpx_image_t raw_frame;
        vpx_img_wrap(&raw_frame, VPX_IMG_FMT_I420, mWidth, mHeight,
                     kInputBufferAlignment, (uint8_t *)source);
@@ -808,6 +819,11 @@ void SoftVPXEncoder::onQueueFilled(OMX_U32 /* portIndex */) {
                    outputBufferHeader->nFlags |= OMX_BUFFERFLAG_SYNCFRAME;
                outputBufferHeader->nOffset = 0;
                outputBufferHeader->nFilledLen = encoded_packet->data.frame.sz;
                if (outputBufferHeader->nFilledLen > outputBufferHeader->nAllocLen) {
                    android_errorWriteLog(0x534e4554, "27569635");
                    notify(OMX_EventError, OMX_ErrorUndefined, 0, 0);
                    return;
                }
                memcpy(outputBufferHeader->pBuffer,
                       encoded_packet->data.frame.buf,
                       encoded_packet->data.frame.sz);