overlay_flytv.c
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:4k
源码类别:

Windows CE

开发平台:

C/C++

  1. /*****************************************************************************
  2.  *
  3.  * This program is free software ; you can redistribute it and/or modify
  4.  * it under the terms of the GNU General Public License as published by
  5.  * the Free Software Foundation; either version 2 of the License, or
  6.  * (at your option) any later version.
  7.  *
  8.  * This program is distributed in the hope that it will be useful,
  9.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11.  * GNU General Public License for more details.
  12.  *
  13.  * You should have received a copy of the GNU General Public License
  14.  * along with this program; if not, write to the Free Software
  15.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  16.  *
  17.  * $Id: overlay_flytv.c 543 2006-01-07 22:06:24Z picard $
  18.  *
  19.  * The Core Pocket Media Player
  20.  * Copyright (c) 2004-2005 Gabor Kovacs
  21.  *
  22.  ****************************************************************************/
  23. #include "../common.h"
  24. // not for smartphones
  25. #if defined(TARGET_WINCE) && !defined(WIN32_PLATFORM_WFSP)
  26. #define WIN32_LEAN_AND_MEAN
  27. #ifndef STRICT
  28. #define STRICT
  29. #endif
  30. #include <windows.h>
  31. #define OUTPUT_VGA 17
  32. #define Format320X240 2
  33. typedef struct flytv
  34. {
  35. overlay Overlay;
  36. planes Planes;
  37. bool_t Inited;
  38. bool_t ErrorShowed;
  39. WCHAR* (*DriverVersion)();
  40. int (*Initial_FLY_TV)(int,int);
  41. void (*UnInitial_FLY_TV)();
  42. int (*Zoom)(int);
  43. int (*SendFrame)(const void*);
  44. } flytv;
  45. static int Init(flytv* p)
  46. {
  47. int Size = 2*p->Overlay.Output.Format.Video.Height * p->Overlay.Output.Format.Video.Width;
  48. p->ErrorShowed = 0;
  49. p->Inited = 0;
  50. p->Planes[0] = Alloc16(Size);
  51. if (!p->Planes[0])
  52. return ERR_OUT_OF_MEMORY;
  53. memset(p->Planes[0],0,Size);
  54. p->Overlay.ClearFX = BLITFX_ONLYDIFF;
  55. return ERR_NONE;
  56. }
  57. static void Done(flytv* p)
  58. {
  59. Free16(p->Planes[0]); 
  60. p->Planes[0] = NULL;
  61. }
  62. static int UpdateShow(flytv* p)
  63. {
  64. if (p->Overlay.Show)
  65. {
  66. if (!p->Initial_FLY_TV(OUTPUT_VGA,Format320X240))
  67. {
  68. if (!p->ErrorShowed)
  69. {
  70. p->ErrorShowed = 1;
  71. ShowError(p->Overlay.Node.Class,ERR_ID,ERR_DEVICE_ERROR);
  72. }
  73. return ERR_DEVICE_ERROR;
  74. }
  75. p->Inited = 1;
  76. p->Zoom(2);
  77. }
  78. else
  79. {
  80. p->UnInitial_FLY_TV();
  81. p->Inited = 0;
  82. }
  83. return ERR_NONE;
  84. }
  85. static int Lock(flytv* p, planes Planes, bool_t OnlyAligned )
  86. {
  87. Planes[0] = p->Planes[0];
  88. return ERR_NONE;
  89. }
  90. static int Unlock(flytv* p )
  91. {
  92. return ERR_NONE;
  93. }
  94. static int Blit(flytv* p, const constplanes Data, const constplanes DataLast )
  95. {
  96. if (p->Inited)
  97. {
  98. BlitImage(p->Overlay.Soft,p->Planes,Data,DataLast,-1,-1);
  99. p->SendFrame(p->Planes[0]);
  100. }
  101. return ERR_NONE;
  102. }
  103. static int Create(flytv* p)
  104. {
  105. p->Overlay.Module = LoadLibrary(T("FlyPresenter_TV.DLL"));
  106. GetProc(&p->Overlay.Module,&p->DriverVersion,T("DriverVersion"),0);
  107. GetProc(&p->Overlay.Module,&p->Initial_FLY_TV,T("Initial_FLY_TV"),0);
  108. GetProc(&p->Overlay.Module,&p->UnInitial_FLY_TV,T("UnInitial_FLY_TV"),0);
  109. GetProc(&p->Overlay.Module,&p->Zoom,T("Zoom"),0);
  110. GetProc(&p->Overlay.Module,&p->SendFrame,T("SendFrame"),0);
  111. if (!p->Overlay.Module)
  112. return ERR_DEVICE_ERROR;
  113. p->Overlay.Primary = 0;
  114. p->Overlay.Output.Format.Video.Width = 320;
  115. p->Overlay.Output.Format.Video.Height = 240;
  116. p->Overlay.Output.Format.Video.Direction = 0;
  117. p->Overlay.Output.Format.Video.Aspect = ASPECT_ONE;
  118. p->Overlay.Output.Format.Video.Pitch = p->Overlay.Output.Format.Video.Width*2;
  119. DefaultRGB(&p->Overlay.Output.Format.Video.Pixel,16,5,6,5,0,0,0);
  120. p->Overlay.Output.Format.Video.Pixel.Flags |= PF_16ALIGNED;
  121. p->Overlay.Init = Init;
  122. p->Overlay.Done = Done;
  123. p->Overlay.Blit = Blit;
  124. p->Overlay.UpdateShow = UpdateShow;
  125. p->Overlay.Lock = Lock;
  126. p->Overlay.Unlock = Unlock;
  127. return ERR_NONE;
  128. }
  129. static const nodedef FlyTV = 
  130. {
  131. sizeof(flytv)|CF_GLOBAL,
  132. FLYTV_ID,
  133. OVERLAY_CLASS,
  134. PRI_DEFAULT-10,
  135. (nodecreate)Create,
  136. };
  137. void OverlayFlyTV_Init() 
  138. NodeRegisterClass(&FlyTV);
  139. }
  140. void OverlayFlyTV_Done()
  141. {
  142. NodeUnRegisterClass(FLYTV_ID);
  143. }
  144. #else
  145. void OverlayFlyTV_Init() {}
  146. void OverlayFlyTV_Done() {}
  147. #endif