CN116744000B - 一种基于动态算法重构的视频编解码方式检测方法 - Google Patents
一种基于动态算法重构的视频编解码方式检测方法 Download PDFInfo
- Publication number
- CN116744000B CN116744000B CN202311029253.7A CN202311029253A CN116744000B CN 116744000 B CN116744000 B CN 116744000B CN 202311029253 A CN202311029253 A CN 202311029253A CN 116744000 B CN116744000 B CN 116744000B
- Authority
- CN
- China
- Prior art keywords
- instruction
- decoding
- coding
- current
- video
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000001514 detection method Methods 0.000 title abstract description 9
- 230000006870 function Effects 0.000 claims description 19
- 238000013507 mapping Methods 0.000 claims description 12
- 238000000034 method Methods 0.000 claims description 8
- 230000009191 jumping Effects 0.000 claims description 6
- 238000012545 processing Methods 0.000 claims description 6
- 238000012986 modification Methods 0.000 claims description 5
- 230000004048 modification Effects 0.000 claims description 5
- 230000000694 effects Effects 0.000 description 2
- 235000008694 Humulus lupulus Nutrition 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/134—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
- H04N19/157—Assigned coding mode, i.e. the coding mode being predefined or preselected to be further used for selection of another element or parameter
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/42—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/85—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using pre-processing or post-processing specially adapted for video compression
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本发明涉及一种基于动态算法重构的视频编解码方式检测方法,通过修改视频编解码库的编解码函数,单线程执行编解码,并将编解码线程绑定到某个CPU核上运行,可以获取系统提供的编解码库API执行编解码一帧数据时的指令流,并动态重构编解码库API的算法,针对指定视频编码格式,能够自动化地判断在当前计算机系统上的实际编解码方式。
Description
技术领域
本发明属于计算机软件开发技术领域,具体涉及一种基于动态算法重构的视频编解码方式检测方法。
背景技术
在计算机系统上,视频编解码通常采用两种方式:一种是CPU编解码,一种是硬件编解码(如GPU等)。CPU编解码通用性强,支持的视频编码格式多,但是性能相对低(每秒编解码帧数相对少);硬件编解码,对于给定一款硬件芯片,其编解码支持的编码格式相对固定,即出厂时其支持的编码格式已经确定,一般主要支持的就是主流视频编码格式,但是硬件编解码的性能相对高。
视频编解码库API有可能是标准接口,如VAAPI、VDAPU等、也有可能是硬件厂商提供的非标准接口,通过这些接口的类型并不能判断视频是由CPU解码还是由硬件解码。
为了验证给定硬件芯片(如GPU)的视频编解码能力,就需要甄别针对不同的视频编码格式,哪些是由CPU编解码、哪些是由硬件编解码。
发明内容
有鉴于此,本发明提供了一种基于动态算法重构的视频编解码方式检测方法,针对指定视频编码格式,所述方法能够判断在当前计算机系统上执行实际编解码任务的到底是CPU还是其他硬件芯片(如GPU)。
本发明提供的一种基于动态算法重构的视频编解码方式检测方法,所述方法包括:
步骤S1:构造输入数据;其中,当检测视频的编码方式时,所述输入数据由N张位图构成;当检测视频的解码方式时,所述输入数据为指定编码格式的视频;
步骤S2:构造编解码程序,修改视频编解码库的编解码函数;具体修改如下:
1)单线程执行编解码;
2)将编解码线程绑定到某个CPU核上运行,所述CPU核记为codecCPUCore;
3)动态获取当前系统提供的编解码库API的指令流;
步骤S3:调用当前系统提供的编解码库API执行编解码,获取编解码一帧数据所执行的用户态指令流,动态重构所述用户态指令流中的帧数据访问算法,判断执行此次编解码的是否是CPU。
进一步地,所述步骤S2中所述动态获取当前系统提供的编解码库API的指令流具体包括:
步骤S21:在编解码库API的指令流中加入指令断点处理函数;
步骤S22:将当前系统提供的编解码库API的入口设置为动态反编译起始指令位置,记为decompilingStartAddr;
步骤S23:从所述decompilingStartAddr开始逐条指令执行动态反编译,并判断decompilingStartAddr是否存在,如decompilingStartAddr已存在,则增加此地址的跳转次数;否则,在当前指令为内存读指令时,记录当前指令,包括指令的操作码和操作数;如遇到基本块结束,则在此指令处加入指令断点;
步骤S24:接收指令断点事件,如产生指令断点的CPU核是所述codecCPUCore,则判断当前指令是否是分支指令或跳转指令:如是,则将decompilingStartAddr设置为分支指令或跳转指令的目标地址,并跳转到步骤S23;如果当前指令是函数调用指令,且为普通函数调用指令,则将decompilingStartAddr设置为函数入口地址,并跳转到步骤S23;如果当前指令是系统调用指令,则不执行操作。
进一步地,所述步骤S3还包括:
步骤S31:构建一个当前帧数据的访问映射表Key-Value,其中,访问映射表的Key是帧数据的地址,每个字节对应一项,Value是该字节被读取的次数,所有Value的初始值为0;
步骤S32:对于记录的每个decompilingStartAddr,对于每个记录的内存读指令,获取每个内存读指令的地址和长度,根据内存读指令的地址和长度判断内存读指令的地址是否在帧数据的地址范围内,如在,则对于读取的每个字节,把访问映射表中对应的项的Value加1*M,M为decompilingStartAddr的数目;
步骤S33:判断所述访问映射表中的同一帧内的帧数据的读取次数,如果同一帧内的帧数据有超过预设阈值的部分被读取了两次以上,则判定当前执行编解码的为CPU。
进一步地,所述预设阈值为50%。
进一步地,所述步骤S33中所述帧数据不包括帧的元数据。
有益效果
本发明通过修改视频编解码库的编解码函数,单线程执行编解码,并将编解码线程绑定到某个CPU核上运行,可以获取系统提供的编解码库API执行编解码一帧数据时的指令流,并动态重构编解码库API的算法,针对指定视频编码格式,能够自动化地判断在当前计算机系统上执行实际编解码任务的是CPU还是其他硬件芯片(如GPU)。
具体实施方式
以下实施例用于说明本发明,但不用来限制本发明的范围。
下面对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。
实施例
本实施例采用本发明提供的一种基于动态算法重构的视频编解码方式检测方法,具体包括以下步骤:
步骤S1:构造输入数据;
在该步骤中,根据不同的检测目的,比如,是检测视频的编码方式还是检测视的频解码方式,构造不同的输入数据。
如是验证视频的编码方式,则构造由N张位图构成的输入数据,N张位图在验证的过程中组成视频;如是验证视频的解码方式,则构造指定编码格式,如H264/H265,的视频。
步骤S2:构造编解码程序,修改视频编解码库,如FFmpeg,的编解码函数,如avcodec_decode_video,avcodec_decode_video2,avcodec_encode_video或avcodec_encode_video2等。
在该步骤中,对编解码函数的具体修改包括:
1)单线程执行编解码;
2)将编解码线程绑定到某个CPU核上运行,所述CPU核记为codecCPUCore;
3)动态获取当前系统提供的编解码库API的指令流。
由于静态反编译无法获取实际执行时的指令流和代码块的实际循环次数,因此需要修改编解码函数,使其能够动态获取当前系统提供的编解码库API的指令流。
其中,动态获取当前系统提供的编解码库API的指令流具体包括:
步骤S21:在编解码库API的指令流中加入指令断点处理函数;
在该步骤中,加入这个指令断点处理函数是为了捕获后面添加的指令断点,进而实现对基本块执行的跟踪;
步骤S22:将当前系统提供的编解码库API的入口设置为动态反编译起始指令位置,记为decompilingStartAddr;
步骤S23:从所述decompilingStartAddr开始逐条指令执行动态反编译,并判断decompilingStartAddr是否存在,如decompilingStartAddr已存在,则增加此地址的跳转次数;该跳转次数其实就是decompilingStartAddr的数目;
否则,进一步判断当前指令是否是内存读指令,如是,则记录当前指令,包括指令的操作码和操作数;其中,操作数包括读取的内存地址和长度等;
如遇到基本块结束,则在此指令处加入指令断点;只在基本块结束处加入指令断点是为了减少开销,单步执行也可以实现类似效果,但是性能开销太大,每条指令执行都会导致中断。
步骤S24:接收指令断点事件,如产生指令断点的CPU核是所述codecCPUCore,则判断当前指令是否是分支指令或跳转指令:如是,则将decompilingStartAddr设置为分支指令或跳转指令的目标地址,并跳转到步骤S23;如果当前指令是函数调用指令,则进一步判断是否是普通函数调用指令,如是,将decompilingStartAddr设置为函数入口地址,并跳转到步骤S23;如果当前指令是系统调用指令,则不执行操作。
步骤S3:调用当前系统提供的编解码库API执行编解码,获取编解码一帧数据所执行的用户态指令流,动态重构所述用户态指令流中的帧数据访问算法,判断执行此次编解码的是否是CPU;
该步骤S3具体包括:
步骤S31:构建一个当前帧数据的访问映射表Key-Value,其中,访问映射表的Key是帧数据的地址,每个字节对应一项,Value是该字节被读取的次数,所有Value的初始值为0;
步骤S32:对于记录的每个decompilingStartAddr,该decompilingStartAddr实际就是一个基本块的起始地址,对于每个记录的内存读指令,获取每个内存读指令的地址和长度,根据内存读指令的地址和长度判断内存读指令的地址是否在帧数据的地址范围内,如在,则对于读取的每个字节,把访问映射表中对应的项的Value加1*M,M为decompilingStartAddr的数目;
步骤S33:判断所述访问映射表中的同一帧内的帧数据的读取次数,如果同一帧内的帧数据有超过预设阈值的部分被读取了两次以上,则判定当前执行编解码的为CPU。
此处判定的依据为如果是GPU执行的视频编解码,此处的帧数据只会被CPU读取一次,然后把相应数据读取到显存,通过显存来处理,而如果是CPU执行的视频编解码,此处的帧数据则会被CPU读取两次或者更多次。
需要注意的是,这里的帧数据不包括帧的元数据,因为无论是GPU执行的视频编解码还是CPU执行的视频编解码,帧的元数据都会被CPU读取多次。
另外,由于视频的帧有多种类型,比如,帧内编码图像帧I帧,前向预测编码图像帧P帧和双向预测编码图像帧B帧,不同类型的视频帧的帧数据存在差异,为了兼顾不同类型的视频帧,同时又能提高检测效率,可以将上述预设阈值设定为50%,当然,根据实际的情况,该值可以根据需要进行调整。
借由上述技术方案,本申请针对指定视频编码格式,能够自动化地判断在当前计算机系统上执行实际编解码任务的到底是CPU还是其他硬件芯片(如GPU)。
虽然,上文中已经用一般性说明、具体实施方式及试验,对本发明作了详尽的描述,但在本发明基础上,可以对之作一些修改或改进,这对本领域技术人员而言是显而易见的。因此,在不偏离本发明精神的基础上所做的这些修改或改进,均属于本发明要求保护的范围。
Claims (4)
1.一种基于动态算法重构的视频编解码方式检测方法,其特征在于,所述方法包括:
步骤S1:构造输入数据;其中,当检测视频的编码方式时,所述输入数据由多张位图构成;当检测视频的解码方式时,所述输入数据为指定编码格式的视频;
步骤S2:构造编解码程序,修改视频编解码库的编解码函数;具体修改如下:
1)单线程执行编解码;
2)将编解码线程绑定到某个CPU核上运行,所述CPU核记为codecCPUCore;
3)动态获取当前系统提供的编解码库API的指令流;
步骤S3:调用当前系统提供的编解码库API执行编解码,获取编解码一帧数据所执行的用户态指令流,动态重构所述用户态指令流中的帧数据访问算法,判断执行此次编解码的是否是CPU;
所述步骤S3还包括:
步骤S31:构建一个当前帧数据的访问映射表Key-Value,其中,访问映射表的Key是帧数据的地址,每个字节对应一项,Value是该字节被读取的次数,所有Value的初始值为0;
步骤S32:对于记录的每个decompilingStartAddr,对于每个记录的内存读指令,获取每个内存读指令的地址和长度,根据内存读指令的地址和长度判断内存读指令的地址是否在帧数据的地址范围内,如在,则对于读取的每个字节,把访问映射表中对应的项的Value加1*M,M为decompilingStartAddr的数目;
步骤S33:判断所述访问映射表中的同一帧内的帧数据的读取次数,如果同一帧内的帧数据有超过预设阈值的部分被读取了两次以上,则判定当前执行编解码的为CPU。
2.根据权利要求1所述的视频编解码方式检测方法,其特征在于,所述步骤S2中所述动态获取当前系统提供的编解码库API的指令流具体包括:
步骤S21:在编解码库API的指令流中加入指令断点处理函数;
步骤S22:将当前系统提供的编解码库API的入口设置为动态反编译起始指令位置,记为decompilingStartAddr;
步骤S23:从所述decompilingStartAddr开始逐条指令执行动态反编译,并判断decompilingStartAddr是否存在,如decompilingStartAddr已存在,则增加此地址的跳转次数;否则,在当前指令为内存读指令时,记录当前指令,包括指令的操作码和操作数;如遇到基本块结束,则在此指令处加入指令断点;
步骤S24:接收指令断点事件,如产生指令断点的CPU核是所述codecCPUCore,则判断当前指令是否是分支指令或跳转指令:如是,则将decompilingStartAddr设置为分支指令或跳转指令的目标地址,并跳转到步骤S23;如果当前指令是函数调用指令,且为普通函数调用指令,则将decompilingStartAddr设置为函数入口地址,并跳转到步骤S23;如果当前指令是系统调用指令,则不执行操作。
3.根据权利要求1所述的视频编解码方式检测方法,其特征在于,所述预设阈值为50%。
4.根据权利要求1所述的视频编解码方式检测方法,其特征在于,所述步骤S33中所述帧数据不包括帧的元数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311029253.7A CN116744000B (zh) | 2023-08-16 | 2023-08-16 | 一种基于动态算法重构的视频编解码方式检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311029253.7A CN116744000B (zh) | 2023-08-16 | 2023-08-16 | 一种基于动态算法重构的视频编解码方式检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116744000A CN116744000A (zh) | 2023-09-12 |
CN116744000B true CN116744000B (zh) | 2023-10-13 |
Family
ID=87903025
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311029253.7A Active CN116744000B (zh) | 2023-08-16 | 2023-08-16 | 一种基于动态算法重构的视频编解码方式检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116744000B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117440166B (zh) * | 2023-09-19 | 2024-04-26 | 北京麟卓信息科技有限公司 | 基于内存访问特征分析的视频编码和解码方式检测方法 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20090078893A (ko) * | 2008-01-16 | 2009-07-21 | 건국대학교 산학협력단 | 하드웨어/소프트웨어 통합 설계 기반의 비디오 코덱을 위한프리미티브 인스트럭션 디자인 방법 |
CN106878736A (zh) * | 2017-03-17 | 2017-06-20 | 郑州云海信息技术有限公司 | 一种视频编解码的方法与装置 |
CN107277505A (zh) * | 2017-05-19 | 2017-10-20 | 北京大学 | 基于软硬件分区的avs‑2视频解码器结构 |
CN110381322A (zh) * | 2019-07-15 | 2019-10-25 | 腾讯科技(深圳)有限公司 | 视频流解码方法、装置、终端设备及存储介质 |
CN111669577A (zh) * | 2020-06-30 | 2020-09-15 | 广州市百果园信息技术有限公司 | 一种硬件解码检测方法、装置、电子设备及存储介质 |
CN111757103A (zh) * | 2019-03-27 | 2020-10-09 | 北京传送科技有限公司 | 基于显卡计算单元的vr视频编解码方法、系统和存储介质 |
CN115866350A (zh) * | 2022-11-28 | 2023-03-28 | 重庆紫光华山智安科技有限公司 | 视频倒放方法、装置、电子设备及存储介质 |
CN116506618A (zh) * | 2023-06-26 | 2023-07-28 | 北京麟卓信息科技有限公司 | 一种基于负载动态自适应的视频解码优化方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8731067B2 (en) * | 2011-08-31 | 2014-05-20 | Microsoft Corporation | Memory management for video decoding |
-
2023
- 2023-08-16 CN CN202311029253.7A patent/CN116744000B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20090078893A (ko) * | 2008-01-16 | 2009-07-21 | 건국대학교 산학협력단 | 하드웨어/소프트웨어 통합 설계 기반의 비디오 코덱을 위한프리미티브 인스트럭션 디자인 방법 |
CN106878736A (zh) * | 2017-03-17 | 2017-06-20 | 郑州云海信息技术有限公司 | 一种视频编解码的方法与装置 |
CN107277505A (zh) * | 2017-05-19 | 2017-10-20 | 北京大学 | 基于软硬件分区的avs‑2视频解码器结构 |
CN111757103A (zh) * | 2019-03-27 | 2020-10-09 | 北京传送科技有限公司 | 基于显卡计算单元的vr视频编解码方法、系统和存储介质 |
CN110381322A (zh) * | 2019-07-15 | 2019-10-25 | 腾讯科技(深圳)有限公司 | 视频流解码方法、装置、终端设备及存储介质 |
CN111669577A (zh) * | 2020-06-30 | 2020-09-15 | 广州市百果园信息技术有限公司 | 一种硬件解码检测方法、装置、电子设备及存储介质 |
CN115866350A (zh) * | 2022-11-28 | 2023-03-28 | 重庆紫光华山智安科技有限公司 | 视频倒放方法、装置、电子设备及存储介质 |
CN116506618A (zh) * | 2023-06-26 | 2023-07-28 | 北京麟卓信息科技有限公司 | 一种基于负载动态自适应的视频解码优化方法 |
Also Published As
Publication number | Publication date |
---|---|
CN116744000A (zh) | 2023-09-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN116744000B (zh) | 一种基于动态算法重构的视频编解码方式检测方法 | |
US10136163B2 (en) | Method and apparatus for repairing video file | |
TW201128385A (en) | Automated unpacking of portable executable files | |
JP4875204B2 (ja) | 符号化オーディオデータを処理するための装置及び方法 | |
RU2011142772A (ru) | Система и способ выбора формата кодирования видео на основе данных обратной связи | |
CN112867992A (zh) | 检测地址错误的系统、方法及设备 | |
CN111669577A (zh) | 一种硬件解码检测方法、装置、电子设备及存储介质 | |
US9386326B2 (en) | Video decoding error concealment techniques | |
US9015560B1 (en) | Method and apparatus for ceasing access to a portion of a flash memory when less than a number of errors correctable by an error correction code exists | |
CN111475868B (zh) | 适用于功能和信息安全芯片的cpu指令保护方法及系统 | |
CN112328306B (zh) | 一种分支预测器的隔离方法、预测方法及分支预测器 | |
KR101566255B1 (ko) | 특정 미디어 재생 시나리오를 위한 전력 최적화 | |
US20080294878A1 (en) | Processor system and exception processing method | |
CN109726115B (zh) | 一种基于Intel处理器跟踪的反调试自动绕过方法 | |
JPH10164522A (ja) | テレテキストページ内のデータ処理方法及びデコーダ | |
JP2003250154A (ja) | 画像処理装置及びその制御方法 | |
EP2805498A1 (en) | Multi-threaded texture decoding | |
CN117440166B (zh) | 基于内存访问特征分析的视频编码和解码方式检测方法 | |
CN113709447B (zh) | 一种终端设备播放性能的检测方法和装置 | |
CN113076090B (zh) | 一种面向边信道安全防护的循环语句执行方法及装置 | |
CN112004112A (zh) | 硬件视频编码器的验证方法、装置、电子设备及存储介质 | |
US20020129301A1 (en) | System and method for monitoring unaligned memory accesses | |
KR100631518B1 (ko) | 동영상 파일 재생오류 처리방법 | |
US20220197644A1 (en) | Reverse engineering detection method on a processor using an instruction register and corresponding integrated circuit | |
CN111552959B (zh) | 一种程序特征序列生成方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |