SDL綁定播放窗口 及 視頻窗口縮放


 綁定播放窗口

必須在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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM