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

📄 overlay_flytv.c

📁 大名鼎鼎的CE下播放软件,TCPPMP的源代码!!!2410下可以流畅的解QVGA的H264,MPEG4等格式.
💻 C
字号:
/*****************************************************************************
 *
 * This program is free software ; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 *
 * $Id: overlay_flytv.c 543 2006-01-07 22:06:24Z picard $
 *
 * The Core Pocket Media Player
 * Copyright (c) 2004-2005 Gabor Kovacs
 *
 ****************************************************************************/

#include "../common.h"

// not for smartphones
#if defined(TARGET_WINCE) && !defined(WIN32_PLATFORM_WFSP)

#define WIN32_LEAN_AND_MEAN
#ifndef STRICT
#define STRICT
#endif
#include <windows.h>

#define OUTPUT_VGA		17
#define Format320X240	2

typedef struct flytv
{
	overlay Overlay;
	planes Planes;
	bool_t Inited;
	bool_t ErrorShowed;

	WCHAR* (*DriverVersion)();
	int (*Initial_FLY_TV)(int,int);
	void (*UnInitial_FLY_TV)();
	int (*Zoom)(int);
	int (*SendFrame)(const void*);
} flytv;

static int Init(flytv* p)
{
	int Size = 2*p->Overlay.Output.Format.Video.Height * p->Overlay.Output.Format.Video.Width;
	p->ErrorShowed = 0;
	p->Inited = 0;
	p->Planes[0] = Alloc16(Size);
	if (!p->Planes[0])
		return ERR_OUT_OF_MEMORY;

	memset(p->Planes[0],0,Size);
	p->Overlay.ClearFX = BLITFX_ONLYDIFF;
	return ERR_NONE;
}

static void Done(flytv* p)
{
	Free16(p->Planes[0]); 
	p->Planes[0] = NULL;
}

static int UpdateShow(flytv* p)
{
	if (p->Overlay.Show)
	{
		if (!p->Initial_FLY_TV(OUTPUT_VGA,Format320X240))
		{
			if (!p->ErrorShowed)
			{
				p->ErrorShowed = 1;
				ShowError(p->Overlay.Node.Class,ERR_ID,ERR_DEVICE_ERROR);
			}
			return ERR_DEVICE_ERROR;
		}
		p->Inited = 1;
		p->Zoom(2);
	}
	else
	{
		p->UnInitial_FLY_TV();
		p->Inited = 0;
	}
	return ERR_NONE;
}

static int Lock(flytv* p, planes Planes, bool_t OnlyAligned )
{
	Planes[0] = p->Planes[0];
	return ERR_NONE;
}

static int Unlock(flytv* p )
{
	return ERR_NONE;
}

static int Blit(flytv* p, const constplanes Data, const constplanes DataLast )
{
	if (p->Inited)
	{
		BlitImage(p->Overlay.Soft,p->Planes,Data,DataLast,-1,-1);
		p->SendFrame(p->Planes[0]);
	}
	return ERR_NONE;
}

static int Create(flytv* p)
{
	p->Overlay.Module = LoadLibrary(T("FlyPresenter_TV.DLL"));
	GetProc(&p->Overlay.Module,&p->DriverVersion,T("DriverVersion"),0);
	GetProc(&p->Overlay.Module,&p->Initial_FLY_TV,T("Initial_FLY_TV"),0);
	GetProc(&p->Overlay.Module,&p->UnInitial_FLY_TV,T("UnInitial_FLY_TV"),0);
	GetProc(&p->Overlay.Module,&p->Zoom,T("Zoom"),0);
	GetProc(&p->Overlay.Module,&p->SendFrame,T("SendFrame"),0);
	if (!p->Overlay.Module)
		return ERR_DEVICE_ERROR;

	p->Overlay.Primary = 0;
	p->Overlay.Output.Format.Video.Width = 320;
	p->Overlay.Output.Format.Video.Height = 240;
	p->Overlay.Output.Format.Video.Direction = 0;
	p->Overlay.Output.Format.Video.Aspect = ASPECT_ONE;
	p->Overlay.Output.Format.Video.Pitch = p->Overlay.Output.Format.Video.Width*2;
	DefaultRGB(&p->Overlay.Output.Format.Video.Pixel,16,5,6,5,0,0,0);
	p->Overlay.Output.Format.Video.Pixel.Flags |= PF_16ALIGNED;
	p->Overlay.Init = Init;
	p->Overlay.Done = Done;
	p->Overlay.Blit = Blit;
	p->Overlay.UpdateShow = UpdateShow;
	p->Overlay.Lock = Lock;
	p->Overlay.Unlock = Unlock;
	return ERR_NONE;
}

static const nodedef FlyTV = 
{
	sizeof(flytv)|CF_GLOBAL,
	FLYTV_ID,
	OVERLAY_CLASS,
	PRI_DEFAULT-10,
	(nodecreate)Create,
};

void OverlayFlyTV_Init() 
{ 
	NodeRegisterClass(&FlyTV);
}
void OverlayFlyTV_Done()
{
	NodeUnRegisterClass(FLYTV_ID);
}

#else
void OverlayFlyTV_Init() {}
void OverlayFlyTV_Done() {}
#endif

⌨️ 快捷键说明

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