17c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*
27c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project
37c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
47c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License");
57c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * you may not use this file except in compliance with the License.
67c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * You may obtain a copy of the License at
77c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
87c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *      http://www.apache.org/licenses/LICENSE-2.0
97c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Unless required by applicable law or agreed to in writing, software
117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS,
127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * See the License for the specific language governing permissions and
147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * limitations under the License.
157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*************************************************************************
197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @file   VideoEditorVideoDecoder_Internal.h
207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @brief  StageFright shell video decoder internal header file*
217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*************************************************************************
227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Types.h"
257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Debug.h"
267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Memory.h"
277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4_Common.h"
287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_CoreID.h"
297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4DA_Types.h"
317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4READER_Common.h"
327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4VIFI_FiltersAPI.h"
337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4TOOL_VersionInfo.h"
347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4DECODER_Common.h"
357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Semaphore.h"
367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "VideoEditorBuffer.h"
377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4VD_Tools.h"
382aa01fd002bba1dde45791c1138c1f71a8d0aa53Chih-Chung Chang#include "I420ColorConverter.h"
397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <utils/RefBase.h>
417efb8efc88ba529c1c57366a305855c2051ebb8bChih-Chung Chang#include <android/rect.h>
427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <OMX_Video.h>
437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/MediaErrors.h>
447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/OMXCodec.h>
457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/OMXClient.h>
467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/MediaSource.h>
477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/MediaBuffer.h>
487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/MediaBufferGroup.h>
497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/MediaDefs.h>
507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define VIDEOEDITOR_VIDEC_SHELL_VER_MAJOR     0
527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define VIDEOEDITOR_VIDEC_SHELL_VER_MINOR     0
537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define VIDEOEDITOR_VIDEC_SHELL_VER_REVISION  1
547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* ERRORS */
567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4ERR_SF_DECODER_RSRC_FAIL M4OSA_ERR_CREATE(M4_ERR, 0xFF, 0x0001)
577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundarginamespace android {
597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef enum {
617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    VIDEOEDITOR_kMpeg4VideoDec,
627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    VIDEOEDITOR_kH263VideoDec,
637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    VIDEOEDITOR_kH264VideoDec
647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} VIDEOEDITOR_CodecType;
657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*typedef struct{
687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 stream_byte;
697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 stream_index;
707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_MemAddr8 in;
717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} VIDEOEDITOR_VIDEO_Bitstream_ctxt;*/
737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef M4VS_Bitstream_ctxt VIDEOEDITOR_VIDEO_Bitstream_ctxt;
757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef struct {
777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /** Stagefrigth params */
797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    OMXClient               mClient; /**< OMX Client session instance. */
807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    sp<MediaSource>         mVideoDecoder; /**< Stagefright decoder instance */
817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    sp<MediaSource>         mReaderSource; /**< Reader access > */
827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* READER */
84b3626dda1df18de2398d6c91647c9d544dd5f6dcChih-Chung Chang    M4READER_GlobalInterface *m_pReaderGlobal;
857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4READER_DataInterface  *m_pReader;
867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4_AccessUnit           *m_pNextAccessUnitToDecode;
877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* STREAM PARAMS */
897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4_VideoStreamHandler*  m_pVideoStreamhandler;
907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* User filter params. */
927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VIFI_PlanConverterFunctionType *m_pFilter;
937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Void              *m_pFilterUserData;
947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4_MediaTime            m_lastDecodedCTS;
967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4_MediaTime            m_lastRenderCts;
977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Bool              mReachedEOS;
987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    VIDEOEDITOR_CodecType   mDecoderType;
997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4DECODER_VideoSize     m_VideoSize;
1007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4DECODER_MPEG4_DecoderConfigInfo m_Dci; /**< Decoder Config info */
1017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    VIDEOEDITOR_BUFFER_Pool *m_pDecBufferPool; /**< Decoded buffer pool */
1027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    OMX_COLOR_FORMATTYPE    decOuputColorFormat;
1037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32            mNbInputFrames;
1057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Double            mFirstInputCts;
1067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Double            mLastInputCts;
1077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32            mNbRenderedFrames;
1087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Double            mFirstRenderedCts;
1097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Double            mLastRenderedCts;
1107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32            mNbOutputFrames;
1117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Double            mFirstOutputCts;
1127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Double            mLastOutputCts;
11335cb2de64cb6482a08f446e80733e7d344a0dcacDharmaray Kundargi    M4OSA_Int32             mGivenWidth, mGivenHeight; //Used in case of
11435cb2de64cb6482a08f446e80733e7d344a0dcacDharmaray Kundargi                                                       //INFO_FORMAT_CHANGED
1157efb8efc88ba529c1c57366a305855c2051ebb8bChih-Chung Chang    ARect                   mCropRect;  // These are obtained from kKeyCropRect.
1162aa01fd002bba1dde45791c1138c1f71a8d0aa53Chih-Chung Chang    I420ColorConverter*     mI420ColorConverter;
1177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1183e1e78ccd5936111f31a709592f11aa7c677c42dJames Dong    // Time interval between two consequtive/neighboring video frames.
1193e1e78ccd5936111f31a709592f11aa7c677c42dJames Dong    M4_MediaTime            mFrameIntervalMs;
1203e1e78ccd5936111f31a709592f11aa7c677c42dJames Dong
1217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} VideoEditorVideoDecoder_Context;
1227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} //namespace android
124