<div dir="ltr"><div>
As part of a larger project I want to be able to capture and encode the 
desktop frame by frame in real time. I have the following test code to 
reproduce the issue shown in the screenshot that can be viewed on the stack overflow question here <a href="https://stackoverflow.com/questions/73570932/capture-and-encode-desktop-with-libav-in-real-time-not-giving-corect-images">https://stackoverflow.com/questions/73570932/capture-and-encode-desktop-with-libav-in-real-time-not-giving-corect-images</a>: <br></div><div><br></div><div>
<pre class="gmail-lang-cpp gmail-s-code-block"><code class="gmail-hljs gmail-language-cpp"><span class="gmail-hljs-meta">#<span class="gmail-hljs-keyword">include</span> <span class="gmail-hljs-string"><stdlib.h></span></span>
<span class="gmail-hljs-meta">#<span class="gmail-hljs-keyword">include</span> <span class="gmail-hljs-string"><stdio.h></span></span>
<span class="gmail-hljs-meta">#<span class="gmail-hljs-keyword">include</span> <span class="gmail-hljs-string"><iostream></span></span>
<span class="gmail-hljs-meta">#<span class="gmail-hljs-keyword">include</span> <span class="gmail-hljs-string"><fstream></span></span>
<span class="gmail-hljs-meta">#<span class="gmail-hljs-keyword">include</span> <span class="gmail-hljs-string"><string></span></span>
<span class="gmail-hljs-meta">#<span class="gmail-hljs-keyword">include</span> <span class="gmail-hljs-string"><string.h></span></span>
<span class="gmail-hljs-meta">#<span class="gmail-hljs-keyword">include</span> <span class="gmail-hljs-string"><math.h></span></span>

<span class="gmail-hljs-keyword">extern</span> <span class="gmail-hljs-string">"C"</span>
{
<span class="gmail-hljs-meta">#<span class="gmail-hljs-keyword">include</span> <span class="gmail-hljs-string">"libavdevice/avdevice.h"</span></span>
<span class="gmail-hljs-meta">#<span class="gmail-hljs-keyword">include</span> <span class="gmail-hljs-string">"libavutil/channel_layout.h"</span></span>
<span class="gmail-hljs-meta">#<span class="gmail-hljs-keyword">include</span> <span class="gmail-hljs-string">"libavutil/mathematics.h"</span></span>
<span class="gmail-hljs-meta">#<span class="gmail-hljs-keyword">include</span> <span class="gmail-hljs-string">"libavutil/opt.h"</span></span>
<span class="gmail-hljs-meta">#<span class="gmail-hljs-keyword">include</span> <span class="gmail-hljs-string">"libavformat/avformat.h"</span></span>
<span class="gmail-hljs-meta">#<span class="gmail-hljs-keyword">include</span> <span class="gmail-hljs-string">"libswscale/swscale.h"</span></span>
}


<span class="gmail-hljs-comment">/* 5 seconds stream duration */</span>
<span class="gmail-hljs-meta">#<span class="gmail-hljs-keyword">define</span> STREAM_DURATION   5.0</span>
<span class="gmail-hljs-meta">#<span class="gmail-hljs-keyword">define</span> STREAM_FRAME_RATE 25 <span class="gmail-hljs-comment">/* 25 images/s */</span></span>
<span class="gmail-hljs-meta">#<span class="gmail-hljs-keyword">define</span> STREAM_NB_FRAMES  ((int)(STREAM_DURATION * STREAM_FRAME_RATE))</span>
<span class="gmail-hljs-meta">#<span class="gmail-hljs-keyword">define</span> STREAM_PIX_FMT    AV_PIX_FMT_YUV420P <span class="gmail-hljs-comment">/* default pix_fmt */</span></span>

<span class="gmail-hljs-type">int</span> videoStreamIndx;
<span class="gmail-hljs-type">int</span> framerate = <span class="gmail-hljs-number">30</span>;

<span class="gmail-hljs-type">int</span> width = <span class="gmail-hljs-number">1920</span>;
<span class="gmail-hljs-type">int</span> height = <span class="gmail-hljs-number">1080</span>;

<span class="gmail-hljs-type">int</span> encPacketCounter;

AVFormatContext* ifmtCtx;
AVCodecContext* avcodecContx;
AVFormatContext* ofmtCtx;
AVStream* videoStream;
AVCodecContext* avCntxOut;
AVPacket* avPkt;
AVFrame* avFrame;
AVFrame* outFrame;
SwsContext* swsCtx;

std::ofstream fs;


<span class="gmail-hljs-function">AVDictionary* <span class="gmail-hljs-title">ConfigureScreenCapture</span><span class="gmail-hljs-params">()</span>
</span>{

    AVDictionary* options = <span class="gmail-hljs-literal">NULL</span>;
    <span class="gmail-hljs-comment">//Try adding "-rtbufsize 100M" as in <a href="https://stackoverflow.com/questions/6766333/capture-windows-screen-with-ffmpeg">https://stackoverflow.com/questions/6766333/capture-windows-screen-with-ffmpeg</a></span>
    <span class="gmail-hljs-built_in">av_dict_set</span>(&options, <span class="gmail-hljs-string">"rtbufsize"</span>, <span class="gmail-hljs-string">"100M"</span>, <span class="gmail-hljs-number">0</span>);
    <span class="gmail-hljs-built_in">av_dict_set</span>(&options, <span class="gmail-hljs-string">"framerate"</span>, std::<span class="gmail-hljs-built_in">to_string</span>(framerate).<span class="gmail-hljs-built_in">c_str</span>(), <span class="gmail-hljs-number">0</span>);
    <span class="gmail-hljs-type">char</span> buffer[<span class="gmail-hljs-number">16</span>];
    <span class="gmail-hljs-built_in">sprintf</span>(buffer, <span class="gmail-hljs-string">"%dx%d"</span>, width, height);
    <span class="gmail-hljs-built_in">av_dict_set</span>(&options, <span class="gmail-hljs-string">"video_size"</span>, buffer, <span class="gmail-hljs-number">0</span>);
    <span class="gmail-hljs-keyword">return</span> options;
}

<span class="gmail-hljs-function">AVCodecParameters* <span class="gmail-hljs-title">ConfigureAvCodec</span><span class="gmail-hljs-params">()</span>
</span>{
    AVCodecParameters* av_codec_par_out = <span class="gmail-hljs-built_in">avcodec_parameters_alloc</span>();
    av_codec_par_out->width = width;
    av_codec_par_out->height = height;
    av_codec_par_out->bit_rate = <span class="gmail-hljs-number">40000</span>;
    av_codec_par_out->codec_id = AV_CODEC_ID_H264; <span class="gmail-hljs-comment">//AV_CODEC_ID_MPEG4; //Try H.264 instead of MPEG4</span>
    av_codec_par_out->codec_type = AVMEDIA_TYPE_VIDEO;
    av_codec_par_out->format = <span class="gmail-hljs-number">0</span>;
    <span class="gmail-hljs-keyword">return</span> av_codec_par_out;
}

<span class="gmail-hljs-function"><span class="gmail-hljs-type">int</span> <span class="gmail-hljs-title">GetVideoStreamIndex</span><span class="gmail-hljs-params">()</span>
</span>{
    <span class="gmail-hljs-type">int</span> VideoStreamIndx = <span class="gmail-hljs-number">-1</span>;
    <span class="gmail-hljs-built_in">avformat_find_stream_info</span>(ifmtCtx, <span class="gmail-hljs-literal">NULL</span>);
    <span class="gmail-hljs-comment">/* find the first video stream index . Also there is an API available to do the below operations */</span>
    <span class="gmail-hljs-keyword">for</span> (<span class="gmail-hljs-type">int</span> i = <span class="gmail-hljs-number">0</span>; i < (<span class="gmail-hljs-type">int</span>)ifmtCtx->nb_streams; i++) <span class="gmail-hljs-comment">// find video stream position/index.</span>
    {
        <span class="gmail-hljs-keyword">if</span> (ifmtCtx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)
        {
            VideoStreamIndx = i;
            <span class="gmail-hljs-keyword">break</span>;
        }
    }

    <span class="gmail-hljs-keyword">if</span> (VideoStreamIndx == <span class="gmail-hljs-number">-1</span>)
    {
    }

    <span class="gmail-hljs-keyword">return</span> VideoStreamIndx;
}

<span class="gmail-hljs-function"><span class="gmail-hljs-type">void</span> <span class="gmail-hljs-title">CreateFrames</span><span class="gmail-hljs-params">(AVCodecParameters* av_codec_par_in, AVCodecParameters* av_codec_par_out)</span>
</span>{

    avFrame = <span class="gmail-hljs-built_in">av_frame_alloc</span>();
    avFrame->width = avcodecContx->width;
    avFrame->height = avcodecContx->height;
    avFrame->format = av_codec_par_in->format;
    <span class="gmail-hljs-built_in">av_frame_get_buffer</span>(avFrame, <span class="gmail-hljs-number">0</span>);

    outFrame = <span class="gmail-hljs-built_in">av_frame_alloc</span>();
    outFrame->width = avCntxOut->width;
    outFrame->height = avCntxOut->height;
    outFrame->format = av_codec_par_out->format;
    <span class="gmail-hljs-built_in">av_frame_get_buffer</span>(outFrame, <span class="gmail-hljs-number">0</span>);
}

