/jmcodec

H.264, H.265, VP9 ... Video codec hardware(Intel & Nvidia) acceleration

Primary LanguageCGNU General Public License v3.0GPL-3.0

video_codec project

1. 介绍

video_codec 是Justin开源的多媒体编解码硬件加速项目(Github)。 支持Intel集显和Nvidia显卡硬件加速。包含以下模块。欢迎加入群讨论(QQ群:519072404)。仅供个人学习使用,商业使用请联系作者(Justin's Email: mojing1999@hotmail.com)

1). 封装Intel Media SDK,实现使用Intel集显处理多媒体编解码硬件加速。

- Intel_dec
- Intel_enc
- Intel_transcoding

2). 封装Nvidia CUDA SDK,实现使用Nvidia显卡处理多媒体编解码硬件加速。

- nv_dec
- nv_enc
- nv_transcoding

3). 相应的测试例子。

- test_intel_dec
- test_intel_enc
- test_intel_transcoding
- test_nv_dec
- test_nv_enc
- test_nv_transcoding

2. 基于 Intel 集显的硬件编解码加速

intel_dec

- 导出 API

参见 jm_intel_dec.h 头文件。

- 使用

参见项目 test_intel_dec 。 工程里包含头文件 jm_intel_dec.h 和导入库 intel_dec.lib

#include "jm_intel_dec.h"

#pragma comment(lib,"intel_dec.lib")


- 调用流程

handle_yuv_frame_callback()

...

jm_intel_dec_create_handle()
jm_intel_dec_init()
jm_intel_dec_set_yuv_callback() [OPTIONAL]

loop jm_intel_dec_is_exit()
	if(jm_intel_dec_need_more_data()) {
		len = jm_intel_dec_free_buf_len()
		jm_intel_dec_input_data()

		...
		
		//if no more input data
		jm_intel_dec_set_eof()
	}
	
	jm_intel_dec_output_frame() [OPTIONAL]
	//handle_yuv_frame_callback()

end loop

jm_intel_dec_stream_info()

jm_intel_dec_deinit()

流程图

intel_dec


3. 基于 Nvidia 显卡硬件编解码加速

nv_dec

- 导出 API

参见 jm_nv_dec.h 头文件。

- 使用

参见项目 test_nv_dec 。 工程里包含头文件 jm_nv_dec.h 和导入库 nv_dec.lib

#include "jm_nv_dec.h"

#pragma comment(lib,"nv_dec.lib")


- 调用流程


jm_nvdec_create_handle()
jm_nvdec_init()

loop jm_nvdec_is_exit()
	read_frame_nalu()
	jm_nvdec_decode_frame()
	jm_nvdec_output_frame()

end loop

jm_nvdec_show_dec_info()

jm_nvdec_deinit()

流程图

nv_dec


4. 测试程序

  • 开发测试平台

    • OS : Win10
    • CPU : i7-6700
    • 集显: Intel HD Graphics 530
    • 显卡: Nvidia GeForce GTX 970
    • Memory: 16 GB
  • test_intel_dec

intel dec

  • test_nv_dec

nv dec

更多优化测试,目前没有实现更深层的优化。


TODO List

  • Intel decode
  • Test intel decode
  • Nvidia decode
  • Test nvdia decode
  • intel encode
  • intel transcode
  • nvidia encode
  • nvidia transcode
  • FFmpeg integration