]> git.vomp.tv Git - vompclient.git/commitdiff
Windows port, deadlock fix
authorChris Tallon <chris@vomp.tv>
Mon, 8 May 2006 18:46:05 +0000 (18:46 +0000)
committerChris Tallon <chris@vomp.tv>
Mon, 8 May 2006 18:46:05 +0000 (18:46 +0000)
command.cc
osdwin.cc
osdwin.h
player.cc

index 14b38859f27145f514ad2f694bd604edae98063b..f77610dffa8e78fd284a67ac29e823404f16491c 100644 (file)
@@ -683,6 +683,7 @@ void Command::doJustConnected(VConnect* vconnect)
     // Enter pre-keys here
 //    handleCommand(Remote::THREE);
 //    handleCommand(Remote::SKIPFORWARD);
+//    handleCommand(Remote::OK);
 //    handleCommand(Remote::PLAY);
   }
 }
index 8b2a2c4148fa58dfe824c062b493f8aa9d3d148e..962017c51858b1932729ed6f6b960894cee0444e 100644 (file)
--- a/osdwin.cc
+++ b/osdwin.cc
-/*
-    Copyright 2004-2005 Chris Tallon
-
-    This file is part of VOMP.
-
-    VOMP 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.
-
-    VOMP 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 VOMP; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-*/
-
-#include "osdwin.h"
-#include "mtd.h"
-#include "video.h"
-#include "surfacewin.h"
-
-//This is stuff for rendering the OSD
-
-
-OsdWin::OsdWin()
-{
-  d3d=NULL;
-  d3ddevice=NULL;
-  d3dvb=NULL;
-  external_driving=false;
-  event = CreateEvent(NULL,/*FALSE*/TRUE,FALSE,NULL);
-  d3dmutex = CreateMutex(NULL,FALSE,NULL);
-
-}
-
-OsdWin::~OsdWin()
-{
-  if (initted) shutdown();
-  CloseHandle(event);
-  CloseHandle(d3dmutex);
-}
-
-int OsdWin::getFD()
-{
-  if (!initted) return 0;
-  return fdOsd;
-}
-
-int OsdWin::init(void* device)
-{
-  if (initted) return 0;
-   Video* video = Video::getInstance();
-  //First Create Direct 3D Object
-  d3d=Direct3DCreate9(D3D_SDK_VERSION);
-  if (!d3d)
-  {
-    Log::getInstance()->log("OSD", Log::DEBUG, "Could not create Direct3D9 object!");
-    return 0;
-  }
-  // then create the Device
-  D3DPRESENT_PARAMETERS d3dparas;
-  ZeroMemory(&d3dparas,sizeof(d3dparas));
-  d3dparas.BackBufferWidth=video->getScreenWidth();
-  d3dparas.BackBufferHeight=video->getScreenHeight();
-  d3dparas.Windowed=TRUE;
-  d3dparas.SwapEffect=D3DSWAPEFFECT_COPY;
-  if (d3d->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,*((HWND*) device),
-    D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dparas,&d3ddevice)!=D3D_OK) {
-     Log::getInstance()->log("OSD", Log::DEBUG, "Could not create Direct3D9 device!");
-       return 0;
-  }
-  //TODO a render function and a device lost detection
-
-  if (!InitVertexBuffer()) {
-     Log::getInstance()->log("OSD", Log::DEBUG, "Could not create Direct3D9 vertex buf!");
-      return 0;
-  }
-
-  //Now we will create the Screen
-  screen = new SurfaceWin(Surface::SCREEN);
-  SetEvent(event);//Now all devices are ready
-  screen->create(video->getScreenWidth(), video->getScreenHeight());
-  screen->display();
-  initted = 1; // must set this here or create surface won't work
-
-  return 1;
-}
-
-
-int OsdWin::InitVertexBuffer() {
-  Video* video = Video::getInstance();
-  FLOAT texx=((float)video->getScreenWidth())/1024.f;
-  FLOAT texy=((float)video->getScreenHeight())/1024.f;
-  D3DCOLOR osdcolor=D3DCOLOR_RGBA(255,255,255,255);
-  osdvertices[0].c=osdcolor;
-  osdvertices[0].x=0.f-0.5f;
-  osdvertices[0].y=0.f-0.5f;
-  osdvertices[0].z=0.5f;
-  osdvertices[0].rhw=1.f;
-  osdvertices[0].u=0.f;
-  osdvertices[0].v=0.f;
-  osdvertices[1].c=osdcolor;
-  osdvertices[1].x=((float)video->getScreenWidth())-0.5f;-0.5f;
-  osdvertices[1].y=0.f-0.5f;
-  osdvertices[1].z=0.5f;
-  osdvertices[1].u=texx;
-  osdvertices[1].v=0.f;
-  osdvertices[1].rhw=1.f;
-  osdvertices[2].c=osdcolor;
-  osdvertices[2].x=((float)video->getScreenWidth())-0.5f;
-  osdvertices[2].y=((float)video->getScreenHeight())-0.5f;
-  osdvertices[2].z=0.5f;
-  osdvertices[2].rhw=1.f;
-  osdvertices[2].u=texx;
-  osdvertices[2].v=texy;
-  osdvertices[3].c=osdcolor;
-  osdvertices[3].x=0.f-0.5f;
-  osdvertices[3].y=((float)video->getScreenHeight())-0.5f;
-  osdvertices[3].z=0;
-  osdvertices[3].rhw=1.f;
-  osdvertices[3].u=0.f;
-  osdvertices[3].v=texy;
-  if (d3dvb) {
-    d3dvb->Release();
-    d3dvb=NULL;
-  }
-  if (d3ddevice->CreateVertexBuffer(4*sizeof(OSDVERTEX),0,D3DFVF_OSDVERTEX,D3DPOOL_MANAGED,
-    &d3dvb,NULL)!=D3D_OK) {
-    return 0;
-  }
-  void *pvertex=NULL;
-  if (d3dvb->Lock(0,sizeof(osdvertices),&pvertex,0)!=D3D_OK) {
-    return 0;
-  }
-  memcpy(pvertex,osdvertices,sizeof(osdvertices));
-  d3dvb->Unlock();
-  return 1;
-}
-
-int OsdWin::shutdown()
-{
-  if (!initted) return 0;
-  initted = 0;
-  d3ddevice->Release();
-  d3d->Release();
-
-  return 1;
-}
-
-void OsdWin::screenShot(char* fileName)
-{
-  screen->screenShot(fileName);
-}
-
-// This function is called from the WinMain function in order to get Screen updates
-void OsdWin::Render()
-{
-  if (!initted) return ;
-  if (external_driving) {
-    Sleep(5); //Sleep for 5 ms, in order to avoid blocking the other threads
-  } else {
-    InternalRendering();
-  }
-}
-
-
-void OsdWin::InternalRendering(){
-  WaitForSingleObject(event,INFINITE);
-  BeginPainting();
-  if (external_driving) {
-    //Copy video to Backbuffer
-  } else {
-    //Clear Background
-    d3ddevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,255),1.0f,0);
-  }
-  //Drawing the OSD
-  if (d3ddevice->BeginScene()==D3D_OK) {
-    d3ddevice->SetStreamSource(0,d3dvb,0,sizeof(OSDVERTEX));
-    d3ddevice->SetFVF(D3DFVF_OSDVERTEX);
-    d3ddevice->SetTexture(0,((SurfaceWin*)screen)->getD3dtexture());
-    //d3ddevice->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_MODULATE);
-    d3ddevice->SetTextureStageState(0, D3DTSS_ALPHAOP,D3DTOP_MODULATE);
-    d3ddevice->SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE);
-    d3ddevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
-    d3ddevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
-    d3ddevice->SetRenderState(D3DRS_LIGHTING,FALSE);
-
-
-    d3ddevice->DrawPrimitive(D3DPT_TRIANGLEFAN,0,2);
-    d3ddevice->EndScene();
-    //Show it to the user!
-    if (d3ddevice->Present(NULL,NULL,NULL,NULL)==D3DERR_DEVICELOST){
-      EndPainting();
-      DoLost();
-    }
-    EndPainting();
-  }
-  if (!external_driving) {
-    Sleep(4);//The User can wait for 4 milliseconds to see his changes
-  }
-}
-
-void OsdWin::DoLost(){
-  Log::getInstance()->log("OSD", Log::DEBUG, "Direct3D Device Lost! Reobtaining...");
-  ResetEvent(event);
-  //First we free up all resources
-  Video* video = Video::getInstance();
-  ((SurfaceWin*)screen)->ReleaseSurface();
-  d3dvb->Release();
-  d3dvb=NULL;
-  D3DPRESENT_PARAMETERS d3dparas;
-  ZeroMemory(&d3dparas,sizeof(d3dparas));
-  d3dparas.BackBufferWidth=video->getScreenWidth();
-  d3dparas.BackBufferHeight=video->getScreenHeight();
-  d3dparas.Windowed=TRUE;
-  d3dparas.SwapEffect=D3DSWAPEFFECT_COPY;
-  if (d3ddevice->Reset(&d3dparas)!=D3D_OK){
-    return;
-  }
-  screen->create(video->getScreenWidth(), video->getScreenHeight());
-  screen->display();
-  InitVertexBuffer();
-  //Redraw Views, Chris could you add a member function to viewman, so that
-  // I can cause it to completely redraw the Views?
-  // Otherwise the OSD would be distorted after Device Lost
-  SetEvent(event);
-
-}
-LPDIRECT3DDEVICE9 OsdWin::getD3dDev() {
-  WaitForSingleObject(event,INFINITE);//We will only return if we are initted
-  return d3ddevice;
-}
-
-void OsdWin::BeginPainting() {//We synchronize calls to d3d between different threads
-  WaitForSingleObject(d3dmutex,INFINITE);
-}
-
-void OsdWin::EndPainting() {
-  ReleaseMutex(d3dmutex);
-}
+/*\r
+    Copyright 2004-2005 Chris Tallon\r
+\r
+    This file is part of VOMP.\r
+\r
+    VOMP is free software; you can redistribute it and/or modify\r
+    it under the terms of the GNU General Public License as published by\r
+    the Free Software Foundation; either version 2 of the License, or\r
+    (at your option) any later version.\r
+\r
+    VOMP is distributed in the hope that it will be useful,\r
+    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+    GNU General Public License for more details.\r
+\r
+    You should have received a copy of the GNU General Public License\r
+    along with VOMP; if not, write to the Free Software\r
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
+*/\r
+\r
+\r
+#include "osdwin.h"\r
+#include "mtd.h"\r
+#include "video.h"\r
+#include "surfacewin.h"\r
+\r
+#include "dsallocator.h"\r
+\r
+\r
+//This is stuff for rendering the OSD\r
+\r
+\r
+OsdWin::OsdWin()\r
+{\r
+  d3d=NULL;\r
+  d3ddevice=NULL;\r
+  d3dvb=NULL;\r
+  d3drtsurf=NULL;\r
+  external_driving=false;\r
+  dsallocator=NULL;\r
+  event = CreateEvent(NULL,/*FALSE*/TRUE,FALSE,NULL);\r
+  d3dmutex = CreateMutex(NULL,FALSE,NULL);\r
+  \r
+}\r
+\r
+OsdWin::~OsdWin()\r
+{\r
+  if (initted) shutdown();\r
+  CloseHandle(event);\r
+  CloseHandle(d3dmutex);\r
+}\r
+\r
+int OsdWin::getFD()\r
+{\r
+  if (!initted) return 0;\r
+  return fdOsd;\r
+}\r
+\r
+int OsdWin::init(void* device)\r
+{\r
+  if (initted) return 0;\r
+   Video* video = Video::getInstance();\r
+  //First Create Direct 3D Object\r
+  d3d=Direct3DCreate9(D3D_SDK_VERSION);\r
+  if (!d3d) \r
+  {\r
+    Log::getInstance()->log("OSD", Log::WARN, "Could not create Direct3D9 object!");\r
+    return 0;\r
+  }\r
+  // then create the Device\r
+  D3DPRESENT_PARAMETERS d3dparas;\r
+  ZeroMemory(&d3dparas,sizeof(d3dparas));\r
+  d3dparas.BackBufferWidth=video->getScreenWidth();\r
+  d3dparas.BackBufferHeight=video->getScreenHeight();\r
+  d3dparas.Windowed=TRUE;\r
+  d3dparas.SwapEffect=D3DSWAPEFFECT_COPY;\r
+  if (d3d->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,*((HWND*) device),\r
+         D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dparas,&d3ddevice)!=D3D_OK) {\r
+          Log::getInstance()->log("OSD", Log::WARN, "Could not create Direct3D9 device!");\r
+       return 0;\r
+  }\r
+  d3ddevice->GetRenderTarget(0,&d3drtsurf);\r
+\r
+  if (!InitVertexBuffer()) {\r
+          Log::getInstance()->log("OSD", Log::WARN, "Could not create Direct3D9 vertex buf!");\r
+                 return 0;\r
+  }\r
+\r
+  //Now we will create the Screen\r
+  screen = new SurfaceWin(Surface::SCREEN);\r
+  SetEvent(event);//Now all devices are ready\r
+  screen->create(video->getScreenWidth(), video->getScreenHeight());\r
+  screen->display();\r
+  initted = 1; // must set this here or create surface won't work\r
+  \r
+  return 1;\r
+}\r
+\r
+\r
+int OsdWin::InitVertexBuffer() {\r
+  Video* video = Video::getInstance();\r
+  FLOAT texx=((float)video->getScreenWidth())/1024.f;\r
+  FLOAT texy=((float)video->getScreenHeight())/1024.f;\r
+  D3DCOLOR osdcolor=D3DCOLOR_RGBA(255,255,255,255);\r
+  osdvertices[0].c=osdcolor;\r
+  osdvertices[0].x=0.f-0.5f;\r
+  osdvertices[0].y=0.f-0.5f;\r
+  osdvertices[0].z=0.5f;\r
+  osdvertices[0].rhw=1.f;\r
+  osdvertices[0].u=0.f;\r
+  osdvertices[0].v=0.f;\r
+  osdvertices[1].c=osdcolor;\r
+  osdvertices[1].x=((float)video->getScreenWidth())-0.5f;-0.5f;\r
+  osdvertices[1].y=0.f-0.5f;\r
+  osdvertices[1].z=0.5f;\r
+  osdvertices[1].u=texx;\r
+  osdvertices[1].v=0.f;\r
+  osdvertices[1].rhw=1.f;\r
+  osdvertices[2].c=osdcolor;\r
+  osdvertices[2].x=((float)video->getScreenWidth())-0.5f;\r
+  osdvertices[2].y=((float)video->getScreenHeight())-0.5f;\r
+  osdvertices[2].z=0.5f;\r
+  osdvertices[2].rhw=1.f;\r
+  osdvertices[2].u=texx;\r
+  osdvertices[2].v=texy;\r
+  osdvertices[3].c=osdcolor;\r
+  osdvertices[3].x=0.f-0.5f;\r
+  osdvertices[3].y=((float)video->getScreenHeight())-0.5f;\r
+  osdvertices[3].z=0;\r
+  osdvertices[3].rhw=1.f;\r
+  osdvertices[3].u=0.f;\r
+  osdvertices[3].v=texy;\r
+  if (d3dvb) {\r
+         d3dvb->Release();\r
+         d3dvb=NULL;\r
+  }\r
+  if (d3ddevice->CreateVertexBuffer(4*sizeof(OSDVERTEX),0,D3DFVF_OSDVERTEX,D3DPOOL_MANAGED,\r
+         &d3dvb,NULL)!=D3D_OK) {\r
+         return 0;\r
+  }\r
+  void *pvertex=NULL;\r
+  if (d3dvb->Lock(0,sizeof(osdvertices),&pvertex,0)!=D3D_OK) {\r
+         return 0;\r
+  }\r
+  memcpy(pvertex,osdvertices,sizeof(osdvertices));\r
+  d3dvb->Unlock();\r
+  return 1;\r
+}\r
+\r
+int OsdWin::shutdown()\r
+{\r
+  if (!initted) return 0;\r
+  initted = 0;\r
+  d3drtsurf->Release();\r
+  d3ddevice->Release();\r
+  d3d->Release();\r
+\r
+  return 1;\r
+}\r
+\r
+void OsdWin::screenShot(char* fileName)\r
+{\r
+  screen->screenShot(fileName);\r
+}\r
+\r
+// This function is called from the WinMain function in order to get Screen updates\r
+void OsdWin::Render()\r
+{\r
+       if (!initted) return ;\r
+       if (external_driving) {\r
+               Sleep(5); //Sleep for 5 ms, in order to avoid blocking the other threads\r
+       } else {\r
+               InternalRendering(NULL);\r
+       }\r
+}\r
+\r
+void OsdWin::RenderDS(LPDIRECT3DSURFACE9 present){\r
+       if (!initted) return;\r
+       if (external_driving) {\r
+               InternalRendering(present);\r
+       }\r
+}\r
+\r
+\r
+void OsdWin::InternalRendering(LPDIRECT3DSURFACE9 present){\r
+       WaitForSingleObject(event,INFINITE);\r
+       BeginPainting();\r
+       if (external_driving) {\r
+               //Copy video to Backbuffer\r
+               if (present!=NULL) {\r
+                       d3ddevice->StretchRect(present,NULL,d3drtsurf  ,NULL,D3DTEXF_LINEAR);\r
+\r
+               }\r
+       } else {\r
+               //Clear Background\r
+               d3ddevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,255),1.0f,0);\r
+       }\r
+       //Drawing the OSD\r
+       if (d3ddevice->BeginScene()==D3D_OK) {\r
+               d3ddevice->SetStreamSource(0,d3dvb,0,sizeof(OSDVERTEX));\r
+               d3ddevice->SetFVF(D3DFVF_OSDVERTEX);\r
+               d3ddevice->SetTexture(0,((SurfaceWin*)screen)->getD3dtexture());\r
+               //d3ddevice->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_MODULATE);\r
+               d3ddevice->SetTextureStageState(0, D3DTSS_ALPHAOP,D3DTOP_MODULATE);\r
+               d3ddevice->SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE);\r
+               d3ddevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);\r
+               d3ddevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);\r
+               d3ddevice->SetRenderState(D3DRS_LIGHTING,FALSE);\r
+\r
+\r
+               d3ddevice->DrawPrimitive(D3DPT_TRIANGLEFAN,0,2);\r
+               d3ddevice->EndScene();\r
+               //Show it to the user!\r
+               if (d3ddevice->Present(NULL,NULL,NULL,NULL)==D3DERR_DEVICELOST){\r
+                       EndPainting();\r
+                       DoLost();\r
+               }\r
+               EndPainting();\r
+       }\r
+       if (!external_driving) {\r
+               Sleep(4);//The User can wait for 4 milliseconds to see his changes\r
+       }\r
+}\r
+\r
+void OsdWin::DoLost(){\r
+       Log::getInstance()->log("OSD", Log::WARN, "Direct3D Device Lost! Reobtaining...");\r
+       ResetEvent(event);\r
+       if (external_driving && dsallocator!=NULL) {\r
+               dsallocator->LostDevice(); //Propagate the information through DS\r
+       }\r
+       //First we free up all resources\r
+       Video* video = Video::getInstance();\r
+       ((SurfaceWin*)screen)->ReleaseSurface();\r
+       d3drtsurf->Release();\r
+       d3dvb->Release();\r
+       d3dvb=NULL;\r
+       D3DPRESENT_PARAMETERS d3dparas;\r
+       ZeroMemory(&d3dparas,sizeof(d3dparas));\r
+       d3dparas.BackBufferWidth=video->getScreenWidth();\r
+       d3dparas.BackBufferHeight=video->getScreenHeight();\r
+       d3dparas.Windowed=TRUE;\r
+       d3dparas.SwapEffect=D3DSWAPEFFECT_COPY;\r
+       if (d3ddevice->Reset(&d3dparas)!=D3D_OK){\r
+               return;\r
+       }\r
+       screen->create(video->getScreenWidth(), video->getScreenHeight());\r
+       screen->display();\r
+       d3ddevice->GetRenderTarget(0,&d3drtsurf);\r
+       InitVertexBuffer();\r
+       //Redraw Views, Chris could you add a member function to viewman, so that\r
+       // I can cause it to completely redraw the Views?\r
+       // Otherwise the OSD would be distorted after Device Lost\r
+       \r
+       SetEvent(event);\r
+\r
+}\r
+LPDIRECT3DDEVICE9 OsdWin::getD3dDev() {\r
+       WaitForSingleObject(event,INFINITE);//We will only return if we are initted\r
+       return d3ddevice;\r
+}\r
+\r
+LPDIRECT3D9 OsdWin::getD3d() {\r
+       WaitForSingleObject(event,INFINITE);//We will only return if we are initted\r
+       return d3d;\r
+}\r
+\r
+void OsdWin::BeginPainting() {//We synchronize calls to d3d between different threads\r
+       WaitForSingleObject(d3dmutex,INFINITE);\r
+}\r
+\r
+void OsdWin::EndPainting() {\r
+       ReleaseMutex(d3dmutex);\r
+}\r
+\r
+void OsdWin::setExternalDriving(DsAllocator* dsall) {\r
+       if (dsall==NULL) {\r
+               external_driving=false;\r
+               dsallocator=NULL;\r
+               return;\r
+       }\r
+       WaitForSingleObject(event,INFINITE);//We will only return if we are initted\r
+       dsallocator=dsall;\r
+       external_driving=true;\r
+}\r
index a22f356d8f7d69cb31a0b6aeed5eb712e5774e20..c5451263bf710a06766a22821fa34a71fbbb7e53 100644 (file)
--- a/osdwin.h
+++ b/osdwin.h
@@ -1,74 +1,81 @@
-/*
-    Copyright 2004-2005 Chris Tallon
-
-    This file is part of VOMP.
-
-    VOMP 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.
-
-    VOMP 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 VOMP; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-*/
-
-#ifndef OSDWIN_H
-#define OSDWIN_H
-
-#include <stdio.h>
-
-#include "osd.h"
-#include "defines.h"
-#include "log.h"
-#include <winsock2.h>
-#include <d3d9.h>
-
-struct OSDVERTEX
-{
-  FLOAT x,y,z,rhw;
-  DWORD c;
-  FLOAT u,v;
-};
-
-#define D3DFVF_OSDVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE| D3DFVF_TEX1)
-
-
-class OsdWin : public Osd
-{
-  public:
-    OsdWin();
-    ~OsdWin();
-
-    int init(void* device);
-    int shutdown();
-
-    int getFD();
-
-    void screenShot(char* fileName);
-
-  LPDIRECT3DDEVICE9 getD3dDev() ;
-  // This function is called from the WinMain function in order to get Screen updates
-  void Render();
-  void BeginPainting();
-  void EndPainting();
-private:
-    LPDIRECT3D9 d3d;
-    LPDIRECT3DDEVICE9 d3ddevice;
-    LPDIRECT3DVERTEXBUFFER9 d3dvb;
-  // This indicates, that currently a video is played, thus the osd updates are driven by the Directshow Filtersystem
-  bool external_driving;
-  HANDLE d3dmutex;
-  void InternalRendering();
-  void DoLost();
-  int InitVertexBuffer();
-  OSDVERTEX osdvertices[4];
-  HANDLE event;
-};
-
-#endif
+/*\r
+    Copyright 2004-2005 Chris Tallon\r
+\r
+    This file is part of VOMP.\r
+\r
+    VOMP is free software; you can redistribute it and/or modify\r
+    it under the terms of the GNU General Public License as published by\r
+    the Free Software Foundation; either version 2 of the License, or\r
+    (at your option) any later version.\r
+\r
+    VOMP is distributed in the hope that it will be useful,\r
+    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+    GNU General Public License for more details.\r
+\r
+    You should have received a copy of the GNU General Public License\r
+    along with VOMP; if not, write to the Free Software\r
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
+*/\r
+\r
+#ifndef OSDWIN_H\r
+#define OSDWIN_H\r
+\r
+#include <stdio.h>\r
+\r
+#include "osd.h"\r
+#include "defines.h"\r
+#include "log.h"\r
+#include <winsock2.h>\r
+#include <d3d9.h>\r
+\r
+struct OSDVERTEX\r
+{\r
+       FLOAT x,y,z,rhw;\r
+       DWORD c;\r
+       FLOAT u,v;\r
+};\r
+\r
+#define D3DFVF_OSDVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE| D3DFVF_TEX1)\r
+\r
+class DsAllocator;\r
+\r
+class OsdWin : public Osd\r
+{\r
+  public:\r
+    OsdWin();\r
+    ~OsdWin();\r
+\r
+    int init(void* device);\r
+    int shutdown();\r
+\r
+    int getFD();\r
+\r
+    void screenShot(char* fileName);\r
+\r
+       LPDIRECT3DDEVICE9 getD3dDev() ;\r
+       LPDIRECT3D9 getD3d() ;\r
+       // This function is called from the WinMain function in order to get Screen updates\r
+       void Render();\r
+       void RenderDS(LPDIRECT3DSURFACE9 present);\r
+       void BeginPainting();\r
+       void EndPainting();\r
+       void setExternalDriving(DsAllocator* dsall);\r
+private:\r
+         LPDIRECT3D9 d3d;\r
+         LPDIRECT3DDEVICE9 d3ddevice;\r
+         LPDIRECT3DVERTEXBUFFER9 d3dvb;\r
+         LPDIRECT3DSURFACE9 d3drtsurf;\r
+         DsAllocator* dsallocator;\r
+       // This indicates, that currently a video is played, thus the osd updates are driven by the Directshow Filtersystem\r
+       bool external_driving;\r
+       HANDLE d3dmutex;\r
+       void InternalRendering(LPDIRECT3DSURFACE9 present);\r
+       void DoLost();\r
+       int InitVertexBuffer();\r
+       OSDVERTEX osdvertices[4];\r
+       HANDLE event;\r
+};\r
+\r
+#endif\r
+\r
index 0ee83c5ae62dba59135b266c83f01e403fcec2e2..621a87897f6b2d7182f4433fb5b42b58dc8b4852 100644 (file)
--- a/player.cc
+++ b/player.cc
@@ -191,7 +191,7 @@ void Player::toggleFastBackward()
 
 void Player::jumpToPercent(int percent)
 {
-  threadLock();
+  lock();
   jumpToPercentInt(percent);
 //  unLock(); - let thread unlock this
 }