T-UWA 020-2023 超高清視頻處理算法接口技術(shù)規(guī)范_第1頁
T-UWA 020-2023 超高清視頻處理算法接口技術(shù)規(guī)范_第2頁
T-UWA 020-2023 超高清視頻處理算法接口技術(shù)規(guī)范_第3頁
T-UWA 020-2023 超高清視頻處理算法接口技術(shù)規(guī)范_第4頁
T-UWA 020-2023 超高清視頻處理算法接口技術(shù)規(guī)范_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

ICS:33.160.25CCS:M74Technicalspecificationforinterfaceofultra-highdefinitionvideoprocessing世界超高清視頻產(chǎn)業(yè)聯(lián)盟發(fā)布T/UWA020-2023 I前言 12規(guī)范性引用文件 13術(shù)語、定義和縮略語 13.1術(shù)語和定義 13.2縮略語 24接口組成與分類 24.1概述 24.2接口分類 35算法接口要求 35.1算法任務(wù)接口 35.2算法服務(wù)接口 5.3接口補(bǔ)充說明 附錄A(資料性)音頻處理任務(wù)數(shù)據(jù)類型和接口規(guī)范 20附錄B(資料性)數(shù)據(jù)類型和接口函數(shù)原型 20附錄C(資料性)函數(shù)返回錯誤碼詳細(xì)說明 37附錄D(資料性)依賴庫版本詳細(xì)說明 40IT/UWA020-2023本文件按照GB/T1.1-2020《標(biāo)準(zhǔn)化工作導(dǎo)則第1部分:標(biāo)準(zhǔn)化文件的結(jié)構(gòu)和起草規(guī)則》的規(guī)定起草。本文件由世界超高清視頻產(chǎn)業(yè)聯(lián)盟(UWA)提出并歸口。本文件起草單位:京東方科技集團(tuán)股份有限公司、中國電子技術(shù)標(biāo)準(zhǔn)化研究院、北京百度網(wǎng)訊科技有限公司、北京廣播電視臺、北京中聯(lián)合超高清協(xié)同技術(shù)中心有限公司、海信視像科技股份有限公司、山東浪潮超高清智能科技有限公司、四川新視創(chuàng)偉超高清科技有限公司、北京奕斯偉科技集團(tuán)有限公司、華數(shù)數(shù)字電視傳媒集團(tuán)有限公司、北京流金歲月傳媒科技股份有限公司、深圳市奧拓電子股份有限公司、北京市博匯科技股份有限公司、北京銳馬視訊科技有限公司、咪咕文化科技有限公司、北京數(shù)碼視訊軟件技術(shù)發(fā)展有限公司、深圳創(chuàng)維—RGB電子有限公司、杭州當(dāng)虹科技股份有限公司、上海數(shù)字電視國家工程研究中心、深圳市洲明科技股份有限公司。本文件主要起草人:高艷、頓勝堡、陳冠男、趙曉鶯、崔騰鶴、王智信、陳少蓓、姜曉天、邢懷飛、賀文林、劉盼、王付生、陳益軍、謝恩鵬、趙明、盧劍平、楊益紅、孟慶強(qiáng)、李穎祎、鄒旭杰、周凱旋、王勇、謝明璞、郭忠武、姜衛(wèi)平、彭海、王清華、徐遙令、孫思凱、周聘、單華琦、王琦、陳曉鋒、殷惠清、譚勝淋。T/UWA020-2023隨著廣電領(lǐng)域?qū)Τ咔逡曨l內(nèi)容高效批量重制的需求增加,業(yè)界公司相繼推出了超高清視頻重制算法技術(shù)。這些技術(shù)為標(biāo)清和高清視頻的超高清重制提供了多樣性的技術(shù)解決方案。然而,當(dāng)前的超高清重制方案都是算法與硬件設(shè)備綁定的一體機(jī)模式或云端服務(wù)模式,只能使用一家公司的整體方案。如果想要更換其他公司的方案,就必須重新購買一體機(jī)和服務(wù),這增加了不必要的成本。此外,隨著專業(yè)用戶對相關(guān)技術(shù)的認(rèn)知不斷加深,希望能夠兼收并蓄各家公司的算法,以針對不同類型場景下的視頻進(jìn)行擇優(yōu)處理,最大化各個算法的優(yōu)勢。然而,由于各家公司的算法接口不一致,無法滿足客戶對不同公司算法優(yōu)勢互補(bǔ)和無縫切換的實際使用需求。為了解決上述問題,本文件描述了超高清視頻處理算法接口規(guī)范,包括算法任務(wù)接口和算法服務(wù)接口。標(biāo)準(zhǔn)的制定旨在通過對算法接口的統(tǒng)一化、算法框架流程的標(biāo)準(zhǔn)化以及算法服務(wù)的平臺化,實現(xiàn)一臺設(shè)備無縫切換不同算法方案,允許不同的算法模塊融合使用。這樣一來,用戶就能夠靈活選擇不同公司的算法方案,不再受限于特定硬件設(shè)備或服務(wù)提供商。同時,通過標(biāo)準(zhǔn)化算法接口,專業(yè)用戶可以更加方便地實現(xiàn)算法的兼容和優(yōu)勢互補(bǔ),從而提升視頻處理的效果和質(zhì)量。這一標(biāo)準(zhǔn)的制定對于促進(jìn)超高清視頻處理技術(shù)的發(fā)展和應(yīng)用具有重要意義,有助于滿足超高清領(lǐng)域?qū)Ω咝恐刂频男枨?,同時降低了客戶的成本,提高了用戶體驗。本文件的發(fā)布機(jī)構(gòu)提請注意,聲明符合本文件時,可能使用以下涉及的相關(guān)專利:——一種數(shù)據(jù)、視頻處理方法及裝置(中國專利申請?zhí)?02211528132.2);本文件的發(fā)布機(jī)構(gòu)對于該專利的真實性、有效性和范圍無任何立場。該專利持有人已向本文件的發(fā)布機(jī)構(gòu)承諾,其愿意同任何申請人在合理且無歧視的條款和條件下,就專利授權(quán)許可進(jìn)行談判。該專利持有人的聲明已在本文件的發(fā)布機(jī)構(gòu)備案。相關(guān)信息可以通過以下聯(lián)系方式獲得:聯(lián)系人:蘇京通訊地址:北京市經(jīng)濟(jì)技術(shù)開發(fā)區(qū)地澤路9號郵政編碼:100176電子郵件:sujing@電話址:/請注意除上述專利外,本文件的某些內(nèi)容仍可能涉及專利。本文件的發(fā)布機(jī)構(gòu)不承擔(dān)識別專利的責(zé)任1T/UWA020-2023超高清視頻處理算法接口技術(shù)規(guī)范本文件描述了超高清視頻處理算法接口的定義、組成與分類、數(shù)據(jù)類型、接口要求等內(nèi)容。本文件適用于超高清視頻處理算法的接入與應(yīng)用,也可用于指導(dǎo)超高清視頻處理系統(tǒng)與算法包、算法服務(wù)的系統(tǒng)集成與開發(fā)。2規(guī)范性引用文件下列文件中的內(nèi)容通過文中的規(guī)范性引用而構(gòu)成本文件必不可少的條款。其中,注日期的引用文件僅該日期對應(yīng)的版本適用于本文件;不注日期的引用文件,其最新版本(包括所有的修改單)適用于本文件。GB/T5271.15-2008信息技術(shù)詞匯第15部分:編程語言3術(shù)語、定義和縮略語3.1術(shù)語和定義下列術(shù)語和定義適用于本文件。3.1.1算法任務(wù)algorithmtask在一個處理器或者多個處理器上以交錯方式并發(fā)執(zhí)行的子程序模塊集合。3.1.2算法服務(wù)algorithmservice對算法任務(wù)的流程化管理。3.1.3對象object存儲并維持所指運(yùn)算效果的這些運(yùn)算的集合和數(shù)據(jù)。[來源:GB/T5271.15-2008,2]3.1.4類class一種抽象引用數(shù)據(jù)類型,適用于所指各對象,并為這些對象的實例定義內(nèi)部結(jié)構(gòu)和一套運(yùn)算的模板,包含成員變量和成員函數(shù)。[來源:GB/T5271.15-2008,2,有修改]3.1.52T/UWA020-2023成員變量membervariable類的組成部分,由一個標(biāo)識符、一組數(shù)據(jù)屬性、一個或多個地址和多個數(shù)據(jù)值組成,占用固定長度的內(nèi)存,包含數(shù)據(jù)類型和名稱。3.1.6成員函數(shù)memberfunction類的組成部分,通常帶有形參,并帶著所產(chǎn)生的數(shù)據(jù)值返回到其啟動處的子程序。3.2縮略語下列縮略語適用于本文件。AI:人工智能(ArtificialIntelligence)AVS:音視頻編碼標(biāo)準(zhǔn)(AudioVideoCodingStandard)HDR:高動態(tài)范圍(HighDynamicRange)GPU:圖形處理單元(GraphicsProcessingUnit)MPEG:運(yùn)動圖像專家組(MovingPictureExpertGroup)WMV:視窗多媒體視頻(WindowsMediaVideo)4接口組成與分類4.1概述圖1超高清視頻處理系統(tǒng)接口組成圖圖1為超高清視頻處理系統(tǒng)接口組成圖,功能如下:a)算法任務(wù)包含但不限于視頻解碼任務(wù)、視頻處理任務(wù)、視頻編碼任務(wù);——視頻解碼任務(wù)對輸入的視頻文件進(jìn)行解碼,得到視頻的媒體數(shù)據(jù);——視頻處理任務(wù)包含但不限于視頻降噪、超分辨率,幀率提升、HDR等超高清視頻處理算法功能,可分為AI算法任務(wù)和其他非AI傳統(tǒng)算法任務(wù);——視頻編碼任務(wù)是對經(jīng)過視頻處理任務(wù)處理完成的媒體數(shù)據(jù)進(jìn)行編碼,輸出視頻文件。算法任務(wù)間傳遞的數(shù)據(jù)包括媒體數(shù)據(jù)、元數(shù)據(jù)等。元數(shù)據(jù)用于記錄超高清視頻處理算法的名稱、版本、參數(shù)、廠家名稱,以及編解碼參數(shù)等信息。3T/UWA020-2023b)算法服務(wù)對算法任務(wù)進(jìn)行并發(fā)調(diào)度,具體功能包括任務(wù)創(chuàng)建、任務(wù)調(diào)度、資源管理、數(shù)據(jù)同步、時間同步,監(jiān)控算法任務(wù)的返回狀態(tài)和算法運(yùn)行日志并作出響應(yīng),算法服務(wù)間傳遞的數(shù)據(jù)包括配置節(jié)點和任務(wù)流程信息等。c)存儲/播放:經(jīng)過超高清視頻處理系統(tǒng)輸出的視頻文件可存儲在本地硬盤,或者在終端顯示設(shè)備上進(jìn)行渲染播放。4.2接口分類如圖1所示,超高清視頻處理算法接口分為算法任務(wù)接口和算法服務(wù)接口:a)算法任務(wù)接口:調(diào)用算法任務(wù)函數(shù)的接口,以實現(xiàn)具體的算法功能;b)算法服務(wù)接口:調(diào)用算法任務(wù)集合的接口,以實現(xiàn)對算法任務(wù)的流程化管理。5算法接口要求5.1算法任務(wù)接口5.1.1算法任務(wù)接口概述圖2超高清視頻處理算法任務(wù)接口示意圖圖2為超高清視頻處理算法任務(wù)接口示意圖。算法任務(wù)接口包含視頻解碼任務(wù)接口、GPU分發(fā)任務(wù)接口、視頻處理任務(wù)接口、GPU集合任務(wù)接口、視頻編碼任務(wù)接口,要求如下:a)視頻解碼任接口:通過該接口獲取視頻解碼數(shù)據(jù);b)GPU分發(fā)任務(wù)接口:通過該接口分發(fā)解碼幀數(shù)據(jù)給GPU;c)視頻處理任務(wù)接口:通過該接口對視頻幀序列進(jìn)行算法處理,包含但不限于視頻降噪、超分辨率,幀率提升、HDR等視頻處理算法功能;d)GPU集合任務(wù)接口:通過該接口將處理后的視頻幀數(shù)據(jù)進(jìn)行排序;e)視頻編碼任務(wù)接口:通過該接口輸出編碼數(shù)據(jù)及文件。5.1.2算法任務(wù)數(shù)據(jù)類型概述規(guī)定了算法任務(wù)接口所傳遞參數(shù)的類型。視頻流編碼格式類型視頻流編碼格式類型應(yīng)符合表1的規(guī)定。4T/UWA020-2023表1視頻流編碼格式類型說明表必備其中之一視頻流像素格式類型視頻流像素格式類型應(yīng)符合表2的規(guī)定。5T/UWA020-2023表2視頻流像素格式類型說明表必備其中之一視頻流色域類型視頻流色域類型應(yīng)符合表3的規(guī)定。6T/UWA020-2023表3色域類型說明表必備其中之一HDR標(biāo)準(zhǔn)類型HDR標(biāo)準(zhǔn)類型應(yīng)符合表4的規(guī)定。表4HDR標(biāo)準(zhǔn)類型說明表必備其中之一視頻文件封裝類型視頻文件封裝類型應(yīng)符合表5的規(guī)定。7T/UWA020-2023表5視頻文件封裝類型說明表必備其中之一視頻處理算法標(biāo)識類型視頻處理算法標(biāo)識類型應(yīng)符合表6的規(guī)定。表6視頻處理算法標(biāo)識類型說明表必備其中之一元數(shù)據(jù)信息類型元數(shù)據(jù)信息類型采用字符串形式,應(yīng)符合表7的規(guī)定。8T/UWA020-2023表7元數(shù)據(jù)信息類型說明表-算法任務(wù)配置信息類型算法任務(wù)配置信息類型采用字符串形式,應(yīng)符合表8的規(guī)定。超高清視頻處理算法任務(wù)包含視頻解碼任務(wù)、GPU分發(fā)任務(wù)、視頻處理任務(wù)、GPU集合任務(wù)、視頻編碼任務(wù)等。視頻解碼任務(wù)可對超高清視頻文件進(jìn)行解碼,需配置輸入文件名稱;GPU分發(fā)任務(wù)將解碼后的視頻幀數(shù)據(jù)進(jìn)行分發(fā),需配置可調(diào)度GPU資源;視頻處理任務(wù)對分發(fā)后的幀數(shù)據(jù)進(jìn)行處理,需配置的視頻處理算法標(biāo)識;視頻處理后的幀數(shù)據(jù)經(jīng)過GPU集合任務(wù)進(jìn)行有序集合;最后由視頻編碼任務(wù)對集合后的數(shù)據(jù)進(jìn)行編碼輸出,需配置編碼器格式、像素格式、封裝格式、HDR標(biāo)準(zhǔn)類型和輸出文件名稱等。表8算法任務(wù)配置信息說明表-視頻處理算法見表6。9T/UWA020-20230視頻解碼類視頻解碼類實現(xiàn)了視頻的解碼功能,封裝了解碼視頻幀數(shù)據(jù)接口函數(shù),獲取原始輸入視頻編碼信息的接口函數(shù)等,應(yīng)符合表9的規(guī)定。表9視頻解碼類主要成員函數(shù)說明表函數(shù)根據(jù)視頻文件路徑或視頻流來源解 1視頻編碼類視頻編碼類實現(xiàn)了視頻的編碼功能,封裝了創(chuàng)建視頻文件,視頻幀編碼等接口函數(shù),應(yīng)符合表10的規(guī)定,創(chuàng)建視頻文件函數(shù)需配置輸出視頻文件的編碼格式和像素格式等,應(yīng)符合表11的規(guī)定。表10視頻編碼類主要成員函數(shù)說明表根據(jù)傳入的參數(shù)創(chuàng)建編碼器和輸出視頻文件,具體參設(shè)置編碼視頻文件所需要的元數(shù)據(jù)信息,具體參數(shù)見編碼一幀視頻數(shù)據(jù),并寫入視頻文件,輸入為視頻幀 T/UWA020-2023表11創(chuàng)建視頻文件函數(shù)參數(shù)信息---5.1.3算法任務(wù)接口要求概述算法任務(wù)接口函數(shù)返回值若無特殊說明,均為:調(diào)用成功,返回0,調(diào)用失敗,返回錯誤碼,詳細(xì)錯誤碼類型見附錄C。視頻解碼任務(wù)接口函數(shù)視頻解碼任務(wù)對輸入的視頻文件或者視頻流等進(jìn)行解碼,接口函數(shù)列表應(yīng)符合表12的規(guī)定。表12視頻解碼任務(wù)接口函數(shù)列表初始化視頻解碼任務(wù),將視頻解碼類傳遞給視頻解視頻解碼任務(wù)的主體,實現(xiàn)了從視頻解碼類中獲取 視頻編碼任務(wù)接口函數(shù)視頻編碼任務(wù)對視頻幀數(shù)據(jù)進(jìn)行編碼,接口函數(shù)列表應(yīng)符合表13的規(guī)定。T/UWA020-2023表13視頻編碼任務(wù)接口函數(shù)列表視頻編碼任務(wù)初始化初始化視頻編碼任務(wù),將視頻編碼類傳遞給視頻編視頻編碼任務(wù)數(shù)據(jù)處視頻編碼任務(wù)釋放資--GPU分發(fā)任務(wù)接口函數(shù)GPU分發(fā)任務(wù)按幀號順序?qū)⒔獯a后的視頻幀數(shù)據(jù)分發(fā)給不同GPU上的算法任務(wù),接口函數(shù)列表應(yīng)符合表14的規(guī)定。表14GPU分發(fā)任務(wù)接口函數(shù)列表GPU分發(fā)任務(wù)初始化函數(shù)初始化GPU分發(fā)任務(wù)。函數(shù)輸入?yún)?shù)為可用GPU資源信息。GPU分發(fā)任務(wù)數(shù)據(jù)處理GPU分發(fā)任務(wù)釋放資源--GPU集合任務(wù)接口函數(shù)GPU集合任務(wù)把多個視頻處理任務(wù)處理后的視頻幀數(shù)據(jù)按照幀號順序進(jìn)行集合,接口函數(shù)列表應(yīng)符合表15的規(guī)定。表15GPU集合任務(wù)接口函數(shù)列表初始化GPU集合任務(wù)。函數(shù)輸入?yún)?shù)為可用GPU集合任務(wù)數(shù)據(jù)處理函數(shù)GPU集合任務(wù)釋放資源函數(shù)--T/UWA020-2023視頻處理任務(wù)接口函數(shù)視頻處理任務(wù)對視頻幀數(shù)據(jù)進(jìn)行算法處理,包括但不限于超分,降噪,插幀,HDR,接口函數(shù)列表應(yīng)符合表16的規(guī)定。表16視頻處理任務(wù)接口函數(shù)列表視頻處理任務(wù)初始化函數(shù)初始化算法任務(wù),函數(shù)的輸入?yún)?shù)為視頻處理算法標(biāo)識類視頻處理任務(wù)數(shù)據(jù)處理視頻處理任務(wù)釋放資源 5.1.4算法任務(wù)接口配置流程圖3算法任務(wù)接口配置流程圖3為算法任務(wù)接口配置流程,要求如下:a)調(diào)用前向節(jié)點配置函數(shù)配置算法任務(wù)輸入節(jié)點信息;b)調(diào)用后向節(jié)點配置函數(shù)配置算法任務(wù)輸出節(jié)點信息;c)如上一節(jié)點數(shù)據(jù)可讀,獲取輸入數(shù)據(jù),調(diào)用數(shù)據(jù)處理函數(shù)對數(shù)據(jù)進(jìn)行處理;d)若下一節(jié)點數(shù)據(jù)可寫,傳遞數(shù)據(jù)給下一節(jié)點;e)處理完成,則安全退出本次算法任務(wù)并釋放資源。5.2算法服務(wù)接口5.2.1算法服務(wù)接口概述算法服務(wù)在超高清處理系統(tǒng)中負(fù)責(zé)管理算法任務(wù)和調(diào)度資源,其包括三部分:任務(wù)創(chuàng)建類、數(shù)據(jù)同步類、流程管理類。T/UWA020-2023圖4算法服務(wù)接口示意圖圖4為算法服務(wù)接口示意圖,算法服務(wù)接口包含數(shù)據(jù)同步類接口、任務(wù)創(chuàng)建類接口、流程管理類接口,這三個類接口實現(xiàn)了對算法任務(wù)的流程化管理,要求如下:a)調(diào)用數(shù)據(jù)同步類接口可實現(xiàn)算法任務(wù)的數(shù)據(jù)及時間同步傳遞;b)調(diào)用任務(wù)創(chuàng)建類接口可實現(xiàn)對算法任務(wù)規(guī)則的預(yù)定義;c)調(diào)用流程管理類接口實現(xiàn)了資源管理、任務(wù)調(diào)度和狀態(tài)監(jiān)控。5.2.2算法服務(wù)數(shù)據(jù)類型概述規(guī)定了算法服務(wù)接口所傳遞參數(shù)的類型。數(shù)據(jù)節(jié)點類數(shù)據(jù)節(jié)點類封裝了操作數(shù)據(jù)的接口函數(shù),主要成員應(yīng)符合表17的規(guī)定。表17數(shù)據(jù)節(jié)點類主要成員說明表 可根據(jù)關(guān)鍵字查找對應(yīng)的數(shù)據(jù),函數(shù)返回為NULL表示失可根據(jù)關(guān)鍵字更改對應(yīng)的數(shù)據(jù),函數(shù)返回為NULL表示失可根據(jù)關(guān)鍵字移除數(shù)據(jù)鏈表中的數(shù)據(jù),函數(shù)返回表示NULL T/UWA020-20235.2.3算法服務(wù)接口要求概述若無特殊說明,算法服務(wù)接口函數(shù)的狀態(tài)返回值均為:調(diào)用成功,返回0,調(diào)用失敗,返回錯誤碼,詳細(xì)錯誤碼類型見附錄C。數(shù)據(jù)同步類數(shù)據(jù)同步類實現(xiàn)了算法任務(wù)的同步傳遞機(jī)制,包括數(shù)據(jù)同步和時間同步,數(shù)據(jù)同步類主要成員應(yīng)符合表18的規(guī)定。表18數(shù)據(jù)同步類主要成員說明表在多線程環(huán)境下,用來保證可寫內(nèi)存不被并發(fā)調(diào)用,類時,表示數(shù)據(jù)可寫,該值小在多線程環(huán)境下,用來保證可讀內(nèi)存不被并發(fā)調(diào)用,類型為信號量,該值大于0時,表示數(shù)據(jù)可讀,該值小于0--創(chuàng)建類的成員變量,并初始銷毀并釋放同步類的成員變量--圖5為數(shù)據(jù)同步類原理機(jī)制說明,規(guī)定如下:數(shù)據(jù)同步采用信號量來做同步控制,等待信號量時會阻塞當(dāng)前線程,直到信號量的值大于0繼續(xù)執(zhí)行;釋放信號量表示會將信號量的值增加1。等待內(nèi)存片段0的可讀信號量大于0,讀取數(shù)據(jù);之后釋放內(nèi)存片段0的可寫信號量,與此同時上一算法任務(wù)的數(shù)據(jù)可寫入內(nèi)存片段0;當(dāng)前算法任務(wù)對數(shù)據(jù)進(jìn)行處理,等待內(nèi)存片段1的可寫信號量大于0,寫入數(shù)據(jù);之后釋放內(nèi)存片段1的可讀信號量,通知下一算法任務(wù)可從內(nèi)存片段1讀取數(shù)據(jù)。T/UWA020-2023圖5數(shù)據(jù)同步類原理機(jī)制任務(wù)創(chuàng)建類任務(wù)創(chuàng)建類是算法任務(wù)創(chuàng)建的預(yù)定義規(guī)則,算法任務(wù)基于此規(guī)則創(chuàng)建后,可添加至算法服務(wù)中進(jìn)行流程化管理,任務(wù)創(chuàng)建類主要成員應(yīng)符合表19的規(guī)定。表19任務(wù)創(chuàng)建類主要成員說明表--流程管理類T/UWA020-2023流程管理類實現(xiàn)對算法任務(wù)的流程化管理,可為算法任務(wù)分配并管理資源、調(diào)度算法任務(wù),檢測算法任務(wù)狀態(tài),流程管理類主要成員應(yīng)符合表20的規(guī)定。表20流程管理類主要成員說明表--數(shù)源--T/UWA020-20235.2.4算法服務(wù)接口配置流程圖5算法服務(wù)接口參考執(zhí)行流程圖5為算法服務(wù)接口參考執(zhí)行流程,規(guī)定如下:a)創(chuàng)建算法任務(wù),即圖中算法任務(wù)0、算法任務(wù)1、算法任務(wù)2…算法任務(wù)n;b)將算法任務(wù)添加至流程管理類中進(jìn)行管理,并為算法任務(wù)創(chuàng)建線程,分配運(yùn)算資源;c)創(chuàng)建算法任務(wù)間傳遞對象,并調(diào)用配置前向/后向節(jié)點函數(shù)進(jìn)行算法任務(wù)節(jié)點配置;d)流程管理類監(jiān)測算法任務(wù)輸出節(jié)點數(shù)據(jù)為空時,關(guān)閉算法任務(wù)并釋放資源;e)若傳入數(shù)據(jù)為空,則安全退出本次算法任務(wù)并釋放資源。5.3接口補(bǔ)充說明接口補(bǔ)充說明如下:a)接口函數(shù)以動態(tài)鏈接庫的形式發(fā)布,開放給用戶使用;b)宜提供Windows系統(tǒng)、Linux系統(tǒng)、MacOS系統(tǒng),對于不同的操作系統(tǒng),編譯成不同的動態(tài)鏈接庫;c)內(nèi)存管理在具體的算法任務(wù)中實現(xiàn);d)附錄A為音頻處理任務(wù)數(shù)據(jù)類型和接口規(guī)范說明;e)附錄B為函數(shù)原型說明和c++語言調(diào)用示例;f)附錄C為函數(shù)返回錯誤碼詳細(xì)說明;g)附錄D為依賴庫版本詳細(xì)說明。T/UWA020-2023附錄B(資料性)附錄C音頻處理任務(wù)數(shù)據(jù)類型和接口規(guī)范C.1音頻處理任務(wù)數(shù)據(jù)類型A.1.1音頻編碼格式類型音頻編碼格式類型應(yīng)符合表A.1的規(guī)定。表A.1音頻編碼格式類型說明表A.1.2音頻解碼類音頻解碼類封裝了獲取音頻幀數(shù)據(jù)的接口函數(shù),應(yīng)符合表A.2的規(guī)定。表A.2音頻解碼類主要成員函數(shù)說明表A.1.2音頻編碼類音頻編碼類封裝了編碼音頻幀數(shù)據(jù)的接口函數(shù),應(yīng)符合表A.3的規(guī)定。A.3音頻編碼類主要成員函數(shù)說明表C.2音頻處理任務(wù)接口C.2.1概述T/UWA020-2023音頻處理任務(wù)接口函數(shù)返回值若無特殊說明,均為:調(diào)用成功,返回0,調(diào)用失敗,返回錯誤碼,詳細(xì)錯誤碼類型見附錄C。C.2.2音頻解碼任務(wù)類接口音頻解碼任務(wù)對輸入的音頻流進(jìn)行解碼,接口函數(shù)列表應(yīng)符合表A.4的規(guī)定。表A.4音頻解碼任務(wù)接口函數(shù)列表初始化音頻解碼任務(wù),將音頻解碼類傳遞給音頻解碼任務(wù);音頻解碼音頻解碼任務(wù)的主體,實現(xiàn)了從音頻解碼類中獲取每一幀數(shù)據(jù),并把C.2.3音頻編碼任務(wù)類接口音頻編碼任務(wù)將音頻數(shù)據(jù)進(jìn)行編碼,接口函數(shù)列表應(yīng)符合表A.5的規(guī)定。表A.5音頻編碼任務(wù)接口函數(shù)列表初始化音頻編碼任務(wù),將音頻編碼類傳遞給音頻編碼任務(wù);音頻編T/UWA020-2023附錄E(資料性)附錄F數(shù)據(jù)類型和接口函數(shù)原型B.1算法服務(wù)接口函數(shù)F.1.1數(shù)據(jù)同步類F.1.1.1函數(shù)聲明classUnitSynArg{public:intrelease();//資源釋放函數(shù)sem_treadable_sem;//可讀信號量sem_twriteable_sem;//可寫信號量PassingPara*passing_para;//數(shù)據(jù)節(jié)點類F.1.1.2數(shù)據(jù)節(jié)點類F.函數(shù)聲明classPassingPara{public:std::map<constchar*,void*,cmp_str>para_dict;//數(shù)據(jù)鏈表intinit(PassingPara*passing_para);//初始化函數(shù)void*get_item(constchar*);//獲取數(shù)據(jù)函數(shù)intadd_item(constchar*,void*);//增加數(shù)據(jù)函數(shù)void*change_item(constchar*,void*);//更改數(shù)據(jù)函數(shù)void*remove_item(constchar*);//移除數(shù)據(jù)函數(shù)F.初始化函數(shù)函數(shù)原型:intPassingPara::init(PassingPara*passing_para);函數(shù)調(diào)用參數(shù)見表B.1。T/UWA020-2023PassingPara*F.獲取數(shù)據(jù)函數(shù)函數(shù)原型:void*PassingPara::get_item(constchar*key);函數(shù)調(diào)用參數(shù)見表B.2。F.增加數(shù)據(jù)函數(shù)函數(shù)原型:intPassingPara::add_item(constchar*key,void*val);增加數(shù)據(jù)函數(shù)調(diào)用參數(shù)見表B.3。F.更改數(shù)據(jù)函數(shù)函數(shù)原型:void*PassingPara::change_item(constchar*key,void*val);函數(shù)調(diào)用參數(shù)見表B.4。F.刪除數(shù)據(jù)函數(shù)函數(shù)原型:void*PassingPara::remove_item(constchar*key);函數(shù)調(diào)用參數(shù)見表B.5。T/UWA020-2023F.1.2流程管理類F.1.2.1函數(shù)聲明classVideoProcessFramework{public:intadd_task(FrameProcessUnit*frame_process_unit);//添加任務(wù)函數(shù)intstart_tasks();//啟動任務(wù)函數(shù)intclose_tasks();//關(guān)閉任務(wù)函數(shù)private:staticvoid*process_thread(void*arg);//算法任務(wù)線程函數(shù)std::vector<FrameProcessUnit*>process_list;//算法任務(wù)存儲列表F.1.2.2添加任務(wù)函數(shù)函數(shù)原型:ntVideoProcessFramework::add_task(FrameProcessUnit*frame_process_unit);函數(shù)調(diào)用參數(shù)見表B.6表B.6添加任務(wù)函數(shù)調(diào)用參數(shù)FrameProcessUnit*F.1.3任務(wù)創(chuàng)建類F.1.3.1函數(shù)聲明classFrameProcessUnit{public:intpre_node(std::vector<UnitSynArg*>in_nodes);//前向節(jié)點配置函數(shù)intnext_node(std::vector<UnitSynArg*>out_nodes);//后向節(jié)點配置函數(shù)intwait(intindex,PassingPara**para_temp);//數(shù)據(jù)等待函數(shù)intpost(intindex,PassingPara*para_temp);//數(shù)據(jù)傳遞函數(shù)virtualintprocess(){};//數(shù)據(jù)處理函數(shù)virtualintclose(){};//資源釋放函數(shù)private:std::vector<UnitSynArg*>syn_in;//前向的同步節(jié)點std::vector<PassingPara*>para_in;//讀取前向的數(shù)據(jù)傳遞std::vector<UnitSynArg*>syn_out;//后向的同步節(jié)點std::vector<PassingPara*>para_out;//讀取后向的數(shù)據(jù)傳遞F.1.3.2前向節(jié)點配置函數(shù)函數(shù)原型:intFrameProcessUnit::pre_node(std::vector<UnitSynArg*>in_nodes);T/UWA020-2023函數(shù)調(diào)用參數(shù)見表B.7。F.1.3.3后向節(jié)點配置函數(shù)函數(shù)原型:intFrameProcessUnit::next_node(std::vector<UnitSynArg*>out_nodes);函數(shù)調(diào)用參數(shù)見表B.8。表B.8后向節(jié)點配置函數(shù)調(diào)用參數(shù)F.1.3.4數(shù)據(jù)等待函數(shù)函數(shù)原型:intFrameProcessUnit::wait(intindex,PassingPara**para_temp);函數(shù)調(diào)用參數(shù)見表B.9。表B.9數(shù)據(jù)等待函數(shù)調(diào)用參數(shù)F.1.3.5數(shù)據(jù)傳遞函數(shù)函數(shù)原型:intFrameProcessUnit::post(intindex,PassingPara*para_temp);函數(shù)調(diào)用參數(shù)見表B.10。表B.10數(shù)據(jù)傳遞函數(shù)調(diào)用參數(shù)T/UWA020-2023F.2算法任務(wù)接口函數(shù)F.2.1音視頻解碼類F.2.1.1函數(shù)聲明classVideoReader{public:intopen_input(constchar*filename);intread_frame(void*&data_out);intgetheight();voidget_fps(int&den,int&num);voidget_nb_frames(int&nbframes);AVFormatContext*get_ifmt_ctx();private://視頻的上下文信息AVFormatContext*ifmt_ctx=NULL;//解碼幀AVFrame*frame=NULL;//媒體流AVStream*stream=NULL;//視頻媒體流的編號intvideo_stream_index=-1;//添加視頻流的indexintaudio_stream_index=-1;//添加音頻流的index//編碼上下文AVCodecContext*codec_ctx=NULL;//幀格式轉(zhuǎn)換上下文SwsContext*swsctx=NULL;//幀轉(zhuǎn)換輸出解碼幀AVFrame*out_frame=NULL;//輸出的像素格式AVPixelFormatoutpixfmt;//視頻寬intwidth=0;//視頻高//輸出圖像的寬intoutput_width=0;//輸出圖像的高intoutput_height=0;//視頻像素格式對應(yīng)的每個像素字節(jié)數(shù)intpixbyte=0;T/UWA020-2023F.2.1.2打開輸入視頻函數(shù)函數(shù)原型:intVideoReader::open_input(constchar*filename);函數(shù)調(diào)用參數(shù)見表B.11。表B.11打開輸入視頻函數(shù)調(diào)用參數(shù)F.2.1.3獲取視頻幀數(shù)據(jù)函數(shù)函數(shù)原型:intVideoReader::read_frame(void*&data_out);獲取視頻幀數(shù)據(jù)函數(shù)調(diào)用參數(shù)見表B.12。表B.12獲取視頻幀數(shù)據(jù)函數(shù)調(diào)用參數(shù)F.2.2音視頻編碼類F.2.2.1函數(shù)聲明classVideoWriter{public:typedefstructmetadataParam{char*key;metadata_IDvalue;}metadataParam;//元數(shù)據(jù)結(jié)構(gòu)體//設(shè)置元數(shù)據(jù)信息函數(shù)intset_metadata_param(metadataParam*metadata_param);//創(chuàng)建視頻文件函數(shù)intopen_video(constchar*filename,intwidth,intheight,Filefmt_IDfile_id=0,Codec_IDcodec_id=0,Pixfmt_IDpixfmt_id=0,Hdr_IDhdr_id=0,aCodec_IDacodec_id=0,AVFormatContext*ifmt_ctx=NULL);intwrite_videoframe(uint8_t*frame);//視頻幀編碼函數(shù)T/UWA020-2023intwrite_audiopacke(AVPacket*avpkt);//音頻幀編碼函數(shù)intflush();//刷幀函數(shù)intset_fps(intden,intnum);//設(shè)置幀率函數(shù)intset_bitRate(intrate);//設(shè)置碼率函數(shù)intclose();//釋放資源函數(shù)private:std::vector<metadataParam*>metadata_param_list;//存儲元數(shù)據(jù)信息的列表//輸出文件上下文AVFormatContext*pFormatCtx=NULL;//輸入文件上下文AVFormatContext*ifmt_ctx=NULL;//輸出文件封裝格式AVOutputFormat*fmt=NULL;//輸出的視頻流AVStream*video_st=NULL;AVStream*video_st_in=NULL;AVStream*audio_st_in=NULL;AVStream*audio_st_out=NULL;intvideo_stream_index=-1;intaudio_stream_index=-1;//編碼上下文AVCodecContext*pCodecCtx=NULL;AVCodecContext*pAudioDeCodecCtx=NULL;AVCodecContext*pAudioEnCodecCtx=NULL;//編碼器AVCodec*pCodec=NULL;AVCodec*pAudioDeCodec=NULL;AVCodec*pAudioEnCodec=NULL;//編碼幀AVPacket*packet=NULL;//原始數(shù)據(jù)幀AVFrame*pFrame=NULL;//幀格式轉(zhuǎn)換上下文SwsContext*swsctx=NULL;//編碼器名字constchar*codec_name=NULL;//編碼IDAVCodecIDav_codec_id;AVCodecIDav_audio_codec_id;//像素格式AVPixelFormatconfig_pixfmt;//視頻的metadataAVDictionary*dict=0;//寫鎖T/UWA020-2023pthread_mutex_twrite_lock;//幀數(shù)統(tǒng)計//視頻的寬//視頻的高//幀率intfps_num=25;//碼率longintbit_rate=100000000;//hdr模式開關(guān)inthdr_on=0;//創(chuàng)建輸出視頻文件函數(shù)intopen_output_file(constchar*filename,intwidht,intheight);//音頻重采樣編碼相關(guān)ffmpeg函數(shù)SwrContext*audio_resampler_context=NULL;AVAudioFifo*audio_fifo=NULL;intinit_fifo(AVAudioFifo**fifo,AVCodecContext*output_codec_context);intconvert_samples(constuint8_t**input_data,uint8_t**converted_data,constintframe_size,SwrContext*resample_context);intinit_resampler(AVCodecContext*input_codec_context,AVCodecContext*output_codec_context,SwrContext**resample_context);init_converted_samples(uint8_t***converted_input_samples,AVCodecContext*output_codec_context,intframe_size);add_samples_to_fifo(AVAudioFifo*fifo,uint8_t**converted_input_samples,constintframe_size);F.2.2.2創(chuàng)建視頻文件函數(shù)函數(shù)原型:intVideoWriter::open_video(constchar*filename,intwidth,intheight,Filefmt_IDfile_id=0,Codec_IDcodec_id=0,Pixfmt_IDpixfmt_id=0,Hdr_IDhdr_id=0,aCodec_IDacodec_id=0,AVFormatContext*ifmt_ctx=NULL);T/UWA020-2023函數(shù)調(diào)用參數(shù)見表A.13。表B.13創(chuàng)建視頻文件函數(shù)調(diào)用參數(shù)輸出視頻文件的路徑和文width輸出視頻文件的封裝格視頻編碼器的類型,默認(rèn)視頻編碼幀的像素格式,視頻文件HDR標(biāo)準(zhǔn)類型,音頻編碼器的類型,默認(rèn)AVFormatContext*源視頻文件的封裝環(huán)境,可以選擇性的為輸出視頻F.2.2.3視頻幀編碼函數(shù)函數(shù)原型:intVideoWriter::write_videoframe(uint8_t*frame);函數(shù)調(diào)用參數(shù)見表B.14。表B.14視頻幀編碼函數(shù)調(diào)用參數(shù)uint8_t*F.2.2.4音頻幀編碼函數(shù)函數(shù)原型:T/UWA020-2023intVideoWriter::write_audiopacket(AVPacket*avpkt);函數(shù)調(diào)用參數(shù)見表B.15。表B.15音頻幀編碼函數(shù)調(diào)用參數(shù)AVPacket*F.2.2.5設(shè)置幀率函數(shù)函數(shù)原型:intVideoWriter::set_fps(intden,intnum);函數(shù)調(diào)用參數(shù)見表B.16。表B.16設(shè)置幀率函數(shù)調(diào)用參數(shù)F.2.2.6設(shè)置碼率函數(shù)函數(shù)原型:intVideoWriter::set_bitRate(longintbit_rate);函數(shù)調(diào)用參數(shù)見表B.17。表B.17設(shè)置碼率函數(shù)調(diào)用參數(shù)F.2.2.7設(shè)置元數(shù)據(jù)信息函數(shù)函數(shù)原型:intset_metadata_param(metadataParam*metadata_param);函數(shù)調(diào)用參數(shù)見表B.18。表B.18設(shè)置元數(shù)據(jù)信息函數(shù)調(diào)用參數(shù)F.2.3音視頻解碼任務(wù)F.2.3.1函數(shù)聲明classVideoReaderUnit:publicFrameProcessUnit{T/UWA020-2023public:intinit(constchar*input_path);AVFormatContext*get_ifmt_ctx();intprocess()override;intclose()override;intget_fps(int&den,int&num);intget_nb_frames(int&nbframes);VideoReadervideo_reader;F.2.3.2初始化函數(shù)函數(shù)原型:intVideoReaderUnit::init(constchar*input_path函數(shù)調(diào)用參數(shù)見表B.19。表B.19初始化函數(shù)調(diào)用參數(shù)名F.2.3.3獲取視頻幀率函數(shù)函數(shù)原型:intVideoReaderUnit::get_fps(int&den,int&num);函數(shù)調(diào)用參數(shù)見表B.20。表B.20獲取視頻幀率函數(shù)調(diào)用參數(shù)F.2.3.4獲取視頻總幀數(shù)函數(shù)函數(shù)原型:intVideoReaderUnit::get_nb_frames(int&nbframes);函數(shù)調(diào)用參數(shù)見表B.21。表B.21獲取視頻總幀數(shù)函數(shù)調(diào)用參數(shù)F.2.4視頻編碼任務(wù)F.2.4.1函數(shù)聲明classVideoWriterImgUnit:publicFrameProcessUnit{T/UWA020-2023public:intinit(VideoWriter*video_writer);//初始化函數(shù)intprocess()override;//數(shù)據(jù)處理函數(shù)intclose()override;//資源釋放函數(shù)private:VideoWriter*video_writer;//音視頻編碼類F.2.4.2初始化函數(shù)函數(shù)原型:intVideoWriterImgUnit::init(VideoWriter*video_writer函數(shù)調(diào)用參數(shù)見表B.22。表B.22初始化函數(shù)調(diào)用參數(shù)video_writerVideoWriter*F.2.5音頻編碼任務(wù)F.2.5.1函數(shù)聲明classVideoWriterPktUnit:publicFrameProcessUnit{public:intinit(VideoWriter*video_writer);//初始化函數(shù)intprocess()override;//數(shù)據(jù)處理函數(shù)intclose()override;//資源釋放函數(shù)private:VideoWriter*video_writer;//音視頻編碼類F.2.5.2初始化函數(shù)函數(shù)原型:intVideoWriterPktUnit::init(VideoWriter*video_writer);函數(shù)調(diào)用參數(shù)見表B.23。表B.23初始化函數(shù)調(diào)用參數(shù)VideoWriter*F.2.6GPU分發(fā)任務(wù)F.2.6.1函數(shù)聲明T/UWA020-2023classOneToManyUnit:publicFrameProcessUnit{public:intinit(vector<int>vecdeviceid);//初始化函數(shù)intprocess()override;//數(shù)據(jù)處理函數(shù)intclose()override;//資源釋放函數(shù)private:intnumGPU=0;//總GPU數(shù)intcnt=0;//計數(shù)F.2.6.2初始化函數(shù)函數(shù)原型:intOneToManyUnit::init(vector<int>vecDeviceID函數(shù)調(diào)用參數(shù)見表B.24。表B.24初始化函數(shù)調(diào)用參數(shù)F.2.7GPU集合任務(wù)F.2.7.1函數(shù)聲明classManyToOneUnit:publicFrameProcessUnit{public:intinit(vector<int>vecdeviceid);//初始化函數(shù)intprocess()override;//數(shù)據(jù)處理函數(shù)intclose()override;//資源釋放函數(shù)private:intnumGPU=0;//總GPU數(shù)intcnt=0;//計數(shù)F.2.7.2初始化函數(shù)函數(shù)原型:init(vector<int>vecdeviceid);函數(shù)調(diào)用參數(shù)見表B.25。表B.25初始化函數(shù)調(diào)用參數(shù)T/UWA020-2023F.2.8AI模型處理任務(wù)F.2.8.1函數(shù)聲明classmodelProcessUnit:publicFrameProcessUnit{public:intinit(eumMODEL_IDmodelID,intgpu_id);//初始化函數(shù)intprocess()override;//數(shù)據(jù)處理函數(shù)intclose()override;//資源釋放函數(shù)private:intgetModelConfig(eumMODEL_IDmodelID,modelConfigInfo&thisConfig);//獲取模型配置信息函數(shù)myconfigInfomodel_config[MODEL_NUM];//模型配置信息表trtfilter*model=NULL;//模型tensorrt推理引擎指針F.2.8.2初始化函數(shù)函數(shù)原型:intmodelProcessUnit::init(eumMODEL_IDmodelID,intgpu_id函數(shù)調(diào)用參數(shù)見表B.26。表B.26初始化函數(shù)調(diào)用參數(shù)F.3調(diào)用示例調(diào)用示例如下:intmain(intargc,char*argv[]){intgpu_num=0;//GPU數(shù)量cudaSts=cudaGetDeviceCount(&gpu_num)cudaGetDeviceCount(&gpu_num);char*pInputVideo="./test_video/2022-08-09-172550.mov";//輸入視頻路徑和文件名char*pOutVideo="./out_video/";//輸出視頻路徑longintnBitRate=88888888;//輸出視頻碼率//輸出視頻編碼信息格式Codec_IDcodec_id=H264;Pixfmt_IDpixfmt_id=YUV420;vector<eumMODEL_ID>vecTrtModelID;//AI算法模型容器vecTrtModelID.push_back(SR_1080);//添加超分模型vecTrtModelID.push_back(HDR_2160);//添加HDR模型intnw=1920;//輸入視頻解碼目標(biāo)寬度intnh=1080;//輸入視頻解碼目標(biāo)高度T/UWA020-2023intnc=3;//輸入視頻通道數(shù)intnscale=2;//超分模型拉伸倍率intishdr=1;//是否是hdr模式gpu_num=vecdeviceid.size();//gpu數(shù)量//初始化intnw_sr=nw*nscale;//輸出視頻寬intnh_sr=nh*nscale;//輸出視頻高VideoProcessFrameworkvideo_process_framework;//創(chuàng)建視頻流水線類VideoReader*video_reader=newVideoReader(pInputVideo,nw,nh,true);//創(chuàng)建音視頻解碼類VideoReaderUnitvideo_reader_unit;//創(chuàng)建視頻解碼任務(wù)sdkSts=video_reader_unit.init(video_reader);VideoWriter*video_writer=newVideoWriter();//創(chuàng)建音視頻編碼類intden=0,num=0;intnbframes;video_reader_unit.get_fps(den,num);video_reader_unit.get_nb_frames(nbframes);video_writer->set_fps(den,num);video_writer->set_bitRate(nBitRate);sdkSts=video_writer->open_video(pOutVideo,nw_sr,nh_sr,codec_id,pixfmt_id,video_reader_unit.get_ifmt_ctx());VideoWriterImgUnitvideo_writer_img_unit;//創(chuàng)建視頻編碼任務(wù)video_writer_img_unit.init(video_writer,iscopyfrc,frc,ishdr);std::vector<UnitSynArg*>node_videoWriteUnit_in;VideoWriterPktUnitvideo_writer_pkt_unit;//創(chuàng)建音頻編碼任務(wù)video_writer_pkt_unit.init(video_writer);//視頻文件解碼后輸出視頻和音頻數(shù)據(jù),所以有兩個同步節(jié)點//將兩個同步節(jié)點打包UnitSynArg*synArg_videoReadUint_img_out=newUnitSynArg();//視頻數(shù)據(jù)節(jié)點UnitSynArg*synArg_videoReadUint_pkt_out=newUnitSynArg();//音頻數(shù)據(jù)節(jié)點std::vector<UnitSynArg*>videoReadUint_node_out={synArg_videoReadUint_img_out,synArg_videoReadUint_pkt_out};video_reader_unit.next_node(videoReadUint_node_out);//配置視頻解碼任務(wù)后向節(jié)點FrameProcessUnit*video_reader_process_unit=&video_reader_unit;//video_process_framework.add_task(video_reader_process_unit);//將視頻解碼任務(wù)添加到視頻處理流水線中std::vector<UnitSynArg*>node_videoPktwWriter_in={synArg_videoReadUint_pkt_out};//配置寫音頻的入口video_writer_pkt_unit.pre_node(node_videoPktwWriter_in);//將音頻編碼任務(wù)加入到視頻處理流水線FrameProcessUnit*video_writer_pkt_process_unit=&video_writer_pkt_unit;video_process_framework.add_task(video_writer_pkt_process_unit);intmodel_nums=vecTrtModelID.size();//分發(fā)器T/UWA020-2023OneToManyUnitone_to_many;one_to_many.init(vecdeviceid);std::vector<UnitSynArg*>node_oneToManyUint_in={synArg_videoReadUint_img_out};//分發(fā)器的入口為video_reader類的視頻數(shù)據(jù)出口one_to_many.pre_node(node_oneToManyUint_in);std::vector<UnitSynArg*>node_oneToManyUint_out;////many_to_one集成器ManyToOneUnitmany_to_one;many_to_one.init(vecdeviceid);std::vector<UnitSynArg*>node_ManyToOneUint_in;//std::vector<UnitSynArg*>node_ManyToOneUint_out;////根據(jù)GPU數(shù)量對AI算法模型任務(wù)進(jìn)行初始化TensorrtProcessUnittensorrt_model[gpu_num];{tensorrt_model[i].init(vecTrtModelID,vecdeviceid,i,ishdr);}//循環(huán)每個模型處理模型{//每個模型一個入口一個出口節(jié)點UnitSynArg*synArg_trtModelUnit_in=newUnitSynArg();//UnitSynArg*synArg_trtModelUnit_out=newUnitSynArg();node_oneToManyUint_out.push_back(synArg_trtModelUnit_in);//分發(fā)器的出口為多個gpu,trt模型單元的入口node_ManyToOneUint_in.push_back(synArg_trtModelUnit_out);//集合器的入口為多個gpu,trt模型單元的出口//配置AI算法模型處理任務(wù)的入口節(jié)點std::vector<UnitSynArg*>node_trtModelUint_in={synArg_trtModelUnit_in};tensorrt_model[i].pre_node(node_trtModelUint_in);//配置AI算法模型處理任務(wù)的出口節(jié)點std::vector<UnitSynArg*>node_trtModelUint_out={synArg_trtModelUnit_out};tensorrt_model[i].next_node(node_trtModelUint_out);//將AI算法模型處理任務(wù)加入視頻處理流水線中FrameProcessUnit*tensorrt_model_process_unit=&(tensorrt_model[i]);video_process_framework.add_task(tensorrt_model_process_unit);}//將分發(fā)任務(wù)加入視頻處理流水線中one_to_many.next_node(node_oneToManyUint_out);FrameProcessUnit*one2many_unit=&one_to_many;video_process_framework.add_task(one2many_unit);//AI模型任務(wù)的出口即為many_to_one集成器的入口many_to_one.pre_node(node_ManyToOneUint_in);//配置模型出口節(jié)點T/UWA020-2023UnitSynArg*synArg_mangToOneUint_Out=newUnitSynArg;syn_list.push_back(synArg_mangToOneUint_Out);node_ManyToOneUint_out.push_back(synArg_mangToOneUint_Out);many_to_one.next_node(node_ManyToOneUint_out);//模型集合器加入視頻處理流水線中FrameProcessUnit*many2one_unit=&many_to_one;video_process_framework.add_task(many2one_unit);node_videoWriteUnit_in.push_back(synArg_mangToOneUint_Out);//配置視頻編碼任務(wù)的入口節(jié)點video_writer_img_unit.pre_node(node_videoWriteUnit_in);FrameProcessUnit*video_writer_img_process_unit=&video_writer_img_unit;//視頻編碼任務(wù)加入視頻處理流水線中video_process_framework.add_task(video_writer_img_process_unit);//啟動任務(wù),等到所有任務(wù)結(jié)束返回。video_process_framework.start_tasks();video_process_framework.close_tasks();}T/UWA020-2023附錄H(資料性)附錄I函數(shù)返回錯誤碼詳細(xì)說明算法服務(wù)和算法任務(wù)接口函數(shù)返回錯誤碼以枚舉形式列出,詳細(xì)說明如下。enummmsdkErrorSts{//AVfilemmsdkErrorAVOpenInputFileFailed=-1000,mmsdkErrorAVOpenOutputFileFailed,mmsdkErrorAVInputFileReadFinshed,mmsdkErrorAVerrorEOF,mmsdkErrorAVFileHeaderWriteFailed,mmsdkErrorAVFileTrailerWriteFailed,//readermmsdkErrorAVVideofillArrayFailed,//fmttxtmmsdkErrorAVfmtWrong,//decoderTxt.encoderTxtmmsdkErrorAVAudioCodecTxtParameterCopyFailed,mmsdkErrorAVAudioCodecTxtAllocateFailed,mmsdkErrorAVVideoCodecTxtParameterCopyFailed,mmsdkErrorAVVideoCodecTxtAllocateFailed,//decodermmsdkErrorAVAudioDecoderOpen

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論