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

Commit 640f4d5d authored by Deva Ramasubramanian's avatar Deva Ramasubramanian Committed by Ricardo Cerqueira
Browse files

libstagefright: Add interlaced video support

Stagefright waits for the Index Settings changed event to be propagated
to it from the component. If interlaced, appropriate flags are given to
the native window.

Change-Id: I240c5139232c6905c3de7632885736147d5f70b1
(cherry picked from commit ce070db0c8d491218adb9a8386116d39909813e9)
parent f27af98f
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -84,7 +84,7 @@ LOCAL_C_INCLUDES+= \
        $(TOP)/frameworks/base/include/media/stagefright/openmax \
        $(TOP)/external/flac/include \
        $(TOP)/external/tremolo \
        $(TOP)/external/openssl/include \
        $(TOP)/external/openssl/include

LOCAL_SHARED_LIBRARIES := \
        libbinder         \
+26 −1
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved.
#include <OMX_QCOMExtns.h>

#include <gralloc_priv.h>
#include <qcom_ui.h>
#include <QOMX_AudioExtensions.h>
#endif
#include "include/avc_utils.h"
@@ -2293,6 +2294,8 @@ status_t OMXCodec::allocateOutputBuffersFromNativeWindow() {
                 HAL_PIXEL_FORMAT_YCbCr_420_SP_TILED : def.format.video.eColorFormat;
    if(def.format.video.eColorFormat == OMX_QCOM_COLOR_FormatYVU420SemiPlanar)
        format = HAL_PIXEL_FORMAT_YCrCb_420_SP;

    format ^= (mInterlaceFormatDetected ? HAL_PIXEL_FORMAT_INTERLACE : 0);
#endif

#ifndef SAMSUNG_CODEC_SUPPORT
@@ -2435,6 +2438,16 @@ status_t OMXCodec::allocateOutputBuffersFromNativeWindow() {
        return err;
    }

#ifdef QCOM_HARDWARE
    err = mNativeWindow.get()->perform(mNativeWindow.get(),
                             NATIVE_WINDOW_SET_BUFFERS_SIZE, def.nBufferSize);
    if (err != 0) {
        LOGE("native_window_set_buffers_size failed: %s (%d)", strerror(-err),
                -err);
        return err;
    }
#endif

    CODEC_LOGV("allocating %lu buffers from a native window of size %lu on "
            "output port", def.nBufferCountActual, def.nBufferSize);

@@ -3103,7 +3116,19 @@ void OMXCodec::onEvent(OMX_EVENTTYPE event, OMX_U32 data1, OMX_U32 data2) {
            }
            break;
        }

#ifdef QCOM_HARDWARE
        case OMX_EventIndexsettingChanged:
        {
            OMX_INTERLACETYPE format = (OMX_INTERLACETYPE)data1;
            if (format == OMX_InterlaceInterleaveFrameTopFieldFirst ||
                format == OMX_InterlaceInterleaveFrameBottomFieldFirst)
            {
                mInterlaceFormatDetected = true;
                LOGW("Interlace detected");
            }
            break;
        }
#endif
#if 0
        case OMX_EventBufferFlag:
        {