

For a full list of GPUs and formats supported, please see the available GPU Support Matrix.

If (ret height + frame->height/2, frame->width, CV_8UC1,pkt->data) Ĭv::imwrite("c:\\tmp\\rawencodedimage.If you have an NVIDIA GPU which supports hardware-accelerated video encoding and decoding, it’s simply a matter of compiling FFmpeg binary with the required support for NVIDIA libraries and using the resulting binaries to speed up video encoding/decoding.įFmpeg supports following functionality accelerated by video hardware on NVIDIA GPUs: Ret = avcodec_send_frame( m_codecContextOut, frame) Void ECodec::encode( AVFrame *frame, AVPacket *pkt ) Ret = av_new_packet( m_packet, m_codecContextOut->width * m_codecContextOut->height * 3 ) Īvcodec_free_context(&m_codecContextOut) Ret = av_image_alloc(frame->data, frame->linesize, frame->width, frame->height, AV_PIX_FMT_YUV420P, 1) Ĭv::Mat yuv420p(frame->height + frame->height/2, frame->width, CV_8UC1,frame->data) Ĭv::cvtColor(yuv420p,cvmIm,CV_YUV420p2BGR) Ĭv::imwrite("c:\\tmp\\rawimage.png", cvmIm) Ret = avcodec_open2(m_codecContextOut, m_encoder, NULL) Ret = av_opt_set(m_codecContextOut->priv_data, "preset", "slow", 0) M_codecContextOut->codec_type = AVMEDIA_TYPE_VIDEO

M_codecContextOut->pix_fmt = AV_PIX_FMT_YUV420P M_codecContextOut->codec_tag = AV_CODEC_ID_H264 M_codecContextOut->time_base = (AVRational) M_codecContextOut->bit_rate = 400000 //m_codecContextOut->width * m_codecContextOut->height * 3 M_codecContextOut = avcodec_alloc_context3( m_encoder ) Void ECodec::MatToFrame( cv::Mat& image ) M_file = fopen( "c:\\tmp\\outputVideo.mp4", "wb") M_encoder( avcodec_find_encoder( AV_CODEC_ID_H264 )) m_encoder( avcodec_find_encoder_by_name( videoCodec.c_str())) Void encode( AVFrame *frame, AVPacket *pkt ) ĪVCodecContext* m_codecContextOut = NULL The avcodec_send_frame returns 0 so up to that point everything works.Įdit : I get an mp4 file of 1 MB but I can’t open it with vlc A clean C++ wrapper around the ffmpeg libraries which can be used in any C++ project or C project (with DllImport or CLR). The first image before it gets encoded is correct but the second one after encoding is not. I have added two block statements in the code to store images on the disk (before and after encoding). A cv::Mat holds the png data (BGR) and that is converted to YUV420P which is then encoded and written to a.
