]> git.vomp.tv Git - vompclient.git/commitdiff
Windows updates
authorChris Tallon <chris@vomp.tv>
Sun, 17 Dec 2006 13:17:13 +0000 (13:17 +0000)
committerChris Tallon <chris@vomp.tv>
Sun, 17 Dec 2006 13:17:13 +0000 (13:17 +0000)
dssourcepin.cc
remotewin.cc
vompreswin.h
vompwin.rc
winmain.cc

index f6893c7fa4890c81bb321d92a393a80ba30a5df3..5d440a7c71d8c7c81ceea7bcbc77e6224832c9b3 100644 (file)
@@ -60,8 +60,11 @@ HRESULT STDMETHODCALLTYPE DsSFEnumMediaTypes::Next(ULONG numpin, AM_MEDIA_TYPE *
 \r
   for (i=0;(i<numpin);i++) {\r
     pins[i]=(AM_MEDIA_TYPE*)CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE));\r
-    if (parent->GetMediaType(curpos+i,pins[i])!=S_OK) return S_FALSE;\r
-    curpos++;\r
+       if (parent->GetMediaType(curpos+i,pins[i])!=S_OK) {\r
+               CoTaskMemFree(pins[i]);\r
+               pins[i]=NULL;\r
+               return S_FALSE;\r
+       }    curpos++;\r
     if (fetched!=NULL)  (*fetched)++;\r
   }\r
   return S_OK;\r
@@ -194,14 +197,14 @@ HRESULT STDMETHODCALLTYPE DsSourcePin::Connect(IPin *pinempf,const AM_MEDIA_TYPE
         LeaveCriticalSection(&m_pFilter->filterlock);\r
       } else {\r
         LeaveCriticalSection(&m_pFilter->filterlock);\r
-        CoTaskMemFree(mtype->pbFormat);\r
+  if (mtype->pbFormat!=NULL) CoTaskMemFree(mtype->pbFormat);\r
         pinempf->Release();\r
         return VFW_E_TYPE_NOT_ACCEPTED;\r
       }\r
 \r
     } else {\r
       LeaveCriticalSection(&m_pFilter->filterlock);\r
     CoTaskMemFree(mtype->pbFormat);\r
if (mtype->pbFormat!=NULL) CoTaskMemFree(mtype->pbFormat);\r
       return VFW_E_TYPE_NOT_ACCEPTED;\r
     }\r
     CoTaskMemFree(mtype->pbFormat);\r
@@ -213,17 +216,31 @@ HRESULT STDMETHODCALLTYPE DsSourcePin::Connect(IPin *pinempf,const AM_MEDIA_TYPE
     pinempf->AddRef();\r
     while (emt->Next(1,&emtype,&fetched)==S_OK) {\r
       if (CheckMediaType(emtype)==S_OK){\r
+/*     PIN_INFO pini;\r
+       pinempf->QueryPinInfo(&pini);\r
+       if (pini.pFilter!=NULL) {\r
+               FILTER_INFO filti;\r
+               pini.pFilter->QueryFilterInfo(&filti);\r
+\r
+               if (filti.pGraph!=NULL) filti.pGraph->Release();\r
+               char buffer[MAX_FILTER_NAME*2];\r
+               wcstombs(buffer,filti.achName,MAX_FILTER_NAME*2);\r
+               MessageBox(0,buffer,"Filter",0);\r
+               pini.pFilter->Release();\r
+       }*/\r
+\r
         if (pinempf->ReceiveConnection((IPin*)this,emtype)==S_OK) {\r
           connected=pinempf;\r
           CopyMType(&medtype,emtype);\r
-          CoTaskMemFree(emtype->pbFormat);\r
+ if (emtype->pbFormat!=NULL) CoTaskMemFree(emtype->pbFormat);\r
+                \r
                  CoTaskMemFree(emtype);\r
           gotmt=true;\r
           break;\r
         }\r
 \r
       }\r
     CoTaskMemFree(emtype->pbFormat);\r
if (emtype->pbFormat!=NULL) CoTaskMemFree(emtype->pbFormat);\r
          CoTaskMemFree(emtype);\r
     }\r
     emt->Release();\r
@@ -234,14 +251,14 @@ HRESULT STDMETHODCALLTYPE DsSourcePin::Connect(IPin *pinempf,const AM_MEDIA_TYPE
           if (pinempf->ReceiveConnection((IPin*)this,emtype)==S_OK) {\r
             connected=pinempf;\r
             CopyMType(&medtype,emtype);\r
-            CoTaskMemFree(emtype->pbFormat);\r
+            if (emtype->pbFormat!=NULL) CoTaskMemFree(emtype->pbFormat);\r
                                                CoTaskMemFree(emtype);\r
             gotmt=true;\r
             break;\r
           }\r
 \r
         }\r
-        CoTaskMemFree(emtype->pbFormat);\r
+        if (emtype->pbFormat!=NULL) CoTaskMemFree(emtype->pbFormat);\r
                CoTaskMemFree(emtype);\r
       }\r
       emt->Release();\r
@@ -340,7 +357,7 @@ HRESULT STDMETHODCALLTYPE DsSourcePin::ReceiveConnection(IPin *connect,
     CopyMType(mtype,&medtype);\r
     return S_OK;\r
    } else {\r
-     ZeroMemory(mtype,sizeof(mtype));\r
+     ZeroMemory(mtype,sizeof(*mtype));\r
      return VFW_E_NOT_CONNECTED;\r
    }\r
  }\r
@@ -425,6 +442,7 @@ HRESULT DsSourcePin::GetMediaType(int iPosition, AM_MEDIA_TYPE *pmt)
       wfe.wfx.nAvgBytesPerSec=32000;\r
       wfe.wfx.nBlockAlign=768;\r
       wfe.wfx.wFormatTag=WAVE_FORMAT_MPEG;\r
+         wfe.wfx.wBitsPerSample=0;\r
       wfe.fwHeadLayer=2;\r
       wfe.dwHeadBitrate=256000;\r
       wfe.fwHeadMode=ACM_MPEG_STEREO;\r
index f0aed8fa813d7abdf0253bbaa45da810e8db835f..28d6abd4a918c7beb088e2964067930992a8f957 100644 (file)
@@ -199,6 +199,26 @@ int RemoteWin::ReceiveButtonAP(UINT button) {
                pb=VOLUMEDOWN;break;\r
        case APPCOMMAND_VOLUME_UP:\r
                pb=VOLUMEUP;break;\r
+       case VOMP_YELLOW:\r
+               pb=YELLOW; break;\r
+       case VOMP_BLUE:\r
+               pb=BLUE;break;\r
+       case VOMP_RED:\r
+               pb=RED;break;\r
+       case VOMP_GREEN:\r
+               pb=GREEN;break;\r
+       case VOMP_ENTER:\r
+               pb=OK;break;\r
+       case VOMP_CANCEL:\r
+               pb=BACK;break;\r
+       case VOMP_UP:\r
+               pb=UP;break;\r
+       case VOMP_DOWN:\r
+               pb=DOWN;break;\r
+       case VOMP_LEFT:\r
+               pb=LEFT;break;\r
+       case VOMP_RIGHT:\r
+               pb=RIGHT;break;\r
        };\r
        if (pb==NA_NONE) return 0;\r
        curevent=pb;\r
index 11787604cf4cd289c3372a616349483b28a2f7fe..fdb13b971d3e5b875f5ab326740163febd017427 100644 (file)
 #include <winsock2.h>\r
 #include <winuser.h>\r
 #define VOMPACCELERATOR 1\r
+#define VOMPMENU 2\r
 #define VOMP_FULL_SCREEN 101\r
+#define VOMP_YELLOW 102\r
+#define VOMP_BLUE 103\r
+#define VOMP_RED 104\r
+#define VOMP_GREEN 105\r
+#define VOMP_ENTER 106\r
+#define VOMP_CANCEL 107\r
+#define VOMP_UP 108\r
+#define VOMP_DOWN 109\r
+#define VOMP_LEFT 110\r
+#define VOMP_RIGHT 111\r
+#define VOMP_CURSORUPDATE 112\r
+#define VOMP_TOPMOST 113\r
+\r
 \r
 #define VOMPRESWIN_H\r
 #endif\r
index b4620a37fc6bbb9737fffc859be5e77ce7be6a4d..80c0db55a20cfe15ad3c34e41be682c7f2add915 100644 (file)
@@ -44,7 +44,56 @@ vdr.jpg RCDATA other\vdr.jpg
 wallpaperNTSC.jpg RCDATA other\wallpaperNTSC.jpg\r
 wallpaperPAL.jpg RCDATA other\wallpaperPAL.jpg\r
 \r
