⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 directdraw.cpp

📁 symbian上的yuv视频文件处理程序 可对yuv的每一帧数据进行读取 处理 显示
💻 CPP
字号:
/*
 * DirectDraw.cpp
 *
 * The MPEG4 Codec for Symbian Project
 *
 * Copyright (c) 2005-2008 for Cyansoft Studio (www.cyansoft.com.cn).
 * All Rights Reserved.
 *
 * Contributor(s): ______________________________________.
 *
 * $Cyansoft$
 * 
 */
#include "DirectDraw.h"

CDirectDraw::~CDirectDraw()
	{
    if( iDrawer )
    	{
    	iDrawer->Cancel();
    	delete iDrawer;
    	}
	
    if( iVirtualScreen )
    	delete iVirtualScreen;
	}

CDirectDraw* CDirectDraw::NewL( RWsSession& aWs, CWsScreenDevice& aScreenDevice, RWindowBase& aWindow, TPoint& aPt, TRect& aRect )
	{
	CDirectDraw* self = CDirectDraw::NewLC( aWs, aScreenDevice, aWindow, aPt, aRect );
	CleanupStack::Pop( self );
	return self;
	}

CDirectDraw* CDirectDraw::NewLC( RWsSession& aWs, CWsScreenDevice& aScreenDevice, RWindowBase& aWindow, TPoint& aPt, TRect& aRect )
	{
	CDirectDraw* self = new ( ELeave ) CDirectDraw();
	CleanupStack::PushL( self );
	self->ConstructL( aWs, aScreenDevice, aWindow, aPt, aRect );
	return self;
	}
	
void CDirectDraw::ConstructL( RWsSession& aWs, CWsScreenDevice& aScreenDevice, RWindowBase& aWindow, TPoint& aPt, TRect& aRect )
	{
	iPoint = aPt;
	iRect = aRect;
	iPause = EFalse;
	
	// Create back buffer
	iVirtualScreen = new (ELeave) CFbsBitmap;
	User::LeaveIfError( iVirtualScreen->Create( TSize(iRect.Width(), iRect.Height()), aScreenDevice.DisplayMode() ) );
	
	// Create Direct Screen Access
    iDrawer = CDirectScreenAccess::NewL(
    	aWs,
    	aScreenDevice,
    	aWindow,
    	*this);
    aWs.Flush();
    
    iDrawer->StartL();
    
    iGc = iDrawer->Gc();
    RRegion* region = iDrawer->DrawingRegion();
    iGc->SetClippingRegion(region);
	}

void CDirectDraw::Restart( RDirectScreenAccess::TTerminationReasons /*aReason*/ )
    {
    TRAPD( err, iDrawer->StartL() ); // You may panic here, if you want
    if( KErrNone == err )
    	{
	    iGc = iDrawer->Gc();
	    RRegion* region = iDrawer->DrawingRegion();
	    iGc->SetClippingRegion( region );
	    
	    iPause = EFalse;
    	}
    }

void CDirectDraw::AbortNow( RDirectScreenAccess::TTerminationReasons /*aReason*/ )
    {
    iPause = ETrue;
    }

TUint8* CDirectDraw::BeginDraw()
    {
    // Obtain the screen address every time before drawing the frame, 
    // since the address always changes
    if( iPause )
    	return NULL;
    
    TUint8* iScreenAddress;
    iVirtualScreen->LockHeap( ETrue );
    iScreenAddress = ( TUint8* )iVirtualScreen->DataAddress();
    return iScreenAddress;
    }
 
void CDirectDraw::EndDraw()
    {
    if( iPause )
    	return;    
    iVirtualScreen->UnlockHeap( ETrue );
    iGc->BitBlt( iPoint, iVirtualScreen );
    iDrawer->ScreenDevice()->Update();
    }

/* End of file */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -