aboutsummaryrefslogtreecommitdiff
path: root/Src/nsv/nsvplay/video.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/nsv/nsvplay/video.h')
-rw-r--r--Src/nsv/nsvplay/video.h160
1 files changed, 160 insertions, 0 deletions
diff --git a/Src/nsv/nsvplay/video.h b/Src/nsv/nsvplay/video.h
new file mode 100644
index 00000000..535cee24
--- /dev/null
+++ b/Src/nsv/nsvplay/video.h
@@ -0,0 +1,160 @@
+#ifndef _VIDEO_H
+#define _VIDEO_H
+
+#include <windows.h>
+#include <ddraw.h>
+#include <multimon.h>
+
+#include "main.h"
+
+#define NUM_WIDGETS 11
+
+class VideoOutput;
+class SubsItem;
+
+class VideoOutputChild {
+public:
+ VideoOutputChild() { m_mon_x=m_mon_y=0; }
+ virtual ~VideoOutputChild() { }
+
+ virtual int create(VideoOutput *parent, int w, int h, unsigned int type, int flipit, double aspectratio)=0; //return 1 if ok
+ virtual int needChange()=0; //return 1 if need to renegociate video output
+
+ virtual int onPaint(HWND hwnd, HDC hdc) { return 0; } //return 1 if override
+ virtual void displayFrame(const char *buf, int size, int time)=0;
+
+ virtual void goFullScreen()=0;
+ virtual void removeFullScreen()=0;
+ virtual int showOSD() { return 0; }
+ virtual void hideOSD() { }
+
+ virtual void timerCallback() { }
+
+ virtual void setPalette(RGBQUAD *pal) { }
+
+ virtual void drawSubtitle(SubsItem *item) { }
+ virtual void resetSubtitle() { }
+
+ char m_szTest[512];
+
+ void update_monitor_coords(VideoOutput *parent);
+ int m_mon_x;
+ int m_mon_y;
+ int m_found_devguid;
+ GUID m_devguid;
+ HMONITOR m_monitor_to_find;
+};
+
+#include "vid_overlay.h"
+#include "vid_ddraw.h"
+
+class VideoOutput : public IVideoOutput {
+ public:
+ VideoOutput(HWND parent_hwnd=NULL, int initxpos=CW_USEDEFAULT, int initypos=CW_USEDEFAULT);
+ ~VideoOutput();
+ int open(int w, int h, int vflip, double aspectratio, unsigned int fmt);
+ void close();
+ void draw(void *frame);
+ void drawSubtitle(SubsItem *item);
+ void showStatusMsg(const char *text);
+ void notifyBufferState(int bufferstate); /* 0-255*/
+ int get_latency();
+ void setcallback(LRESULT (*msgcallback)(void *token, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam), void *token) { m_msgcallback_tok=token; m_msgcallback=msgcallback; }
+ void setNSVDecoder(NSVDecoder *nsv_decoder) { decoder = nsv_decoder; }
+
+ void fullscreen();
+ void remove_fullscreen();
+ int is_fullscreen();
+
+ HWND getHwnd() { return video_hwnd; }
+
+ void adjustAspect(RECT &rd);
+
+ int vid_vsync;
+ int vid_aspectadj;
+ int vid_overlays;
+ int vid_ddraw;
+
+ void getViewport(RECT *r, HWND wnd, int full);
+ void setOutputSize(int w, int h);
+ void getOutputSize(int *w, int *h);
+
+ int osdShowing() { return show_osd; }
+ int osdReady() { return ctrlrects_ready; }
+ void showOSD();
+ void hideOSD();
+ void drawOSD(HDC hdc, RECT *r);
+ int getOSDbarHeight() { return (show_osd && ctrlrects_ready) ? (ctrlrect_all.bottom - ctrlrect_all.top) : 0; };
+
+ private:
+
+
+ LRESULT WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
+ static int class_refcnt;
+
+ static LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
+
+ HWND video_hwnd, video_parent_hwnd;
+ NSVDecoder *decoder;
+
+ double aspect;
+ int width, height, flip;
+ unsigned int type;
+ int uyvy_output,yuy2_output;
+ int i420_output;
+ int is_fs;
+ int ignore_mousemove_count;
+ int show_osd;
+ HWND oldfsparent;
+ RECT oldfsrect; // the old window rect, BEFORE fullscreen mode was entered
+ RECT lastfsrect; // the most recent bounding rect when in fullscreen mode
+ LONG oldfsstyle;
+
+ int m_bufferstate;
+ void resetSubtitle();
+ SubsItem *curSubtitle;
+
+ // ONSCREEN DISPLAY (osd):
+ HFONT osdFontText;
+ HFONT osdFontSymbol;
+ HGDIOBJ osdProgressBrushBg;
+ HGDIOBJ osdProgressBrushFg;
+ HGDIOBJ osdProgressPenBg;
+ HGDIOBJ osdProgressPenFg;
+ HGDIOBJ osdProgressPenBgHilite;
+ HGDIOBJ osdBlackBrush;
+ void osdHitTest(int x, int y, int dragging);
+ int osdLastClickItem;
+ HDC osdMemDC; // memory device context
+ HBITMAP osdMemBM; // memory bitmap (for memDC)
+ HBITMAP osdOldBM; // old bitmap (from memDC)
+ int osdMemBMW; // width of memory bitmap
+ int osdMemBMH; // height of memory bitmap
+ int osdLastMouseX; // for WM_MOUSEMOVE thresholding, so osd isn't spastic
+ int osdLastMouseY; // for WM_MOUSEMOVE thresholding, so osd isn't spastic
+ RECT ctrlrect[NUM_WIDGETS]; // relative to [i.e. (0,0) is] upper left corner of the black strip @ the bottom
+ RECT ctrlrect_all; // relative to [i.e. (0,0) is] upper left corner of the black strip @ the bottom
+ int ctrlrects_ready;
+
+ LRESULT (*m_msgcallback)(void *token, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
+ void *m_msgcallback_tok;
+
+ VideoOutputChild *m_video_output;
+ VideoOutputChild *createVideoOutput(int n);
+
+ CRITICAL_SECTION m_cs;
+ char *m_statusmsg;
+
+ int m_need_change;
+
+ HBITMAP m_logo;
+ int m_logo_w, m_logo_h;
+
+ DWORD m_lastbufinvalid;
+
+#ifdef ACTIVEX_CONTROL
+ int m_firstframe;
+#endif
+};
+
+#endif \ No newline at end of file