<span class="gmail-hljs-function"><span class="gmail-hljs-type">bool</span> <span class="gmail-hljs-title">Init</span><span class="gmail-hljs-params">()</span>
</span>{
    AVCodecParameters* avCodecParOut = <span class="gmail-hljs-built_in">ConfigureAvCodec</span>();

    AVDictionary* options = <span class="gmail-hljs-built_in">ConfigureScreenCapture</span>();

    AVInputFormat* ifmt = <span class="gmail-hljs-built_in">av_find_input_format</span>(<span class="gmail-hljs-string">"gdigrab"</span>);
    <span class="gmail-hljs-keyword">auto</span> ifmtCtxLocal = <span class="gmail-hljs-built_in">avformat_alloc_context</span>();
    <span class="gmail-hljs-keyword">if</span> (<span class="gmail-hljs-built_in">avformat_open_input</span>(&ifmtCtxLocal, <span class="gmail-hljs-string">"desktop"</span>, ifmt, &options) < <span class="gmail-hljs-number">0</span>)
    {
        <span class="gmail-hljs-keyword">return</span> <span class="gmail-hljs-literal">false</span>;
    }
    ifmtCtx = ifmtCtxLocal;

    videoStreamIndx = <span class="gmail-hljs-built_in">GetVideoStreamIndex</span>();

    AVCodecParameters* avCodecParIn = <span class="gmail-hljs-built_in">avcodec_parameters_alloc</span>();
    avCodecParIn = ifmtCtx->streams[videoStreamIndx]->codecpar;

    AVCodec* avCodec = <span class="gmail-hljs-built_in">avcodec_find_decoder</span>(avCodecParIn->codec_id);
    <span class="gmail-hljs-keyword">if</span> (avCodec == <span class="gmail-hljs-literal">NULL</span>)
    {
        <span class="gmail-hljs-keyword">return</span> <span class="gmail-hljs-literal">false</span>;
    }

    avcodecContx = <span class="gmail-hljs-built_in">avcodec_alloc_context3</span>(avCodec);
    <span class="gmail-hljs-keyword">if</span> (<span class="gmail-hljs-built_in">avcodec_parameters_to_context</span>(avcodecContx, avCodecParIn) < <span class="gmail-hljs-number">0</span>)
    {
        <span class="gmail-hljs-keyword">return</span> <span class="gmail-hljs-literal">false</span>;
    }

    <span class="gmail-hljs-comment">//av_dict_set</span>
    <span class="gmail-hljs-type">int</span> value = <span class="gmail-hljs-built_in">avcodec_open2</span>(avcodecContx, avCodec, <span class="gmail-hljs-literal">NULL</span>); <span class="gmail-hljs-comment">//Initialize the AVCodecContext to use the given AVCodec.</span>
    <span class="gmail-hljs-keyword">if</span> (value < <span class="gmail-hljs-number">0</span>)
    {
        <span class="gmail-hljs-keyword">return</span> <span class="gmail-hljs-literal">false</span>;
    }

    AVOutputFormat* ofmt = <span class="gmail-hljs-built_in">av_guess_format</span>(<span class="gmail-hljs-string">"h264"</span>, <span class="gmail-hljs-literal">NULL</span>, <span class="gmail-hljs-literal">NULL</span>);

    <span class="gmail-hljs-keyword">if</span> (ofmt == <span class="gmail-hljs-literal">NULL</span>)
    {
        <span class="gmail-hljs-keyword">return</span> <span class="gmail-hljs-literal">false</span>;
    }

    <span class="gmail-hljs-keyword">auto</span> ofmtCtxLocal = <span class="gmail-hljs-built_in">avformat_alloc_context</span>();
    <span class="gmail-hljs-built_in">avformat_alloc_output_context2</span>(&ofmtCtxLocal, ofmt, <span class="gmail-hljs-literal">NULL</span>, <span class="gmail-hljs-literal">NULL</span>);
    <span class="gmail-hljs-keyword">if</span> (ofmtCtxLocal == <span class="gmail-hljs-literal">NULL</span>)
    {
        <span class="gmail-hljs-keyword">return</span> <span class="gmail-hljs-literal">false</span>;
    }
    ofmtCtx = ofmtCtxLocal;

    AVCodec* avCodecOut = <span class="gmail-hljs-built_in">avcodec_find_encoder</span>(avCodecParOut->codec_id);
    <span class="gmail-hljs-keyword">if</span> (avCodecOut == <span class="gmail-hljs-literal">NULL</span>)
    {
        <span class="gmail-hljs-keyword">return</span> <span class="gmail-hljs-literal">false</span>;
    }

    videoStream = <span class="gmail-hljs-built_in">avformat_new_stream</span>(ofmtCtx, avCodecOut);
    <span class="gmail-hljs-keyword">if</span> (videoStream == <span class="gmail-hljs-literal">NULL</span>)
    {
        <span class="gmail-hljs-keyword">return</span> <span class="gmail-hljs-literal">false</span>;
    }

    avCntxOut = <span class="gmail-hljs-built_in">avcodec_alloc_context3</span>(avCodecOut);
    <span class="gmail-hljs-keyword">if</span> (avCntxOut == <span class="gmail-hljs-literal">NULL</span>)
    {
        <span class="gmail-hljs-keyword">return</span> <span class="gmail-hljs-literal">false</span>;
    }

    <span class="gmail-hljs-keyword">if</span> (<span class="gmail-hljs-built_in">avcodec_parameters_copy</span>(videoStream->codecpar, avCodecParOut) < <span class="gmail-hljs-number">0</span>)
    {
        <span class="gmail-hljs-keyword">return</span> <span class="gmail-hljs-literal">false</span>;
    }

    <span class="gmail-hljs-keyword">if</span> (<span class="gmail-hljs-built_in">avcodec_parameters_to_context</span>(avCntxOut, avCodecParOut) < <span class="gmail-hljs-number">0</span>)
    {
        <span class="gmail-hljs-keyword">return</span> <span class="gmail-hljs-literal">false</span>;
    }

    avCntxOut->gop_size = <span class="gmail-hljs-number">30</span>; <span class="gmail-hljs-comment">//3; //Use I-Frame frame every 30 frames.</span>
    avCntxOut->max_b_frames = <span class="gmail-hljs-number">0</span>;
    avCntxOut->time_base.num = <span class="gmail-hljs-number">1</span>;
    avCntxOut->time_base.den = framerate;

    <span class="gmail-hljs-comment">//avio_open(&ofmtCtx->pb, "", AVIO_FLAG_READ_WRITE);</span>

    <span class="gmail-hljs-keyword">if</span> (<span class="gmail-hljs-built_in">avformat_write_header</span>(ofmtCtx, <span class="gmail-hljs-literal">NULL</span>) < <span class="gmail-hljs-number">0</span>)
    {
        <span class="gmail-hljs-keyword">return</span> <span class="gmail-hljs-literal">false</span>;
    }

    value = <span class="gmail-hljs-built_in">avcodec_open2</span>(avCntxOut, avCodecOut, <span class="gmail-hljs-literal">NULL</span>); <span class="gmail-hljs-comment">//Initialize the AVCodecContext to use the given AVCodec.</span>
    <span class="gmail-hljs-keyword">if</span> (value < <span class="gmail-hljs-number">0</span>)
    {
        <span class="gmail-hljs-keyword">return</span> <span class="gmail-hljs-literal">false</span>;
    }

    <span class="gmail-hljs-keyword">if</span> (avcodecContx->codec_id == AV_CODEC_ID_H264)
    {
        <span class="gmail-hljs-built_in">av_opt_set</span>(avCntxOut->priv_data, <span class="gmail-hljs-string">"preset"</span>, <span class="gmail-hljs-string">"ultrafast"</span>, <span class="gmail-hljs-number">0</span>);
        <span class="gmail-hljs-built_in">av_opt_set</span>(avCntxOut->priv_data, <span class="gmail-hljs-string">"zerolatency"</span>, <span class="gmail-hljs-string">"1"</span>, <span class="gmail-hljs-number">0</span>);
        <span class="gmail-hljs-built_in">av_opt_set</span>(avCntxOut->priv_data, <span class="gmail-hljs-string">"tune"</span>, <span class="gmail-hljs-string">"ull"</span>, <span class="gmail-hljs-number">0</span>);
    }

    <span class="gmail-hljs-keyword">if</span> ((ofmtCtx->oformat->flags & AVFMT_GLOBALHEADER) != <span class="gmail-hljs-number">0</span>)
    {
        avCntxOut->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
    }

    <span class="gmail-hljs-built_in">CreateFrames</span>(avCodecParIn, avCodecParOut);

    swsCtx = <span class="gmail-hljs-built_in">sws_alloc_context</span>();
    <span class="gmail-hljs-keyword">if</span> (<span class="gmail-hljs-built_in">sws_init_context</span>(swsCtx, <span class="gmail-hljs-literal">NULL</span>, <span class="gmail-hljs-literal">NULL</span>) < <span class="gmail-hljs-number">0</span>)
    {
        <span class="gmail-hljs-keyword">return</span> <span class="gmail-hljs-literal">false</span>;
    }

    swsCtx = <span class="gmail-hljs-built_in">sws_getContext</span>(avcodecContx->width, avcodecContx->height, avcodecContx->pix_fmt,
        avCntxOut->width, avCntxOut->height, avCntxOut->pix_fmt, SWS_FAST_BILINEAR,
        <span class="gmail-hljs-literal">NULL</span>, <span class="gmail-hljs-literal">NULL</span>, <span class="gmail-hljs-literal">NULL</span>);
    <span class="gmail-hljs-keyword">if</span> (swsCtx == <span class="gmail-hljs-literal">NULL</span>)
    {
        <span class="gmail-hljs-keyword">return</span> <span class="gmail-hljs-literal">false</span>;
    }

    <span class="gmail-hljs-keyword">return</span> <span class="gmail-hljs-literal">true</span>;
}

