簡體   English   中英

如何使用Xlib逐幀顯示像素來制作視頻序列?

[英]How to display pixels frame by frame using Xlib to make a video sequence?

我想使用Xlib逐幀繪制像素。

如果我的幀尺寸為1100 * 1000,我應該寫這樣的東西嗎?

for(i=0;i<=1100;i++)
{
 for(j=0;j<=1000;j++)
  {
    XDrawPoint(arguments,i,j);
  }
}

但是,這僅適用於單幀。 如何重復它來顯示視頻序列?

為了回答你的實際問題:准備下一幀,然后nanosleep(2)直到顯示下一幀,然后告訴X11顯示它。 根據我的理解,使用VDPAU,您可以通過向服務器提供准備好的幀來獲得更精確的幀定時,其時間戳顯示在何時顯示。 然后,您不需要那么好的軟實時喚醒行為來在正確的時間顯示您的幀。

將每個像素單獨發送到X服務器將非常慢。 查看Xv(x-video),或在本地繪制整個pixmap並將其發送到服務器。 或者OpenGL將是另一種用於繪制紋理並在屏幕上顯示它們的API。 mpv或vlc這樣的視頻播放軟件最近使用OpenGL進行視頻輸出,可以實現高質量的縮放,也可以使用復合桌面實現更好的行為。 Xv曾經是默認設置,幾乎在所有Linux系統上都能很好地運行,即使是沒有良好OpenGL支持的系統也是如此。 (視頻播放軟件不僅使用pixmaps,因為它們需要硬件支持,以便從YUV轉換為RGB,並將硬件縮放到全屏)。

從長遠來看,您可能最好將Qt或GTK庫用於代碼。 如果你還不知道低級X11 API,那么學習它們主要是浪費時間,IMO。 現在使用便攜式窗口庫編寫程序是一個更好的主意,因此它們可以很好地集成到人們的桌面中,並且可以針對Linux / Mac / Windows本機圖形進行編譯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM