ffplay分析(視頻解碼線程的操作)

《ffplay的數據結構分析》
《ffplay分析(從啟動到讀取線程的操作)》
《ffplay分析(音頻解碼線程的操作)》
《ffplay 分析(音頻從Frame(解碼后)隊列取數據到SDL輸出)》
《ffplay分析 (視頻從Frame(解碼后)隊列取數據到SDL輸出)》
《ffplay分析 (音視頻同步:主時鐘為音頻)》
《ffplay分析 (暫停 / 播放處理)》
《ffplay分析 (seek操作處理)》

ffplay分析(視頻解碼線程的操作)(版本:ffmpeg-4.2.1)

  • 一、分析:
    • 1、stream_component_open():開啟視頻解碼線程video_thread()
    • 2、video_thread():初始化timebase和framerate操作
    • 3、video_thread():調用get_video_frame()得到解碼完成的一幀數據
    • 4、get_video_frame():調用decoder_decode_frame()得到解碼后一幀數據
    • 5、decoder_decode_frame():循環調用avcodec_receive_frame()獲取解碼后的幀數據
    • 6、decoder_decode_frame():avcodec_receive_frame()獲取的結果判斷是否正常返回,還是退出循環往下走
    • 7、decoder_decode_frame():從Packet(解碼前)隊列獲取新的Packet
    • 8、decoder_decode_frame():獲取的Packet判斷是否是flush Packet
    • 9、decoder_decode_frame():調用avcodec_send_packet() 進行解碼
    • 10、get_video_frame():調用decoder_decode_frame()得到解碼后一幀數據后,判斷是否需要drop幀
    • 11、video_thread():調用get_video_frame()得到解碼完成的一幀數據后,計算這幀pts/duration,調用queue_picture()保存到Frame(解碼后)隊列
    • 12、queue_picture():調用frame_queue_peek_writable()獲取可寫Frame,設置相應參數
    • 13、queue_picture():調用av_frame_move_ref()移動AVFrame->buffer,調用frame_queue_push()表示添加到Frame(解碼后)隊列
    • 14、video_thread():視頻解碼線程結束處理,除了請求退出或異常退出,否則不會退出的。

一、分析:

1、stream_component_open():開啟視頻解碼線程video_thread()

在這里插入圖片描述

2、video_thread():初始化timebase和framerate操作

在這里插入圖片描述

3、video_thread():調用get_video_frame()得到解碼完成的一幀數據

在這里插入圖片描述

4、get_video_frame():調用decoder_decode_frame()得到解碼后一幀數據

在這里插入圖片描述

5、decoder_decode_frame():循環調用avcodec_receive_frame()獲取解碼后的幀數據

在這里插入圖片描述

6、decoder_decode_frame():avcodec_receive_frame()獲取的結果判斷是否正常返回,還是退出循環往下走

在這里插入圖片描述

7、decoder_decode_frame():從Packet(解碼前)隊列獲取新的Packet

在這里插入圖片描述

8、decoder_decode_frame():獲取的Packet判斷是否是flush Packet

在這里插入圖片描述

9、decoder_decode_frame():調用avcodec_send_packet() 進行解碼

在這里插入圖片描述

10、get_video_frame():調用decoder_decode_frame()得到解碼后一幀數據后,判斷是否需要drop幀

在這里插入圖片描述

11、video_thread():調用get_video_frame()得到解碼完成的一幀數據后,計算這幀pts/duration,調用queue_picture()保存到Frame(解碼后)隊列

在這里插入圖片描述

12、queue_picture():調用frame_queue_peek_writable()獲取可寫Frame,設置相應參數

在這里插入圖片描述

13、queue_picture():調用av_frame_move_ref()移動AVFrame->buffer,調用frame_queue_push()表示添加到Frame(解碼后)隊列

在這里插入圖片描述

14、video_thread():視頻解碼線程結束處理,除了請求退出或異常退出,否則不會退出的。

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379041.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379041.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379041.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【轉】.NET深入學習筆記(4):深拷貝與淺拷貝(Deep Copy and Shallow Copy)

今天繼續利用準備WSE安全開發文章的空閑時間,完善《.NET深入學習筆記》系列(基本都是.Net重要的知識點,我都做了詳細的總結,是什么、為什么、和怎么實現)。想必很多人也接觸過這兩個概念。做過C的人對深淺拷貝的概念一…

c語言數組-1_C數組-智能問題與解答

c語言數組-1C programming Arrays (One-D Array, Two-D Array) Aptitude Questions and Answers : In this section you will find C Aptitude Questions and Answers on One Dimensional (1D) and Two Dimensional (2D) array. C編程數組(一維數組,二維數組)能力問…

abap 添加alv上的工具欄的按鈕_Excel里的置頂功能——快速訪問工具欄

100萬職場人都在看后臺回復禮包領199元職場干貨大家好,我是小可~今天跟大家分享一個提高Excel操作效率的小技巧自定義你的快速訪問工具欄設置后的效果▼▼▼也就是把你最經常用到的兩三個功能放到快速訪問工具欄可以一眼就找到這些功能不需要靠快捷鍵或者功能選項卡…

用遞歸法求12+22+...+n2的值

思路分析: 談到遞歸,我個人會聯想到數學里面的通式。因為遞歸調用的函數的對應法則是相同的。例如這道題:f(x)=x。這個就是函數通式,只不過把每個求得的結果進行累加求和即可。用戶輸入5的時候,會出現f(5)=5,之后再進行x減一操作,執行f(4)=4,最后將每個進行累加即可。…

機器學習資料推薦