<span class="gmail-hljs-function"><span class="gmail-hljs-type">void</span> <span class="gmail-hljs-title">Encode</span><span class="gmail-hljs-params">(AVCodecContext* enc_ctx, AVFrame* frame, AVPacket* pkt)</span>
</span>{
    <span class="gmail-hljs-type">int</span> ret;

    <span class="gmail-hljs-comment">/* send the frame to the encoder */</span>
    ret = <span class="gmail-hljs-built_in">avcodec_send_frame</span>(enc_ctx, frame);
    <span class="gmail-hljs-keyword">if</span> (ret < <span class="gmail-hljs-number">0</span>)
    {
        <span class="gmail-hljs-keyword">return</span>;
    }

    <span class="gmail-hljs-keyword">while</span> (ret >= <span class="gmail-hljs-number">0</span>)
    {
        ret = <span class="gmail-hljs-built_in">avcodec_receive_packet</span>(enc_ctx, pkt);
        <span class="gmail-hljs-keyword">if</span> (ret == <span class="gmail-hljs-built_in">AVERROR</span>(EAGAIN) || ret == AVERROR_EOF)
            <span class="gmail-hljs-keyword">return</span>;
        <span class="gmail-hljs-keyword">if</span> (ret < <span class="gmail-hljs-number">0</span>)
        {
            <span class="gmail-hljs-keyword">return</span>;
        }

        fs.<span class="gmail-hljs-built_in">write</span>((<span class="gmail-hljs-type">char</span>*)pkt->data, pkt->size);
        <span class="gmail-hljs-built_in">av_packet_unref</span>(pkt);
    }
}

