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

Commit e126d3f0 authored by Diogo Ferreira's avatar Diogo Ferreira Committed by Ricardo Cerqueira
Browse files

mediatek: Port AV changes

This ports the changes required to perform video decoding
and enconding.

The changes are ported from the mediatek BSP for mt6592
with the minimum required feature set and confined to
allow co-existance with changes from other vendors.

[Trimmed down for L]

Change-Id: I3709de0e5b9e4e0f68a71e182549e72a3dab26a7
parent eb994da9
Loading
Loading
Loading
Loading
+6 −0
Original line number Original line Diff line number Diff line
@@ -661,6 +661,12 @@ status_t ACodec::configureOutputBuffersFromNativeWindow(
    def.format.video.nFrameWidth,
    def.format.video.nFrameWidth,
    def.format.video.nFrameHeight,
    def.format.video.nFrameHeight,
    eNativeColorFormat);
    eNativeColorFormat);
#elif defined(MTK_HARDWARE)
    err = native_window_set_buffers_geometry(
            mNativeWindow.get(),
            def.format.video.nStride,
            def.format.video.nSliceHeight,
            def.format.video.eColorFormat);
#else
#else
    err = native_window_set_buffers_geometry(
    err = native_window_set_buffers_geometry(
            mNativeWindow.get(),
            mNativeWindow.get(),
+18 −0
Original line number Original line Diff line number Diff line
@@ -235,6 +235,9 @@ AwesomePlayer::AwesomePlayer()
      mTextDriver(NULL),
      mTextDriver(NULL),
      mOffloadAudio(false),
      mOffloadAudio(false),
      mAudioTearDown(false),
      mAudioTearDown(false),
#ifdef MTK_HARDWARE
      mAVSyncTimeUs(-1),
#endif
      mIsFirstFrameAfterResume(false),
      mIsFirstFrameAfterResume(false),
      mConsumeRights(true) {
      mConsumeRights(true) {
    CHECK_EQ(mClient.connect(), (status_t)OK);
    CHECK_EQ(mClient.connect(), (status_t)OK);
@@ -2077,6 +2080,17 @@ void AwesomePlayer::setVideoSource(sp<MediaSource> source) {
    mVideoTrack = source;
    mVideoTrack = source;
}
}


#ifdef MTK_HARDWARE
void AwesomePlayer::mtk_omx_get_current_time(int64_t* pReal_time) {
    if((mFlags & FIRST_FRAME) || mSeeking == SEEK) {
            *pReal_time = -1;
    } else {
            *pReal_time = mAVSyncTimeUs;
    }

}
#endif

status_t AwesomePlayer::initVideoDecoder(uint32_t flags) {
status_t AwesomePlayer::initVideoDecoder(uint32_t flags) {
    ATRACE_CALL();
    ATRACE_CALL();


@@ -2463,6 +2477,10 @@ void AwesomePlayer::onVideoEvent() {
        nowUs = ts->getRealTimeUs() - mTimeSourceDeltaUs;
        nowUs = ts->getRealTimeUs() - mTimeSourceDeltaUs;


        latenessUs = nowUs - timeUs;
        latenessUs = nowUs - timeUs;
#ifdef MTK_HARDWARE
        mAVSyncTimeUs = nowUs;
#endif



        ATRACE_INT("Video Lateness (ms)", latenessUs / 1E3);
        ATRACE_INT("Video Lateness (ms)", latenessUs / 1E3);


+17 −7
Original line number Original line Diff line number Diff line
@@ -2193,21 +2193,27 @@ status_t OMXCodec::allocateOutputBuffersFromNativeWindow() {
        return err;
        return err;
    }
    }


#ifndef USE_SAMSUNG_COLORFORMAT
#ifdef USE_SAMSUNG_COLORFORMAT
    OMX_COLOR_FORMATTYPE eNativeColorFormat = def.format.video.eColorFormat;
    setNativeWindowColorFormat(eNativeColorFormat);

    err = native_window_set_buffers_geometry(
    err = native_window_set_buffers_geometry(
    mNativeWindow.get(),
    mNativeWindow.get(),
    def.format.video.nFrameWidth,
    def.format.video.nFrameWidth,
    def.format.video.nFrameHeight,
    def.format.video.nFrameHeight,
    eNativeColorFormat);
#elif defined(MTK_HARDWARE)
    err = native_window_set_buffers_geometry(
            mNativeWindow.get(),
            def.format.video.nStride,
            def.format.video.nSliceHeight,
            def.format.video.eColorFormat);
            def.format.video.eColorFormat);
#else
#else
    OMX_COLOR_FORMATTYPE eNativeColorFormat = def.format.video.eColorFormat;
    setNativeWindowColorFormat(eNativeColorFormat);

    err = native_window_set_buffers_geometry(
    err = native_window_set_buffers_geometry(
            mNativeWindow.get(),
            mNativeWindow.get(),
            def.format.video.nFrameWidth,
            def.format.video.nFrameWidth,
            def.format.video.nFrameHeight,
            def.format.video.nFrameHeight,
    eNativeColorFormat);
            def.format.video.eColorFormat);
#endif
#endif


    if (err != 0) {
    if (err != 0) {
@@ -2258,6 +2264,10 @@ status_t OMXCodec::allocateOutputBuffersFromNativeWindow() {


    ALOGV("native_window_set_usage usage=0x%lx", usage);
    ALOGV("native_window_set_usage usage=0x%lx", usage);


#ifdef MTK_HARDWARE
    usage |= (GRALLOC_USAGE_SW_WRITE_OFTEN | GRALLOC_USAGE_SW_READ_OFTEN);
#endif

#ifdef EXYNOS4_ENHANCEMENTS
#ifdef EXYNOS4_ENHANCEMENTS
    err = native_window_set_usage(
    err = native_window_set_usage(
            mNativeWindow.get(), usage | GRALLOC_USAGE_HW_TEXTURE | GRALLOC_USAGE_EXTERNAL_DISP
            mNativeWindow.get(), usage | GRALLOC_USAGE_HW_TEXTURE | GRALLOC_USAGE_EXTERNAL_DISP
+6 −0
Original line number Original line Diff line number Diff line
@@ -114,6 +114,9 @@ struct AwesomePlayer {
    void postAudioSeekComplete();
    void postAudioSeekComplete();
    void postAudioTearDown();
    void postAudioTearDown();
    void printFileName(int fd);
    void printFileName(int fd);
#ifdef MTK_HARDWARE
    void mtk_omx_get_current_time(int64_t* pReal_time);
#endif


    status_t dump(int fd, const Vector<String16> &args) const;
    status_t dump(int fd, const Vector<String16> &args) const;


@@ -423,6 +426,9 @@ private:


    AwesomePlayer(const AwesomePlayer &);
    AwesomePlayer(const AwesomePlayer &);
    AwesomePlayer &operator=(const AwesomePlayer &);
    AwesomePlayer &operator=(const AwesomePlayer &);
#ifdef MTK_HARDWARE
    int64_t mAVSyncTimeUs;
#endif
};
};


}  // namespace android
}  // namespace android