機器學習資料推薦 機器學習的資料 1:斯坦福大學視頻(作為入門教程,網易有中文字幕,而且講義也有翻譯版本)20集200左右講義 2:機器學習 Tom M.Mitchell(雖然出版10多年,但是通俗易懂的內容,讓讀者對機器學習…

ffplay源碼(版本:ffmpeg-4.2.1)

ffplay源碼(版本:ffmpeg-4.2.1) /** Copyright (c) 2003 Fabrice Bellard** This file is part of FFmpeg.** FFmpeg is free software; you can redistribute it and/or* modify it under the terms of the GNU Lesser General Public* Lic…

stringwriter_Java StringWriter toString()方法與示例

stringwriterStringWriter類的toString()方法 (StringWriter Class toString() method) toString() method is available in java.io package. toString()方法在java.io包中可用。 toString() method is used to represent the buffer current value in terms of string. toStr…

編寫一個函數,計算下式當n=10和n=100的值。

思路分析: 首先,我個人看法:當我拿到這道題的時候,我會把它當成一道數學題對待。分子是動的,恒為一,分母是進行依次增加的。且奇數項為正,偶數項為負。因為設計運算出現的是分數,故,設計選取存儲類型為double。 找出問題: ①正負號問題、②分母問題、③累計求和問題…

POJ 1001 大數的乘法

對這道題的理解 大數的乘法 關鍵是 實型的 那么首先就是數出來小數點有幾位這個相信很簡單 從后面往前數剛開始0 不算接著就是遇到小數點結束如果沒有小數點 那么置為0 接著就是輸出地時候首先算出小數點的位置然后輸出 你想怎么樣都行 從后往前數這個時候輸出 那么就是你也…

鈴木uy125摩托車機油_濟南鈴木安徽發布國四新車—6480元瑞夢125、9380元UY125

安徽合肥,這個具有兩千多年歷史的古城,以“三國故地、包拯家鄉”而聞名海內外,2019年4月22日濟南鈴木為這座城市帶來一份驚喜,今年正值國四執行,濟南鈴木旗下兩款國四新車瑞夢125與UY125正式在合肥與大家相見。濟南鈴木…

Andrej Karpathy最新大模型入門視頻講解

最近這兩天,特斯拉前AI總監 現在在OpenAI的安德烈卡帕西(Andrej Karpathy)的新教程火了 這次 他專門面向普通大眾做了一個關于大語言模型的科普視頻 時長1個小時,全部為“非技術介紹”, 涵蓋了模型推理、訓練、微…

Jquery 尋找父、子、兄弟節點

JQUERY的父,子,兄弟節點查找方法 jQuery.parent(expr) 找父親節點,可以傳入expr進行過濾,比如$("span").parent()或者$("span").parent(".class") jQuery.parents(expr),類似于jQuery.parents(exp…

編寫一個程序,計算用戶輸入的起始時間到終止時間之間相隔的天數。

思路分析: 閏年:閏年又分為普通閏年和世紀閏年 普通閏年:能被4整除且不能被100整除的為閏年(2004為閏年,1999不是閏年) 世紀閏年:能被400整除的是閏年(2020年是閏年,1900年不是閏年) 閏年共有366天&#x…

longvalue_Java Short類longValue()方法及示例

longvalue短類longValue()方法 (Short class longValue() method) longValue() method is available in java.lang package. longValue()方法在java.lang包中可用。 longValue() method is used to return the value denoted by this Short object converted to type long (by …

mvc的Controller返回值類型ActionResult詳解

一、簡介 ActionResult 操作方法通過執行工作并返回操作結果來響應用戶輸入。 操作結果表示框架將代表操作方法執行的命令。 ActionResult 類是操作結果的基類。 以下類型從 ActionResult 派生: ContentResult EmptyResult FileResult HttpUnauthorizedResult …

柵格布局一般怎么用_建筑混凝土色差大怎么辦?用這種方法處理,一般都看不出來...

由于模板銹蝕、脫模劑污染、原材料等原因,建筑混凝土成形后經常會遇到顏色不一致的現象,為此我們總結了混凝土面色差調整施工工藝,可供大家參考使用。一、混凝土面色差調整施工工藝流程及說明基層表面打磨→吸塵器吸塵→濕潤墻面→素水泥處理…

Java SimpleTimeZone equals()方法與示例

SimpleTimeZone類的equals()方法 (SimpleTimeZone Class equals() method) equals() method is available in java.util package. equals()方法在java.util包中可用。 equals() method is used to check whether this SimpleTimeZone and the given object (ob) are equals or …

FusionChart完全入門手冊4

想不想打造讓人震撼的圖表系統,想不想做出和別人不一樣的圖表,從本節起,我就帶領大家走入這片神奇的土地,讓大家去采摘屬于自己的創意之果,我們的目標是------個性無罪,個性萬歲! 問題三、如何做…

ffplay分析(音頻解碼線程的操作)

《ffplay的數據結構分析》 《ffplay分析(從啟動到讀取線程的操作)》 《ffplay分析(視頻解碼線程的操作)》 《ffplay 分析(音頻從Frame(解碼后)隊列取數據到SDL輸出)》 《ffplay分析 (視頻從Fram…

More Effective C++ (運算符)

4.1&#xff1a;謹慎定義類型轉換函數<1>容易的方法是利用一個最新的編譯器特性&#xff1a;explicit關鍵字<2>C編譯器把">>"作為一個符號來解釋&#xff0c;在兩個">"間沒有空格&#xff0c;語句會產生語法錯誤。<3>隱式類型轉…