<span class="gmail-hljs-function"><span class="gmail-hljs-type">void</span> <span class="gmail-hljs-title">EncodeFrames</span><span class="gmail-hljs-params">(<span class="gmail-hljs-type">int</span> noFrames)</span>
</span>{
    <span class="gmail-hljs-type">int</span> frameCount = <span class="gmail-hljs-number">0</span>;
    avPkt = <span class="gmail-hljs-built_in">av_packet_alloc</span>();
    AVPacket* outPacket = <span class="gmail-hljs-built_in">av_packet_alloc</span>();
    encPacketCounter = <span class="gmail-hljs-number">0</span>;

    <span class="gmail-hljs-keyword">while</span> (<span class="gmail-hljs-built_in">av_read_frame</span>(ifmtCtx, avPkt) >= <span class="gmail-hljs-number">0</span>)
    {
        <span class="gmail-hljs-keyword">if</span> (frameCount++ == noFrames)
            <span class="gmail-hljs-keyword">break</span>;
        <span class="gmail-hljs-keyword">if</span> (avPkt->stream_index != videoStreamIndx) <span class="gmail-hljs-keyword">continue</span>;

        <span class="gmail-hljs-built_in">avcodec_send_packet</span>(avcodecContx, avPkt);

        <span class="gmail-hljs-keyword">if</span> (<span class="gmail-hljs-built_in">avcodec_receive_frame</span>(avcodecContx, avFrame) >= <span class="gmail-hljs-number">0</span>) <span class="gmail-hljs-comment">// Frame successfully decoded :)</span>
        {
            outPacket->data = <span class="gmail-hljs-literal">NULL</span>; <span class="gmail-hljs-comment">// packet data will be allocated by the encoder</span>
            outPacket->size = <span class="gmail-hljs-number">0</span>;

            outPacket->pts = <span class="gmail-hljs-built_in">av_rescale_q</span>(encPacketCounter, avCntxOut->time_base, videoStream->time_base);
            <span class="gmail-hljs-keyword">if</span> (outPacket->dts != AV_NOPTS_VALUE)
                outPacket->dts = <span class="gmail-hljs-built_in">av_rescale_q</span>(encPacketCounter, avCntxOut->time_base, videoStream->time_base);

            outPacket->dts = <span class="gmail-hljs-built_in">av_rescale_q</span>(encPacketCounter, avCntxOut->time_base, videoStream->time_base);
            outPacket->duration = <span class="gmail-hljs-built_in">av_rescale_q</span>(<span class="gmail-hljs-number">1</span>, avCntxOut->time_base, videoStream->time_base);

            outFrame->pts = <span class="gmail-hljs-built_in">av_rescale_q</span>(encPacketCounter, avCntxOut->time_base, videoStream->time_base);
            outFrame->pkt_duration = <span class="gmail-hljs-built_in">av_rescale_q</span>(encPacketCounter, avCntxOut->time_base, videoStream->time_base);
            encPacketCounter++;

            <span class="gmail-hljs-type">int</span> sts = <span class="gmail-hljs-built_in">sws_scale</span>(swsCtx,
                avFrame->data, avFrame->linesize, <span class="gmail-hljs-number">0</span>, avFrame->height,
                outFrame->data, outFrame->linesize);

            <span class="gmail-hljs-comment">/* make sure the frame data is writable */</span>
            <span class="gmail-hljs-keyword">auto</span> ret = <span class="gmail-hljs-built_in">av_frame_make_writable</span>(outFrame);
            <span class="gmail-hljs-keyword">if</span> (ret < <span class="gmail-hljs-number">0</span>)
                <span class="gmail-hljs-keyword">break</span>;
            <span class="gmail-hljs-built_in">Encode</span>(avCntxOut, outFrame, outPacket);
        }
        <span class="gmail-hljs-built_in">av_frame_unref</span>(avFrame);
        <span class="gmail-hljs-built_in">av_packet_unref</span>(avPkt);
    }
}

