[C++] Nvidia Video Codec SDK를 이용한 NV12(YUV420SP) H264 인코더/디코더
*민*
다운로드
장바구니
소개글
Nvidia Video Codec SDK를 이용하여 인코더 및 디코더를 구현한 프로그램 소스코드입니다.NV12(YUV420SP) Color Format으로 저장되어 있는 영상 스트림을 Nvidia Video Codec SDK를 사용하여 H264 Codec으로 인코딩하는 인코더와
H264 Codec으로 인코딩되어 있는 영상 스트림을 Nvidia Video Codec SDK를 사용하여 NV12(YUV420SP) Color Format으로 디코딩하는 디코더로 구성되어 있습니다.
인코딩/디코딩에 필요한 영상 샘플이 준비되어 있으니, 코드를 바로 빌드하시어 눈으로 확인이 가능합니다.
Nvidia Video Codec SDK가 지원하는 Color Format(YUV420, RGB 등) 및 Codec(H264, HEVC)이 다양하기 때문에 일부 소스코드 및 파라미터를 수정하면 원하는 포맷으로 인코딩/디코딩이 가능합니다.
Nvidia Video Codec SDK에 기록되어 있는 인코더/디코더 샘플이 범용적이기 때문에 필요 이상으로 코드 규모가 많습니다.
어느정도 코덱 구현에 대한 지식이 있다면, Nvidia Video Codec SDK를 직접 보고 코딩을 하는 것이 나을 것으로 생각되며, 초보적인 수준이라면 본 프로젝트가 큰 도움이 될 것입니다.
개발환경이 동일하다면 빌드에 큰 문제는 없을 것이나, 환경 문제로 인한 빌드에러 발생시, 대응을 위하여 Library(lib파일 Link) 참조 역량을 필요로 합니다.
컴파일 실행환경
Visual Sudio 2019, CUDA 11.0, Nvidia Video Codec SDK 11.1.5압축파일 내 파일목록
Readme.txt
Transcoder.sln
Transcoder/
Transcoder/Codec/
Transcoder/Codec/Decoder.cpp
Transcoder/Codec/Decoder.h
Transcoder/Codec/Encoder.cpp
Transcoder/Codec/Encoder.h
Transcoder/include/
Transcoder/include/libavcodec/
Transcoder/include/libavcodec/avcodec.h
Transcoder/include/libavcodec/bsf.h
Transcoder/include/libavcodec/codec.h
Transcoder/include/libavcodec/codec_desc.h
Transcoder/include/libavcodec/codec_id.h
Transcoder/include/libavcodec/codec_par.h
Transcoder/include/libavcodec/packet.h
Transcoder/include/libavcodec/version.h
Transcoder/include/libavformat/
Transcoder/include/libavformat/avformat.h
Transcoder/include/libavformat/avio.h
Transcoder/include/libavformat/version.h
Transcoder/include/libavutil/
Transcoder/include/libavutil/attributes.h
Transcoder/include/libavutil/avconfig.h
Transcoder/include/libavutil/avutil.h
Transcoder/include/libavutil/buffer.h
Transcoder/include/libavutil/channel_layout.h
Transcoder/include/libavutil/common.h
Transcoder/include/libavutil/cpu.h
Transcoder/include/libavutil/dict.h
Transcoder/include/libavutil/error.h
Transcoder/include/libavutil/frame.h
Transcoder/include/libavutil/hwcontext.h
Transcoder/include/libavutil/intfloat.h
Transcoder/include/libavutil/log.h
Transcoder/include/libavutil/macros.h
Transcoder/include/libavutil/mathematics.h
Transcoder/include/libavutil/mem.h
Transcoder/include/libavutil/opt.h
Transcoder/include/libavutil/pixfmt.h
Transcoder/include/libavutil/rational.h
Transcoder/include/libavutil/samplefmt.h
Transcoder/include/libavutil/version.h
Transcoder/include/libswresample/
Transcoder/include/libswresample/swresample.h
Transcoder/include/libswresample/version.h
Transcoder/lib/
Transcoder/lib/avcodec-58.dll
Transcoder/lib/avcodec.lib
Transcoder/lib/avformat-58.dll
Transcoder/lib/avformat.lib
Transcoder/lib/avutil-56.dll
Transcoder/lib/avutil.lib
Transcoder/lib/nvcuvid.lib
Transcoder/lib/nvencodeapi.lib
Transcoder/lib/swresample-3.dll
Transcoder/lib/swresample.lib
Transcoder/main.cpp
Transcoder/NvDec/
Transcoder/NvDec/cuviddec.h
Transcoder/NvDec/FFmpegDemuxer.h
Transcoder/NvDec/NvCodecUtils.h
Transcoder/NvDec/nvcuvid.h
Transcoder/NvDec/NvDecoder.cpp
Transcoder/NvDec/NvDecoder.h
Transcoder/NvEnc/
Transcoder/NvEnc/NvEncodeAPI.h
Transcoder/NvEnc/NvEncoder.cpp
Transcoder/NvEnc/NvEncoder.h
Transcoder/NvEnc/NvEncoderCuda.cpp
Transcoder/NvEnc/NvEncoderCuda.h
Transcoder/Sample/
Transcoder/Sample/sample_nv12_1920x1080_60fps_1s.yuv
Transcoder/Transcoder.vcxproj
Transcoder/Transcoder.vcxproj.filters
Transcoder/Transcoder.vcxproj.user
Transcoder/x64/
Transcoder/x64/Debug/
Transcoder/x64/Debug/Decoder.obj
Transcoder/x64/Debug/Encoder.obj
Transcoder/x64/Debug/main.obj
Transcoder/x64/Debug/NvDecoder.obj
Transcoder/x64/Debug/NvEncoder.obj
Transcoder/x64/Debug/NvEncoderCuda.obj
Transcoder/x64/Debug/Transcoder.exe.recipe
Transcoder/x64/Debug/Transcoder.ilk
Transcoder/x64/Debug/Transcoder.log
Transcoder/x64/Debug/Transcoder.tlog/
Transcoder/x64/Debug/Transcoder.tlog/CL.command.1.tlog
Transcoder/x64/Debug/Transcoder.tlog/CL.read.1.tlog
Transcoder/x64/Debug/Transcoder.tlog/CL.write.1.tlog
Transcoder/x64/Debug/Transcoder.tlog/link.command.1.tlog
Transcoder/x64/Debug/Transcoder.tlog/link.read.1.tlog
Transcoder/x64/Debug/Transcoder.tlog/link.write.1.tlog
Transcoder/x64/Debug/Transcoder.tlog/Transcoder.lastbuildstate
Transcoder/x64/Debug/Transcoder.tlog/Transcoder.write.1u.tlog
Transcoder/x64/Debug/vc142.idb
Transcoder/x64/Debug/vc142.pdb
Transcoder/x64/Release/
Transcoder/x64/Release/Decoder.obj
Transcoder/x64/Release/Encoder.obj
Transcoder/x64/Release/main.obj
Transcoder/x64/Release/NvDecoder.obj
Transcoder/x64/Release/NvEncoder.obj
Transcoder/x64/Release/NvEncoderCuda.obj
Transcoder/x64/Release/Transcoder.log
Transcoder/x64/Release/Transcoder.tlog/
Transcoder/x64/Release/Transcoder.tlog/CL.command.1.tlog
Transcoder/x64/Release/Transcoder.tlog/CL.read.1.tlog
Transcoder/x64/Release/Transcoder.tlog/CL.write.1.tlog
Transcoder/x64/Release/Transcoder.tlog/link.command.1.tlog
Transcoder/x64/Release/Transcoder.tlog/link.read.1.tlog
Transcoder/x64/Release/Transcoder.tlog/link.write.1.tlog
Transcoder/x64/Release/Transcoder.tlog/Transcoder.lastbuildstate
Transcoder/x64/Release/Transcoder.tlog/Transcoder.write.1u.tlog
Transcoder/x64/Release/vc142.pdb
x64/
x64/Debug/
x64/Debug/avcodec-58.dll
x64/Debug/avformat-58.dll
x64/Debug/avutil-56.dll
x64/Debug/Transcoder.exe
x64/Debug/Transcoder.exp
x64/Debug/Transcoder.ilk
x64/Debug/Transcoder.lib
x64/Debug/Transcoder.pdb
x64/Release/
x64/Release/avcodec-58.dll
x64/Release/avformat-58.dll
x64/Release/avutil-56.dll
x64/Release/Transcoder.exe
x64/Release/Transcoder.exp
x64/Release/Transcoder.iobj
x64/Release/Transcoder.ipdb
x64/Release/Transcoder.lib
x64/Release/Transcoder.pdb
Transcoder.sln
Transcoder/
Transcoder/Codec/
Transcoder/Codec/Decoder.cpp
Transcoder/Codec/Decoder.h
Transcoder/Codec/Encoder.cpp
Transcoder/Codec/Encoder.h
Transcoder/include/
Transcoder/include/libavcodec/
Transcoder/include/libavcodec/avcodec.h
Transcoder/include/libavcodec/bsf.h
Transcoder/include/libavcodec/codec.h
Transcoder/include/libavcodec/codec_desc.h
Transcoder/include/libavcodec/codec_id.h
Transcoder/include/libavcodec/codec_par.h
Transcoder/include/libavcodec/packet.h
Transcoder/include/libavcodec/version.h
Transcoder/include/libavformat/
Transcoder/include/libavformat/avformat.h
Transcoder/include/libavformat/avio.h
Transcoder/include/libavformat/version.h
Transcoder/include/libavutil/
Transcoder/include/libavutil/attributes.h
Transcoder/include/libavutil/avconfig.h
Transcoder/include/libavutil/avutil.h
Transcoder/include/libavutil/buffer.h
Transcoder/include/libavutil/channel_layout.h
Transcoder/include/libavutil/common.h
Transcoder/include/libavutil/cpu.h
Transcoder/include/libavutil/dict.h
Transcoder/include/libavutil/error.h
Transcoder/include/libavutil/frame.h
Transcoder/include/libavutil/hwcontext.h
Transcoder/include/libavutil/intfloat.h
Transcoder/include/libavutil/log.h
Transcoder/include/libavutil/macros.h
Transcoder/include/libavutil/mathematics.h
Transcoder/include/libavutil/mem.h
Transcoder/include/libavutil/opt.h
Transcoder/include/libavutil/pixfmt.h
Transcoder/include/libavutil/rational.h
Transcoder/include/libavutil/samplefmt.h
Transcoder/include/libavutil/version.h
Transcoder/include/libswresample/
Transcoder/include/libswresample/swresample.h
Transcoder/include/libswresample/version.h
Transcoder/lib/
Transcoder/lib/avcodec-58.dll
Transcoder/lib/avcodec.lib
Transcoder/lib/avformat-58.dll
Transcoder/lib/avformat.lib
Transcoder/lib/avutil-56.dll
Transcoder/lib/avutil.lib
Transcoder/lib/nvcuvid.lib
Transcoder/lib/nvencodeapi.lib
Transcoder/lib/swresample-3.dll
Transcoder/lib/swresample.lib
Transcoder/main.cpp
Transcoder/NvDec/
Transcoder/NvDec/cuviddec.h
Transcoder/NvDec/FFmpegDemuxer.h
Transcoder/NvDec/NvCodecUtils.h
Transcoder/NvDec/nvcuvid.h
Transcoder/NvDec/NvDecoder.cpp
Transcoder/NvDec/NvDecoder.h
Transcoder/NvEnc/
Transcoder/NvEnc/NvEncodeAPI.h
Transcoder/NvEnc/NvEncoder.cpp
Transcoder/NvEnc/NvEncoder.h
Transcoder/NvEnc/NvEncoderCuda.cpp
Transcoder/NvEnc/NvEncoderCuda.h
Transcoder/Sample/
Transcoder/Sample/sample_nv12_1920x1080_60fps_1s.yuv
Transcoder/Transcoder.vcxproj
Transcoder/Transcoder.vcxproj.filters
Transcoder/Transcoder.vcxproj.user
Transcoder/x64/
Transcoder/x64/Debug/
Transcoder/x64/Debug/Decoder.obj
Transcoder/x64/Debug/Encoder.obj
Transcoder/x64/Debug/main.obj
Transcoder/x64/Debug/NvDecoder.obj
Transcoder/x64/Debug/NvEncoder.obj
Transcoder/x64/Debug/NvEncoderCuda.obj
Transcoder/x64/Debug/Transcoder.exe.recipe
Transcoder/x64/Debug/Transcoder.ilk
Transcoder/x64/Debug/Transcoder.log
Transcoder/x64/Debug/Transcoder.tlog/
Transcoder/x64/Debug/Transcoder.tlog/CL.command.1.tlog
Transcoder/x64/Debug/Transcoder.tlog/CL.read.1.tlog
Transcoder/x64/Debug/Transcoder.tlog/CL.write.1.tlog
Transcoder/x64/Debug/Transcoder.tlog/link.command.1.tlog
Transcoder/x64/Debug/Transcoder.tlog/link.read.1.tlog
Transcoder/x64/Debug/Transcoder.tlog/link.write.1.tlog
Transcoder/x64/Debug/Transcoder.tlog/Transcoder.lastbuildstate
Transcoder/x64/Debug/Transcoder.tlog/Transcoder.write.1u.tlog
Transcoder/x64/Debug/vc142.idb
Transcoder/x64/Debug/vc142.pdb
Transcoder/x64/Release/
Transcoder/x64/Release/Decoder.obj
Transcoder/x64/Release/Encoder.obj
Transcoder/x64/Release/main.obj
Transcoder/x64/Release/NvDecoder.obj
Transcoder/x64/Release/NvEncoder.obj
Transcoder/x64/Release/NvEncoderCuda.obj
Transcoder/x64/Release/Transcoder.log
Transcoder/x64/Release/Transcoder.tlog/
Transcoder/x64/Release/Transcoder.tlog/CL.command.1.tlog
Transcoder/x64/Release/Transcoder.tlog/CL.read.1.tlog
Transcoder/x64/Release/Transcoder.tlog/CL.write.1.tlog
Transcoder/x64/Release/Transcoder.tlog/link.command.1.tlog
Transcoder/x64/Release/Transcoder.tlog/link.read.1.tlog
Transcoder/x64/Release/Transcoder.tlog/link.write.1.tlog
Transcoder/x64/Release/Transcoder.tlog/Transcoder.lastbuildstate
Transcoder/x64/Release/Transcoder.tlog/Transcoder.write.1u.tlog
Transcoder/x64/Release/vc142.pdb
x64/
x64/Debug/
x64/Debug/avcodec-58.dll
x64/Debug/avformat-58.dll
x64/Debug/avutil-56.dll
x64/Debug/Transcoder.exe
x64/Debug/Transcoder.exp
x64/Debug/Transcoder.ilk
x64/Debug/Transcoder.lib
x64/Debug/Transcoder.pdb
x64/Release/
x64/Release/avcodec-58.dll
x64/Release/avformat-58.dll
x64/Release/avutil-56.dll
x64/Release/Transcoder.exe
x64/Release/Transcoder.exp
x64/Release/Transcoder.iobj
x64/Release/Transcoder.ipdb
x64/Release/Transcoder.lib
x64/Release/Transcoder.pdb