-\r
+VOMPMENU MENU\r
+BEGIN\r
+       POPUP "Dummy"\r
+       BEGIN\r
+               MENUITEM "&Play \t Shift+Ctrl+P",       APPCOMMAND_MEDIA_PLAY\r
+               MENUITEM "Pause\t Ctrl+P",              APPCOMMAND_MEDIA_PAUSE\r
+               MENUITEM "&Stop\tCtrl+S",               APPCOMMAND_MEDIA_STOP\r
+               MENUITEM "Record\tCtrl+R",              APPCOMMAND_MEDIA_RECORD\r
+               MENUITEM SEPARATOR\r
+               MENUITEM "Rewind\t Shift+Ctrl+B",       APPCOMMAND_MEDIA_REWIND\r
+               MENUITEM "Fast Forward\t Shift+Ctrl+F", APPCOMMAND_MEDIA_FAST_FORWARD\r
+               MENUITEM SEPARATOR\r
+               MENUITEM "Skip Backward\tCtrl+B",       APPCOMMAND_MEDIA_PREVIOUSTRACK\r
+               MENUITEM "Skip Forward\tCtrl+F",        APPCOMMAND_MEDIA_NEXTTRACK\r
+               MENUITEM SEPARATOR\r
+               POPUP "&Menu"\r
+               BEGIN\r
+                       MENUITEM "&OK\tEnter",                          VOMP_ENTER\r
+                       MENUITEM "&Cancel\t Backspace",         VOMP_CANCEL\r
+                       MENUITEM SEPARATOR\r
+                       MENUITEM "&Up",                                         VOMP_UP\r
+                       MENUITEM "&Down",                                       VOMP_DOWN\r
+                       MENUITEM SEPARATOR\r
+                       MENUITEM "&Left",                                       VOMP_LEFT\r
+                       MENUITEM "&Right",                                      VOMP_RIGHT\r
+               END\r
+               MENUITEM SEPARATOR\r
+               POPUP "Volume"\r
+               BEGIN\r
+                       MENUITEM "Volume &Up\tF10",             APPCOMMAND_VOLUME_UP\r
+                       MENUITEM "Volume &Down\t F9",           APPCOMMAND_VOLUME_DOWN\r
+                       MENUITEM "Volume &Mute\tF8",            APPCOMMAND_VOLUME_MUTE\r
+               END\r
+               MENUITEM SEPARATOR\r
+               POPUP "&Buttons"\r
+               BEGIN\r
+                       MENUITEM "&Yellow",                     VOMP_YELLOW\r
+                       MENUITEM "&Blue",                       VOMP_BLUE\r
+                       MENUITEM "&Green",                      VOMP_GREEN\r
+                       MENUITEM "&Red",                        VOMP_RED\r
+               END\r
+               MENUITEM SEPARATOR\r
+               MENUITEM "Channel &Up\t Page Up",       APPCOMMAND_MEDIA_CHANNEL_UP\r
+               MENUITEM "Channel &Down\t Page Down",   APPCOMMAND_MEDIA_CHANNEL_DOWN\r
+               MENUITEM SEPARATOR\r
+               MENUITEM "&Fullscreen\t Alt+Enter",     VOMP_FULL_SCREEN\r
+               MENUITEM SEPARATOR\r
+               MENUITEM "&Always on Top",                              VOMP_TOPMOST\r
+       END\r
+END\r
 \r
 \r
 \r
index 3a95f2584cb030891dc5372227073561e599e5dd..92982a615c00b42eae62193085eca14f2666840f 100644 (file)
@@ -59,11 +59,13 @@ VDR* vdr;
 Video* video;\r
 Audio* audio;\r
 bool wnd_fullscreen=false;\r
+bool wnd_topmost=false;\r
 RECT wnd_fs_rect={20,20,768+20,576+20};\r
 RECT wnd_fs_rect_client={0,0,768,576};\r
 //OSVERSIONINFO windows_ver; //attempt to distigsh windows versions\r
 bool remotefnc=false;\r
-\r
+HINSTANCE  hinstance;\r
+bool cmenu=false;\r
 \r
 HMODULE user32dll;\r
 typedef UINT (WINAPI *GETRAWINPUTDATAFNC) (HRAWINPUT,UINT,LPVOID,PUINT,UINT);\r
@@ -72,6 +74,7 @@ typedef UINT (WINAPI *REGISTERRAWINPUTDEVICEFNC)  (PCRAWINPUTDEVICE,UINT,UINT);
 GETRAWINPUTDATAFNC dynGetRawInputData=NULL;\r
 REGISTERRAWINPUTDEVICEFNC dynRegisterRawInputDevices=NULL;\r
 \r
+DWORD lastmousemove;\r
 \r
 void MILLISLEEP(ULONG a)
 {
@@ -108,6 +111,7 @@ HACCEL acc;
 #define ERROR_MSG(str) MessageBox(win_main,str,"Error!",MB_OK|MB_ICONWARNING)\r
 INT WINAPI WinMain( HINSTANCE hinst , HINSTANCE previnst, LPSTR cmdline, int cmdshow)\r
 {\r
+       hinstance=hinst;\r
   //On Windows we have to init a window, we use DXUT\r
        LoadRemoteFunctions();\r
        if (!InitApp(hinst,cmdshow)) return false;\r
@@ -309,7 +313,7 @@ INT WINAPI WinMain( HINSTANCE hinst , HINSTANCE previnst, LPSTR cmdline, int cmd
   // Run main loop ---------------------------------------------------------------------------------------------------\r
 \r
   // Ok, all major device components and other bits are loaded and ready\r
-  \r
+  lastmousemove=timeGetTime();\r
   HANDLE commandthread;\r
  commandthread= CreateThread(NULL, 0, commandthreadStart, NULL,0, \r
          NULL);\r
@@ -439,7 +443,7 @@ void ToggleFullscreen() {
                  |WS_MINIMIZEBOX | WS_SIZEBOX |WS_MAXIMIZEBOX);\r
                SetWindowPos(win_main,NULL,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);\r
 \r
-               SetWindowPos(win_main,HWND_TOP,wnd_fs_rect.left,wnd_fs_rect.top,\r
+               SetWindowPos(win_main,wnd_topmost?HWND_TOPMOST:HWND_TOP,wnd_fs_rect.left,wnd_fs_rect.top,\r
                                                        wnd_fs_rect.right-wnd_fs_rect.left,\r
                                                        wnd_fs_rect.bottom-wnd_fs_rect.top,\r
                                                        SWP_DRAWFRAME | SWP_FRAMECHANGED);\r
@@ -457,7 +461,7 @@ void ToggleFullscreen() {
                moninfo.cbSize=sizeof(moninfo);\r
                wnd_fullscreen=true;\r
                if (!GetMonitorInfo(monitor,&moninfo)) return ;\r
-               SetWindowPos(win_main,HWND_TOP,moninfo.rcMonitor.left,moninfo.rcMonitor.top,\r
+               SetWindowPos(win_main,wnd_topmost?HWND_TOPMOST:HWND_TOP,moninfo.rcMonitor.left,moninfo.rcMonitor.top,\r
                        moninfo.rcMonitor.right,moninfo.rcMonitor.bottom,SWP_FRAMECHANGED);\r
                \r
                AdjustWindow();\r
@@ -467,6 +471,57 @@ void ToggleFullscreen() {
 \r
 }\r
 \r
+void ToggleTopmost() {\r
+       wnd_topmost=!wnd_topmost;\r
+       SetWindowPos(win_main,wnd_topmost?HWND_TOPMOST:HWND_NOTOPMOST,0,0,\r
+                       0,0,SWP_NOMOVE | SWP_NOSIZE);\r
+}\r
+\r
+void CursorUpdate() {\r
+       POINT cursorpos;\r
+       GetCursorPos(&cursorpos);\r
+       HWND asswind;\r
+       asswind=WindowFromPoint(cursorpos);\r
+       if (asswind!=win_main && asswind!=win) {\r
+               return ; //not our responsibility\r
+       }\r
+       if ((timeGetTime()-lastmousemove)<4000 || cmenu) {\r
+               SetCursor(LoadCursor(NULL,IDC_ARROW));\r
+       } else {\r
+               SetCursor(NULL);\r
+       }\r
+}\r
+\r
+bool ContextMenu(HWND wind,int x,int y) {\r
+       POINT p={x,y};\r
+       RECT clientrect;\r
+       ScreenToClient(wind,&p);\r
+       GetClientRect(wind,&clientrect);\r
+       if (!PtInRect(&clientrect,p)) return false;\r
+       ClientToScreen(wind,&p);\r
+       HMENU menu;\r
+       HMENU popup;\r
+       menu=LoadMenu(hinstance,MAKEINTRESOURCE(VOMPMENU));\r
+       popup=GetSubMenu(menu,0);\r
+       if (wnd_fullscreen) {\r
+               CheckMenuItem(popup,VOMP_FULL_SCREEN,MF_BYCOMMAND|MF_CHECKED);\r
+       } else {\r
+               CheckMenuItem(popup,VOMP_FULL_SCREEN,MF_BYCOMMAND|MF_UNCHECKED);\r
+       }\r
+       if (wnd_topmost) {\r
+               CheckMenuItem(popup,VOMP_TOPMOST,MF_BYCOMMAND|MF_CHECKED);\r
+       } else {\r
+               CheckMenuItem(popup,VOMP_TOPMOST,MF_BYCOMMAND|MF_UNCHECKED);\r
+       }\r
+       cmenu=true;\r
+       TrackPopupMenu(popup,TPM_RIGHTBUTTON|TPM_LEFTALIGN,x,y,0,wind, NULL);\r
+       cmenu=false;\r
+\r
+\r
+       DestroyMenu(menu);\r
+       return true;\r
+}\r
+\r
 LONG FAR PASCAL WindowProc(HWND wind, UINT msg, WPARAM wparam, LPARAM lparam)\r
 {\r
    \r
@@ -540,6 +595,10 @@ LONG FAR PASCAL WindowProc(HWND wind, UINT msg, WPARAM wparam, LPARAM lparam)
                        ToggleFullscreen();\r
                        return 0;\r
                }\r
+               if (LOWORD(wparam)==VOMP_TOPMOST) {\r
+                       ToggleTopmost();\r
+                       return 0;\r
+               }\r
                if (((RemoteWin*)remote)->ReceiveButtonAP(LOWORD(wparam))){\r
                        return 0; //yes we process that message\r
                } else {\r
@@ -549,7 +608,7 @@ LONG FAR PASCAL WindowProc(HWND wind, UINT msg, WPARAM wparam, LPARAM lparam)
                break;\r
        case WM_SETCURSOR:\r
                if (((HANDLE)wparam)==win) {\r
-                       SetCursor(NULL);\r
+                       CursorUpdate();\r
                        return 1;\r
                } else {\r
                        return DefWindowProc(wind, msg, wparam, lparam);\r
@@ -563,6 +622,28 @@ LONG FAR PASCAL WindowProc(HWND wind, UINT msg, WPARAM wparam, LPARAM lparam)
                        return DefWindowProc(wind,msg,wparam, lparam);\r
                }\r
                break;\r
+       case WM_MOUSEMOVE:\r
+               lastmousemove=timeGetTime();\r
+               SetCursor(LoadCursor(NULL,IDC_ARROW));\r
+               SetTimer(wind,VOMP_CURSORUPDATE,4500,NULL);\r
+               return 0;\r
+               //return DefWindowProc(wind,msg,wparam, lparam);\r
+               break;\r
+       case WM_TIMER:\r
+               if (wparam==VOMP_CURSORUPDATE) {\r
+                       CursorUpdate();\r
+                       return 0;\r
+               }\r
+               return DefWindowProc(wind, msg, wparam, lparam);\r
+\r
+               break;\r
+       case WM_CONTEXTMENU:\r
+               if (!ContextMenu(wind,GET_X_LPARAM(lparam),GET_Y_LPARAM(lparam))) {\r
+                       return DefWindowProc(wind, msg, wparam, lparam);\r
+               } else {\r
+                       return 0;\r
+               }\r
+\r
     default:\r
         return DefWindowProc(wind, msg, wparam, lparam);\r
     }\r
@@ -600,7 +681,7 @@ bool InitApp(HINSTANCE hinst,int cmdshow) {
        /* in order to handle letterboxing we use a child window */\r
        WNDCLASS child_wcs;\r
        child_wcs.style = CS_HREDRAW | CS_VREDRAW;\r
-    child_wcs.lpfnWndProc = DefWindowProc;\r
+    child_wcs.lpfnWndProc = WindowProc;\r
     child_wcs.cbClsExtra = 0;\r
     child_wcs.cbWndExtra = sizeof(DWORD);\r
     child_wcs.hInstance = hinst;\r