<span class="gmail-hljs-function"><span class="gmail-hljs-type">void</span> <span class="gmail-hljs-title">Dispose</span><span class="gmail-hljs-params">()</span>
</span>{
    fs.<span class="gmail-hljs-built_in">close</span>();

    <span class="gmail-hljs-keyword">auto</span> ifmtCtxLocal = ifmtCtx;
    <span class="gmail-hljs-built_in">avformat_close_input</span>(&ifmtCtx);
    <span class="gmail-hljs-built_in">avformat_free_context</span>(ifmtCtx);
    <span class="gmail-hljs-built_in">avcodec_free_context</span>(&avcodecContx);

}

<span class="gmail-hljs-function"><span class="gmail-hljs-type">int</span> <span class="gmail-hljs-title">main</span><span class="gmail-hljs-params">(<span class="gmail-hljs-type">int</span> argc, <span class="gmail-hljs-type">char</span>** argv)</span>
</span>{
    <span class="gmail-hljs-built_in">avdevice_register_all</span>();

    fs.<span class="gmail-hljs-built_in">open</span>(<span class="gmail-hljs-string">"out.h264"</span>);

    <span class="gmail-hljs-keyword">if</span> (<span class="gmail-hljs-built_in">Init</span>())
    {
        <span class="gmail-hljs-built_in">EncodeFrames</span>(<span class="gmail-hljs-number">300</span>);
    }
    <span class="gmail-hljs-keyword">else</span>
    {
        std::cout << <span class="gmail-hljs-string">"Failed to Init \n"</span>;
    }    

    <span class="gmail-hljs-built_in">Dispose</span>();

    <span class="gmail-hljs-keyword">return</span> <span class="gmail-hljs-number">0</span>;
}</code></pre>

</div><div>Thanks for any help in advance,</div><div>Tom<br></div></div>