12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- #ifndef NULLSOFT_VIDEOOUTPUTH
- #define NULLSOFT_VIDEOOUTPUTH
- extern "C" {
- #include "main.h" // would rather not do this.
- };
- #include <ddraw.h>
- #include "../nu/AutoLock.h"
- #include "VideoOSD.h"
- #include "VideoAspectAdjuster.h"
- #include "vid_d3d.h"
- class VideoRenderer;
- extern IVideoOSD *posd;
- #define VIDEO_OPEN_
- #define SHOW_STREAM_TITLE_AT_TOP 1
- void ResizeVideoWindowToCurrent();
- void updateTrackSubmenu();
- using namespace Nullsoft::Utility;
- class VideoOutput : public IVideoOutput, public VideoAspectAdjuster
- {
- 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 fullscreen();
- void remove_fullscreen();
- int is_fullscreen();
- void adjustAspect(RECT &rd);
- INT_PTR extended(INT_PTR param1, INT_PTR param2, INT_PTR param3);
- int isVideoPlaying() { return m_opened; }
- DWORD GetWidthHeightDWORD() { return width | (height << 16); }
- ITrackSelector *getTrackSelector() { return m_tracksel; }
- void SetVideoPosition(int x, int y, int width, int height);
- HWND getHwnd() { return video_hwnd; }
- void mainthread_Create();
- private:
- void UpdateText(const wchar_t *videoInfo);
- int openUser(int w, int h, int vflip, double aspectratio, unsigned int fmt);
- void LoadLogo();
- void OpenVideoSize(int newWidth, int newHeight, double newAspect);
- VideoRenderer *FindBestRenderer();
- void PaintLogo(int bufferState);
- void DrawLogo(HDC canvas, RECT *canvas_size);
- void resetSubtitle();
- void UpdateVideoSize(int newWidth, int newHeight, double aspect = 1.0, int zoom = ID_VIDEOWND_ZOOM100);
- bool is_fs, fs_has_resized;
- unsigned int last_fullscreen_exit_time;
- 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;
- double aspect;
- int width, height;
- unsigned int type;
- RECT oldfsrect; // the old window rect, BEFORE fullscreen mode was entered
- RECT lastfsrect; // the most recent bounding rect when in fullscreen mode
- int m_bufferstate;
- SubsItem *curSubtitle;
- LRESULT (*m_msgcallback)(void *token, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
- void *m_msgcallback_tok;
- Direct3DVideoOutput *m_video_output;
- char *m_statusmsg;
- bool m_need_change, m_ignore_change;
- bool m_opened;
- HBITMAP m_logo;
- int m_logo_w, m_logo_h;
- int m_lastbufinvalid;
- HWND fs_reparented;
- HRGN fs_reparented_rgn;
- ITrackSelector *m_tracksel;
- LockGuard guard, textGuard;
- int clickx, clicky;
- RGBQUAD *video_palette;
- // IVideoOSD osd;
- bool userVideo;
- bool video_created;
- };
- #endif
|