綁定播放窗口
必須在Sdl.SDL_Init之前執行 Sdl.SDL_putenv
同時SDL_SetVideoMode里播放窗口長寬不能大於綁定窗口的長寬
int i = Sdl.SDL_putenv("SDL_WINDOWID=" + panel2.Handle.ToString()); if (i != 0) { MessageBox.Show("SDL初始化失敗!"); return false; }
視頻窗口縮放
如果需要設置播放窗口隨窗口大小變化而變化,則會發現dock等屬性無效,需要把綁定的播放控件大小設為非常大,至少大於全屏分辨率吧,然后在frm_Resize事件里處理
private void frm_Resize(object sender, EventArgs e) { if (this.WindowState == FormWindowState.Minimized) { return; } int PlayVideoWidth = this.Width - 50; //根據窗體的寬度獲取獲取視頻播放區域的寬度 int PlayVideoHeight = this.Height - 40;//窗體寬帶減去左右控件寬度及窗體邊框寬度,可能有一兩個像素的誤差 surfacePtr = Sdl.SDL_SetVideoMode(PlayVideoWidth, PlayVideoHeight, 0,Sdl.SDL_SWSURFACE | Sdl.SDL_RESIZABLE); rect = new Sdl.SDL_Rect(0, 0, (short)(PlayVideoWidth), (short)(PlayVideoHeight)); }
這里不需要修改SDL_CreateYUVOverlay的大小,CreateYUVOverlay的大小為視頻分辨率,DisplayYUVOverlay則為播放窗口的大小
SDL_SetVideoMode的參數顯示新的顯示大小,而SDL_CreateYUVOverlay(只需建立一次,SDL_SetVideoMode更換時,不需要跟着更換)的參數則是圖片的原始大小 。
而在SDL_DisplayYUVOverlay中用到的SDL_Rect,大小則和SDL_SetVideoMode一樣,也就是新的顯示大小。
對應未綁定播放窗口的需要在這里處理,鼠標事件 ev.type == Sdl.SDL_VIDEORESIZE
