原创 一個簡單的視頻播放器(基於FFMPEG4.0+SDL2.0.8,在Ubuntu 14.04下開發驗證) - 續2

昨天那個例子,在 Ubuntu 14.04下播放視頻時,有個問題,有播放幾秒後,畫面就變成黑白的了。剛開始懷疑是UV數據丟失,不過在將YUV數據輸出到文件,用YUV Player Deluxe播放,畫面色彩正常着。今天在主程序中新起了一個

原创 一個純粹的視頻解碼程序(基於FFMPEG 4.0,在Ubuntu 14.04下驗證)

程序功能:將指定的視頻文件,解碼爲原始YUV數據,只包含視頻流。開發環境:Ubuntu 14.04, GCC 4.8.4, FFMPEG 4.0編譯方法: 將代碼copy命名爲SimpleDecoder.c,與Makefile放置於同一目

原创 三重指針使用demo

#include <stdio.h> #include <stdlib.h> /* * pop_out函數彈出size個(void *)類型的元素保存至數組(void*) arr[]中. * 因爲每次彈出的數量不確定,所以數組a

原创 Mesa代碼解讀 - VirtioGPU Winsys Layer

Mesa VirtioGPU Winsys Layer部分的代碼,最重要的兩個數據結構和賦值操作: struct virgl_screen繼承自struct pipe_screen,通過struct pipe_screen *virgl_

原创 OpenGL中內存和顯存之間的拷貝操作

1. 從內存至顯存 1.1 對Buffer object的操作,比較簡單: glGenBuffers(NumBuffers, Buffers); glBindBuffer(GL_ARRAY_BUFFER, Buffers[ArrayBu

原创 Mesa代碼解讀 - OpenGL API dispatch layer

拋開Nvidia閉源驅動,mesa可以說是linux系統標配的OpenGL框架實現。稱之爲框架實現,是因爲mesa並不是一個獨立應用,它編譯的結果是一堆.so動態庫。對應用程序而言,mesa提供了實現所有OpenGL和GLX API的li

原创 啓用Ubuntu的間接渲染Indirect Render(Test on Ubuntu 18.04)

安全起見,正式發佈的Ubuntu Desktop OS默認關閉了GLX的Indirect Render。修改以下幾項配置,可以啓用Indirect Render。 1. /usr/share/gdm/gdm.schemas     <s

原创 基於生產者-消費者模型的播放器(基於FFMPEG 4.0和SDL2.0.8,在Ubuntu 14.04下開發驗證)

程序說明:共三個文件,MyPlayerV2.c: 定義了兩個線程,一個解碼並將解碼後的數據存放至隊列;另外一個每40毫秒取一次隊列裏面的數據並顯示。video_frame_queue.h: 定義了一個隊列,裏面存放解碼後的frame數據,

原创 基於生產者-消費者模型的視頻播放器 - 續3

在《基於生產者-消費者模型的視頻播放器 - 續2》中還存在兩個問題:1. 視頻播放結束後,窗口不能自動退出,且無法響應鼠標、鍵盤事件;2. 有時按 空格  暫停不生效,或延時生效。主要原因是在Consumer Thread中,有兩個阻塞等

原创 一個簡單的視頻播放器(基於FFMPEG4.0+SDL2.0.8,在Ubuntu 14.04下開發驗證)

本程序改造自雷神的示例代碼。雷神的原示例代碼中,部分解碼核心函數在FFMPEG4.0中已經被聲明爲廢棄,GCC編譯時會提示deprecated。所以我根據FFMPEG4.0最新代碼說明,進行了小小的改造,供需要的同學參考。我的開發環境:U

原创 基於生產者-消費者模型的視頻播放器 - 續2

昨天《基於生產者-消費者模型的播放器(基於FFMPEG 4.0和SDL2.0.8,在Ubuntu 14.04下開發驗證)》中的程序,存在兩個遺留問題,今天都修改好了。之所以新開一篇而不是在原來的基礎上編輯,是爲了保留這個修改的過程。通過前