blob: b6da5fa1241c6753a43286f283591a866b7ce32f [file] [log] [blame]
/* ------------------------------------------------------------------
* Copyright (C) 2008 PacketVideo
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied.
* See the License for the specific language governing permissions
* and limitations under the License.
* -------------------------------------------------------------------
*/
#ifndef __PVVIDEODECBASE_H
#define __PVVIDEODECBASE_H
// includes
#include <e32std.h>
#include <e32base.h>
#include "mp4dec_api.h"
#include "dspmsgproto1.h"
#include "dspmsgproto2.h"
#include "dspmsgproto4.h"
#include "dsp_msg_proto6.h"
#include "DspMsgProto7.h"
#include "dspmsgproto9.h"
#include "dspmsgproto10.h"
#include "dspmsgproto11.h"
#include "dspmsgproto12.h"
#include "dspmsgproto13.h"
#include "dspmsgproto14.h"
#include "dspmsgproto15.h"
#include "dspmsgproto16.h"
#include "dspmsgproto17.h"
#include "dspmsgproto20.h"
#ifndef OSCL_BASE_H_INCLUDED
#include "oscl_base.h"
#endif
#ifndef VISUAL_HEADER_H_INCLUDED
#include "visual_header.h"
#endif
#ifndef PVVIDEODECODERINTERFACE_H_INCLUDED
#include "pvvideodecoderinterface.h"
#endif
#include "pvzcdt.h"
#define UChar uint8
#define MAX_LAYERS 1
#define USING_SYNC_2STEP
class PVM4VDecoder_DPI : public PVVideoDecoderInterface
{
public:
PVM4VDecoder_DPI();
PVM4VDecoder_DPI(CPVDsp* aDsp);
~PVM4VDecoder_DPI();
static PVM4VDecoder_DPI* New(void);
IMPORT_C static PVM4VDecoder_DPI* NewL(CPVDsp* aDsp);
IMPORT_C bool InitVideoDecoder(uint8 *volbuf[], int32 *volbuf_size, int32 nLayers, int32* iWidth, int32* iHeight, int *mode);
////// not implemeneted/////////////////////////////////////////////////////////////////////////////////////////////////////////////
IMPORT_C bool GetVolInfo(VolInfo* pVolInfo) {};
IMPORT_C void DecPostProcess(uint8 *YUV) {};
IMPORT_C void DecSetEnhReference(uint8 *refYUV, uint32 timestamp) {};
IMPORT_C void SetReferenceYUV(uint8 *YUV) {};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
IMPORT_C void GetVideoDimensions(int32 *display_width, int32 *display_height)
{
*display_width = GetVideoWidth();
*display_height = GetVideoHeight();
};
#ifdef USING_SYNC_2STEP
IMPORT_C bool getSynchResponse(uint32 timestamp[], int32 buffer_size[]);
IMPORT_C bool DSPDecoderBusy();
#endif
IMPORT_C int32 GetVideoWidth(void);
IMPORT_C int32 GetVideoHeight(void);
IMPORT_C int32 DPIFreeVideoDecCtrls(void);
IMPORT_C void CleanUpVideoDecoder(void);
IMPORT_C bool IsIFrame(void);
IMPORT_C void SetPostProcType(int32 aMode);
IMPORT_C bool DecodeVideoFrame(uint8 *bitstream[], uint32 *timestamp, int32 *buffer_size, uint *use_ext_ts, uint8 *YUV);
IMPORT_C bool DecodeVideoFrame(uint8 *bitstream[], uint32 *timestamp, int32 *buffer_size, uint *use_ext_ts, uint8 *YUV, TRequestStatus *aRequestStatus);
IMPORT_C bool DecodeVideoFrameAsyncResp(uint32 timestamp[], int32 buffer_size[]);
IMPORT_C bool DecodeStillVideoFrame(uint8 *buffer, int32 buf_size, uint8 *YUV);
IMPORT_C bool GetStillVideoFrameSize(uint8 *buffer, int32 buf_size, int32 *width, int32 *height);
IMPORT_C uint8* GetDecOutputFrame(void);
IMPORT_C void GetDecOutputFrame(uint8*);
IMPORT_C uint8* CopyDecOutputFrameToSharedMemBuf(void);
IMPORT_C bool ResetVideoDecoder(void);
IMPORT_C TDspPointer DPIAllocVideoDecCtrls(void);
IMPORT_C uint32 GetVideoTimestamp(void);
IMPORT_C uint32 GetProfileAndLevel(void);
IMPORT_C uint32 GetDecBitrate(void);
// only port the API's used in PVPlayer 2.0
IMPORT_C bool ExtractVolHeader(uint8 *video_buffer, uint8 *vol_header, int32 *vol_header_size);
IMPORT_C void DecSetReference(uint8 *refYUV, uint32 timestamp);
#if defined USE_PV_TRANSFER_BUFFER
IMPORT_C inline RPVTransferBuffer& GetTxTransferBuffer()
{
return iTxTransferBuffer;
}
IMPORT_C inline RPVTransferBuffer& GetRxTransferBuffer()
{
return iRxTransferBuffer;
}
#else
IMPORT_C inline RTransferBuffer& GetTxTransferBuffer()
{
return iTxTransferBuffer;
}
IMPORT_C inline RTransferBuffer& GetRxTransferBuffer()
{
return iRxTransferBuffer;
}
#endif
IMPORT_C inline TInt GetNLayers()
{
return iNLayers;
}
IMPORT_C inline void SetNLayers(int32 aNLayers)
{
iNLayers = aNLayers;
}
TDspPointer iVideoCtrls;
protected:
void ConstructL(void);
bool Construct();
CPVDsp *iDsp;
TDspPointer *iBitstreamDspPointer;
int32 iNLayers;
CDspMsgProto7 dspMsgProto7;
CDspMsgProto15 dspMsgProto15;
CDspMsgProto16 dspMsgProto16;
private:
bool iWaitingBitstream;
// the order of object declaration is required to ensure the proper sequence of constructor invocation
#if defined USE_PV_TRANSFER_BUFFER
RPVTransferBuffer iTxTransferBuffer;
RPVTransferWindow iTxTransferWindow;
RPVTransferBuffer iRxTransferBuffer;
RPVTransferWindow iRxTransferWindow;
#else
RTransferBuffer iTxTransferBuffer;
RTransferWindow iTxTransferWindow;
RTransferBuffer iRxTransferBuffer;
RTransferWindow iRxTransferWindow;
#endif
RPVTransferBuffer iVideoTransBuf[MAX_LAYERS];
RPVTransferWindow iVideoTransWin[MAX_LAYERS];
RPVTransferBuffer iVolHeaderTransBuf[MAX_LAYERS];
RPVTransferWindow iVolHeaderTransWin[MAX_LAYERS];
RPVTransferBuffer iDecodeBusyFlagTransBuf;
RPVTransferWindow iDecodeBusyFlagTransWin;
unsigned short *iDecodeBusyFlagPtr;
unsigned char *iVolHeader[MAX_LAYERS];
unsigned char *iVideoBuffer[MAX_LAYERS];
uint iHeight;
uint iWidth;
uint iBufferHeight;
uint iBufferWidth;
CDspMsgProto1 dspMsgProto1;
CDspMsgProto2 dspMsgProto2;
CDspMsgProto4 dspMsgProto4;
CDspMsgProto6 dspMsgProto6; // for SBR
CDspMsgProto9 dspMsgProto9;
CDspMsgProto10 dspMsgProto10;
CDspMsgProto11 dspMsgProto11;
CDspMsgProto12 dspMsgProto12;
CDspMsgProto13 dspMsgProto13;
CDspMsgProto14 dspMsgProto14;
CDspMsgProto17 dspMsgProto17;
CDspMsgProto20 dspMsgProto20;
int32 iCurrVideoTimeStamp;
uint8* iYuvOutputPtr;
};
#endif