shithub: openh264

ref: a15ad8cc80773b251f88798e364668cc175c0738
dir: /codec/console/dec/inc/d3d9_utils.h/

View raw version
/*!
 * \copy
 *     Copyright (c)  2010-2013, Cisco Systems
 *     All rights reserved.
 *
 *     Redistribution and use in source and binary forms, with or without
 *     modification, are permitted provided that the following conditions
 *     are met:
 *
 *        * Redistributions of source code must retain the above copyright
 *          notice, this list of conditions and the following disclaimer.
 *
 *        * Redistributions in binary form must reproduce the above copyright
 *          notice, this list of conditions and the following disclaimer in
 *          the documentation and/or other materials provided with the
 *          distribution.
 *
 *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 *     "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 *     LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 *     FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 *     COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 *     INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 *     BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 *     CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 *     LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 *     ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 *     POSSIBILITY OF SUCH DAMAGE.
 *
 * \file	d3d9_utils.h
 *
 * \brief	interface of d3d9 render module
 *
 * \date	Created 12/14/2010
 *
 * \description : 1. Rendering in Vista and upper : D3D9Ex method, support host memory / shared surface input 
 *                2. Rendering in XP : D3D9 method w/o device lost handling, support host memory input  
 *                3. File Dump : support host memory / shared surface input 
 *
 *************************************************************************************
 */
#ifndef WELS_D3D9_UTILS_H__
#define WELS_D3D9_UTILS_H__

//#pragma once	// do not use this due cross platform, esp for Solaris

#include <stdio.h>
#include "codec_def.h"

#if defined(_MSC_VER) && (_MSC_VER>=1500) // vs2008 and upper
#define ENABLE_DISPLAY_MODULE // enable/disable the render feature 
#endif

#ifdef ENABLE_DISPLAY_MODULE
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <d3d9.h>
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

class CD3D9Utils
{
public:
	CD3D9Utils();
	~CD3D9Utils();

public:
	HRESULT Init(BOOL bWindowed);
	HRESULT Uninit(void);
	HRESULT Process(void *pDst[3], SBufferInfo *Info, FILE *pFile = NULL);

private:
	HRESULT InitResource(void *pSharedHandle, SBufferInfo *pInfo);
	HRESULT Render(void *pDst[3], SBufferInfo *pInfo);
	HRESULT Dump(void *pDst[3], SBufferInfo *pInfo, FILE *pFile);
                  
private:
	HMODULE               m_hDll;
	HWND                  m_hWnd;
	unsigned char        *m_pDumpYUV;
	BOOL                  m_bInitDone;

	LPDIRECT3D9           m_lpD3D9;
	LPDIRECT3DDEVICE9     m_lpD3D9Device;

	D3DPRESENT_PARAMETERS m_d3dpp;
	LPDIRECT3DSURFACE9    m_lpD3D9RawSurfaceShare;
};

class CD3D9ExUtils
{
public:
	CD3D9ExUtils();
	~CD3D9ExUtils();

public:
	HRESULT Init(BOOL bWindowed);
	HRESULT Uninit(void);
	HRESULT Process(void *dst[3], SBufferInfo *Info, FILE *fp = NULL);

private:
	HRESULT InitResource(void *pSharedHandle, SBufferInfo *Info);
	HRESULT Render(void *pDst[3], SBufferInfo *Info);
	HRESULT Dump(void *pDst[3], SBufferInfo *Info, FILE *fp);

private:
	HMODULE               m_hDll;
	HWND                  m_hWnd;
	unsigned char        *m_pDumpYUV;
	BOOL                  m_bInitDone;

	LPDIRECT3D9EX         m_lpD3D9;
	LPDIRECT3DDEVICE9EX   m_lpD3D9Device;

	D3DPRESENT_PARAMETERS m_d3dpp;
	LPDIRECT3DSURFACE9    m_lpD3D9RawSurfaceShare;
};
#endif

typedef enum
{
  OS_UNSUPPORTED = 0,
  OS_XP,
  OS_VISTA_UPPER
};

class CUtils
{
public:
	CUtils();
	~CUtils();

	int Process(void *dst[3], SBufferInfo *Info, FILE *fp);

private:
	int CheckOS(void);

private:
	int iOSType;
	void *hHandle;
};

#endif//WELS_D3D9_UTILS_H__