mirror of
https://github.com/WinampDesktop/winamp.git
synced 2025-06-19 10:05:46 -04:00
Initial community commit
This commit is contained in:
160
Src/nsv/nsvplay/video.h
Normal file
160
Src/nsv/nsvplay/video.h
Normal file
@ -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
|
Reference in New Issue
Block a user