<div dir="ltr"><div>Hello,</div><div>I am having problem implementing logic for transcoding with nvdec and nvenc codecs with buffersrc and buffersink.</div><div>Without buffersrc and buffersink it works, but when i put those 2 in frames get stuck in buffersrc or sink I cannot figure it out. This is how i create buffersrc and buffersink. <br></div><div><div style="background-color:rgb(33,33,33);color:rgb(238,255,255)"><pre style="font-family:"Menlo",monospace;font-size:9pt"><span style="color:rgb(195,232,141)">AVFilterContext </span><span style="color:rgb(137,221,255)">*</span>buffersink_ctx<span style="color:rgb(137,221,255)">;<br></span><span style="color:rgb(195,232,141)">AVFilterContext </span><span style="color:rgb(137,221,255)">*</span>buffersrc_ctx<span style="color:rgb(137,221,255)">;<br></span><span style="color:rgb(195,232,141)">AVFilterGraph </span><span style="color:rgb(137,221,255)">*</span>filter_graph<span style="color:rgb(137,221,255)">;<br><br></span></pre><div style="background-color:rgb(33,33,33);color:rgb(238,255,255)"><pre style="font-family:"Menlo",monospace;font-size:9pt"><span style="color:rgb(195,232,141)">AVRational </span>input_framerate <span style="color:rgb(137,221,255)">= </span><span style="color:rgb(130,170,255)">av_guess_frame_rate</span><span style="color:rgb(137,221,255)">(</span>decoder<span style="color:rgb(137,221,255)">-></span>avfc<span style="color:rgb(137,221,255)">, </span>decoder<span style="color:rgb(137,221,255)">-></span>video_avs<span style="color:rgb(137,221,255)">, </span><span style="color:rgb(255,203,107);font-weight:bold">NULL</span><span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(199,146,234);font-style:italic">const </span><span style="color:rgb(195,232,141)">AVFilter </span><span style="color:rgb(137,221,255)">*</span>vbuffersrc <span style="color:rgb(137,221,255)">= </span><span style="color:rgb(130,170,255)">avfilter_get_by_name</span><span style="color:rgb(137,221,255)">(</span><span style="color:rgb(195,232,141)">"buffer"</span><span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(199,146,234);font-style:italic">const </span><span style="color:rgb(195,232,141)">AVFilter </span><span style="color:rgb(137,221,255)">*</span>vbuffersink <span style="color:rgb(137,221,255)">= </span><span style="color:rgb(130,170,255)">avfilter_get_by_name</span><span style="color:rgb(137,221,255)">(</span><span style="color:rgb(195,232,141)">"buffersink"</span><span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(195,232,141)">AVRational </span>time_base <span style="color:rgb(137,221,255)">= </span>decoder<span style="color:rgb(137,221,255)">-></span>avfc<span style="color:rgb(137,221,255)">-></span>streams<span style="color:rgb(137,221,255)">[</span>decoder<span style="color:rgb(137,221,255)">-></span>video_index<span style="color:rgb(137,221,255)">]-></span>time_base<span style="color:rgb(137,221,255)">;<br></span><span style="color:rgb(137,221,255)"><br></span><span style="color:rgb(195,232,141)">AVBufferSrcParameters </span><span style="color:rgb(137,221,255)">*</span>input_par<span style="color:rgb(137,221,255)">;<br></span>input_par <span style="color:rgb(137,221,255)">= </span><span style="color:rgb(130,170,255)">av_buffersrc_parameters_alloc</span><span style="color:rgb(137,221,255)">();<br></span><span style="color:rgb(199,146,234);font-style:italic">if </span><span style="color:rgb(137,221,255)">(!</span>input_par<span style="color:rgb(137,221,255)">)<br></span><span style="color:rgb(137,221,255)">{<br></span><span style="color:rgb(137,221,255)">    </span><span style="color:rgb(130,170,255)">fprintf</span><span style="color:rgb(137,221,255)">(</span><span style="color:rgb(255,203,107);font-weight:bold">stderr</span><span style="color:rgb(137,221,255)">, </span><span style="color:rgb(195,232,141)">"Could not allocate input_par </span><span style="color:rgb(137,221,255)">\n</span><span style="color:rgb(195,232,141)">"</span><span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(137,221,255)">    </span><span style="color:rgb(199,146,234);font-style:italic">return </span><span style="color:rgb(137,221,255)">-</span><span style="color:rgb(247,140,108)">2</span><span style="color:rgb(137,221,255)">;<br></span><span style="color:rgb(137,221,255)">}<br></span>input_par<span style="color:rgb(137,221,255)">-></span>hw_frames_ctx <span style="color:rgb(137,221,255)">= </span><span style="color:rgb(130,170,255)">av_buffer_ref</span><span style="color:rgb(137,221,255)">(</span>decoder<span style="color:rgb(137,221,255)">-></span>hwFramesRef<span style="color:rgb(137,221,255)">);<br></span>input_par<span style="color:rgb(137,221,255)">-></span>time_base <span style="color:rgb(137,221,255)">= </span>time_base<span style="color:rgb(137,221,255)">;<br></span>input_par<span style="color:rgb(137,221,255)">-></span>width <span style="color:rgb(137,221,255)">= </span><span style="color:rgb(247,140,108)">1920</span><span style="color:rgb(137,221,255)">;<br></span>input_par<span style="color:rgb(137,221,255)">-></span>height <span style="color:rgb(137,221,255)">= </span><span style="color:rgb(247,140,108)">1080</span><span style="color:rgb(137,221,255)">;<br></span>input_par<span style="color:rgb(137,221,255)">-></span>sample_aspect_ratio <span style="color:rgb(137,221,255)">= (</span><span style="color:rgb(195,232,141)">AVRational</span><span style="color:rgb(137,221,255)">) {</span><span style="color:rgb(247,140,108)">1</span><span style="color:rgb(137,221,255)">, </span><span style="color:rgb(247,140,108)">1</span><span style="color:rgb(137,221,255)">};<br></span>input_par<span style="color:rgb(137,221,255)">-></span>frame_rate <span style="color:rgb(137,221,255)">= (</span><span style="color:rgb(195,232,141)">AVRational</span><span style="color:rgb(137,221,255)">) {</span><span style="color:rgb(247,140,108)">25</span><span style="color:rgb(137,221,255)">, </span><span style="color:rgb(247,140,108)">1</span><span style="color:rgb(137,221,255)">};<br></span>input_par<span style="color:rgb(137,221,255)">-></span>format <span style="color:rgb(137,221,255)">= </span><span style="color:rgb(247,140,108)">AV_PIX_FMT_CUDA</span><span style="color:rgb(137,221,255)">;<br><br></span></pre><div style="background-color:rgb(33,33,33);color:rgb(238,255,255)"><pre style="font-family:"Menlo",monospace;font-size:9pt"><span style="color:rgb(199,146,234);font-style:italic">char </span>args<span style="color:rgb(137,221,255)">[</span><span style="color:rgb(247,140,108)">512</span><span style="color:rgb(137,221,255)">];<br></span><span style="color:rgb(130,170,255)">snprintf</span><span style="color:rgb(137,221,255)">(</span>args<span style="color:rgb(137,221,255)">, </span><span style="color:rgb(199,146,234);font-style:italic">sizeof</span><span style="color:rgb(137,221,255)">(</span>args<span style="color:rgb(137,221,255)">),<br></span><span style="color:rgb(137,221,255)">         </span><span style="color:rgb(195,232,141)">"video_size=%dx%d:pix_fmt=%d:time_base=%d/%d:pixel_aspect=%d/%d"</span><span style="color:rgb(137,221,255)">,<br></span><span style="color:rgb(137,221,255)">         </span>decoder<span style="color:rgb(137,221,255)">-></span>video_avcc<span style="color:rgb(137,221,255)">-></span>width<span style="color:rgb(137,221,255)">, </span>decoder<span style="color:rgb(137,221,255)">-></span>video_avcc<span style="color:rgb(137,221,255)">-></span>height<span style="color:rgb(137,221,255)">, </span><span style="color:rgb(247,140,108)">AV_PIX_FMT_CUDA</span><span style="color:rgb(137,221,255)">,<br></span><span style="color:rgb(137,221,255)">         </span>time_base<span style="color:rgb(137,221,255)">.</span>num<span style="color:rgb(137,221,255)">, </span>time_base<span style="color:rgb(137,221,255)">.</span>den<span style="color:rgb(137,221,255)">,<br></span><span style="color:rgb(137,221,255)">         </span>decoder<span style="color:rgb(137,221,255)">-></span>video_avcc<span style="color:rgb(137,221,255)">-></span>sample_aspect_ratio<span style="color:rgb(137,221,255)">.</span>num<span style="color:rgb(137,221,255)">, </span>decoder<span style="color:rgb(137,221,255)">-></span>video_avcc<span style="color:rgb(137,221,255)">-></span>sample_aspect_ratio<span style="color:rgb(137,221,255)">.</span>den<span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(137,221,255)"><br></span><span style="color:rgb(130,170,255)">fprintf</span><span style="color:rgb(137,221,255)">(</span><span style="color:rgb(255,203,107);font-weight:bold">stderr</span><span style="color:rgb(137,221,255)">, </span><span style="color:rgb(195,232,141)">"args = %s</span><span style="color:rgb(137,221,255)">\n</span><span style="color:rgb(195,232,141)">"</span><span style="color:rgb(137,221,255)">, </span>args<span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(137,221,255)"><br></span><span style="color:rgb(199,146,234);font-style:italic">int </span>error <span style="color:rgb(137,221,255)">= </span><span style="color:rgb(130,170,255)">avfilter_graph_create_filter</span><span style="color:rgb(137,221,255)">(&</span>vbuffersrc_ctx<span style="color:rgb(137,221,255)">, </span>vbuffersrc<span style="color:rgb(137,221,255)">, </span><span style="color:rgb(195,232,141)">"in"</span><span style="color:rgb(137,221,255)">, </span>args<span style="color:rgb(137,221,255)">, </span><span style="color:rgb(255,203,107);font-weight:bold">NULL</span><span style="color:rgb(137,221,255)">, </span>vfilter_graph<span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(199,146,234);font-style:italic">if </span><span style="color:rgb(137,221,255)">(</span>error <span style="color:rgb(137,221,255)">< </span><span style="color:rgb(247,140,108)">0</span><span style="color:rgb(137,221,255)">)<br></span><span style="color:rgb(137,221,255)">{<br></span><span style="color:rgb(137,221,255)">    </span><span style="color:rgb(130,170,255)">fprintf</span><span style="color:rgb(137,221,255)">(</span><span style="color:rgb(255,203,107);font-weight:bold">stderr</span><span style="color:rgb(137,221,255)">, </span><span style="color:rgb(195,232,141)">"Cannot create buffer source</span><span style="color:rgb(137,221,255)">\n</span><span style="color:rgb(195,232,141)">"</span><span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(137,221,255)">    </span><span style="color:rgb(199,146,234);font-style:italic">return </span>error<span style="color:rgb(137,221,255)">;<br></span><span style="color:rgb(137,221,255)">}<br></span><span style="color:rgb(137,221,255)"><br></span>vbuffersrc_ctx<span style="color:rgb(137,221,255)">-></span>hw_device_ctx <span style="color:rgb(137,221,255)">= </span><span style="color:rgb(130,170,255)">av_buffer_ref</span><span style="color:rgb(137,221,255)">(</span>decoder<span style="color:rgb(137,221,255)">-></span>hwDevCtx<span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(137,221,255)"><br></span><span style="color:rgb(137,221,255)"><br></span>error <span style="color:rgb(137,221,255)">= </span><span style="color:rgb(130,170,255)">av_buffersrc_parameters_set</span><span style="color:rgb(137,221,255)">(</span>vbuffersrc_ctx<span style="color:rgb(137,221,255)">, </span>input_par<span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(130,170,255)">av_freep</span><span style="color:rgb(137,221,255)">(&</span>input_par<span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(199,146,234);font-style:italic">if </span><span style="color:rgb(137,221,255)">(</span>error <span style="color:rgb(137,221,255)">< </span><span style="color:rgb(247,140,108)">0</span><span style="color:rgb(137,221,255)">)<br></span><span style="color:rgb(137,221,255)">{<br></span><span style="color:rgb(137,221,255)">    </span><span style="color:rgb(130,170,255)">fprintf</span><span style="color:rgb(137,221,255)">(</span><span style="color:rgb(255,203,107);font-weight:bold">stderr</span><span style="color:rgb(137,221,255)">, </span><span style="color:rgb(195,232,141)">"Could not allocate buffersrc parameters, error: %s</span><span style="color:rgb(137,221,255)">\n</span><span style="color:rgb(195,232,141)">"</span><span style="color:rgb(137,221,255)">, </span><span style="color:rgb(255,203,107);font-weight:bold">av_err2str</span><span style="color:rgb(137,221,255)">(</span>error<span style="color:rgb(137,221,255)">));<br></span><span style="color:rgb(137,221,255)">    </span><span style="color:rgb(199,146,234);font-style:italic">return </span>error<span style="color:rgb(137,221,255)">;<br></span><span style="color:rgb(137,221,255)">}<br></span><span style="color:rgb(137,221,255)"><br></span>error <span style="color:rgb(137,221,255)">= </span><span style="color:rgb(130,170,255)">avfilter_graph_create_filter</span><span style="color:rgb(137,221,255)">(&</span>vbuffersink_ctx1<span style="color:rgb(137,221,255)">, </span>vbuffersink<span style="color:rgb(137,221,255)">, </span><span style="color:rgb(255,203,107);font-weight:bold">NULL</span><span style="color:rgb(137,221,255)">, </span><span style="color:rgb(255,203,107);font-weight:bold">NULL</span><span style="color:rgb(137,221,255)">, </span><span style="color:rgb(255,203,107);font-weight:bold">NULL</span><span style="color:rgb(137,221,255)">, </span>vfilter_graph<span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(199,146,234);font-style:italic">if </span><span style="color:rgb(137,221,255)">(</span>error <span style="color:rgb(137,221,255)">< </span><span style="color:rgb(247,140,108)">0</span><span style="color:rgb(137,221,255)">)<br></span><span style="color:rgb(137,221,255)">{<br></span><span style="color:rgb(137,221,255)">    </span><span style="color:rgb(130,170,255)">fprintf</span><span style="color:rgb(137,221,255)">(</span><span style="color:rgb(255,203,107);font-weight:bold">stderr</span><span style="color:rgb(137,221,255)">, </span><span style="color:rgb(195,232,141)">"Cannot create buffer sink</span><span style="color:rgb(137,221,255)">\n</span><span style="color:rgb(195,232,141)">"</span><span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(137,221,255)">    </span><span style="color:rgb(199,146,234);font-style:italic">return </span>error<span style="color:rgb(137,221,255)">;<br></span><span style="color:rgb(137,221,255)">}<br></span><span style="color:rgb(137,221,255)"><br></span>vbuffersink_ctx1<span style="color:rgb(137,221,255)">-></span>hw_device_ctx <span style="color:rgb(137,221,255)">= </span><span style="color:rgb(130,170,255)">av_buffer_ref</span><span style="color:rgb(137,221,255)">(</span>decoder<span style="color:rgb(137,221,255)">-></span>hwDevCtx<span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(137,221,255)"><br></span><span style="color:rgb(130,170,255)">avfilter_link</span><span style="color:rgb(137,221,255)">(</span>vbuffersrc_ctx<span style="color:rgb(137,221,255)">, </span><span style="color:rgb(247,140,108)">0</span><span style="color:rgb(137,221,255)">, </span>vbuffersink_ctx1<span style="color:rgb(137,221,255)">, </span><span style="color:rgb(247,140,108)">0</span><span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(137,221,255)"><br></span><span style="color:rgb(199,146,234);font-style:italic">if </span><span style="color:rgb(137,221,255)">((</span>error <span style="color:rgb(137,221,255)">= </span><span style="color:rgb(130,170,255)">avfilter_graph_config</span><span style="color:rgb(137,221,255)">(</span>vfilter_graph<span style="color:rgb(137,221,255)">, </span><span style="color:rgb(255,203,107);font-weight:bold">NULL</span><span style="color:rgb(137,221,255)">)) < </span><span style="color:rgb(247,140,108)">0</span><span style="color:rgb(137,221,255)">)<br></span><span style="color:rgb(137,221,255)">{<br></span><span style="color:rgb(137,221,255)">    </span><span style="color:rgb(130,170,255)">fprintf</span><span style="color:rgb(137,221,255)">(</span><span style="color:rgb(255,203,107);font-weight:bold">stderr</span><span style="color:rgb(137,221,255)">, </span><span style="color:rgb(195,232,141)">"Error while configuring filter graph</span><span style="color:rgb(137,221,255)">\n</span><span style="color:rgb(195,232,141)">"</span><span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(137,221,255)">    </span><span style="color:rgb(199,146,234);font-style:italic">return </span>error<span style="color:rgb(137,221,255)">;<br></span><span style="color:rgb(137,221,255)">}</span></pre></div></div></div>and this is the trascode video function</div><div><br></div><div><div style="background-color:rgb(33,33,33);color:rgb(238,255,255)"><pre style="font-family:"Menlo",monospace;font-size:9pt"><span style="color:rgb(199,146,234);font-style:italic">int </span>error<span style="color:rgb(137,221,255)">;<br></span>error <span style="color:rgb(137,221,255)">= </span><span style="color:rgb(130,170,255)">avcodec_send_packet</span><span style="color:rgb(137,221,255)">(</span><span style="color:rgb(247,140,108)">decoder</span><span style="color:rgb(137,221,255)">-></span>video_avcc<span style="color:rgb(137,221,255)">, </span><span style="color:rgb(247,140,108)">input_packet</span><span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(199,146,234);font-style:italic">if </span><span style="color:rgb(137,221,255)">(</span>error <span style="color:rgb(137,221,255)">< </span><span style="color:rgb(247,140,108)">0</span><span style="color:rgb(137,221,255)">)<br></span><span style="color:rgb(137,221,255)">{<br></span><span style="color:rgb(137,221,255)">    </span><span style="color:rgb(130,170,255)">av_log</span><span style="color:rgb(137,221,255)">(</span><span style="color:rgb(255,203,107);font-weight:bold">NULL</span><span style="color:rgb(137,221,255)">, </span><span style="color:rgb(255,203,107);font-weight:bold">AV_LOG_ERROR</span><span style="color:rgb(137,221,255)">, </span><span style="color:rgb(195,232,141)">"Error while sending a packet to the decoder %s</span><span style="color:rgb(137,221,255)">\n</span><span style="color:rgb(195,232,141)">"</span><span style="color:rgb(137,221,255)">, </span><span style="color:rgb(255,203,107);font-weight:bold">av_err2str</span><span style="color:rgb(137,221,255)">(</span>error<span style="color:rgb(137,221,255)">));<br></span><span style="color:rgb(137,221,255)">    </span><span style="color:rgb(199,146,234);font-style:italic">return </span>error<span style="color:rgb(137,221,255)">;<br></span><span style="color:rgb(137,221,255)">}<br></span><span style="color:rgb(137,221,255)"><br></span><span style="color:rgb(199,146,234);font-style:italic">while </span><span style="color:rgb(137,221,255)">(</span>error <span style="color:rgb(137,221,255)">>= </span><span style="color:rgb(247,140,108)">0</span><span style="color:rgb(137,221,255)">)<br></span><span style="color:rgb(137,221,255)">{<br></span><span style="color:rgb(137,221,255)">    </span>error <span style="color:rgb(137,221,255)">= </span><span style="color:rgb(130,170,255)">avcodec_receive_frame</span><span style="color:rgb(137,221,255)">(</span><span style="color:rgb(247,140,108)">decoder</span><span style="color:rgb(137,221,255)">-></span>video_avcc<span style="color:rgb(137,221,255)">, </span><span style="color:rgb(247,140,108)">input_frame</span><span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(137,221,255)">    </span><span style="color:rgb(199,146,234);font-style:italic">if </span><span style="color:rgb(137,221,255)">(</span>error <span style="color:rgb(137,221,255)">== </span><span style="color:rgb(255,203,107);font-weight:bold">AVERROR</span><span style="color:rgb(137,221,255)">(</span>EAGAIN<span style="color:rgb(137,221,255)">) || </span>error <span style="color:rgb(137,221,255)">== </span><span style="color:rgb(255,203,107);font-weight:bold">AVERROR_EOF</span><span style="color:rgb(137,221,255)">)<br></span><span style="color:rgb(137,221,255)">    {<br></span><span style="color:rgb(137,221,255)">        </span><span style="color:rgb(199,146,234);font-style:italic">break</span><span style="color:rgb(137,221,255)">;<br></span><span style="color:rgb(137,221,255)">    } </span><span style="color:rgb(199,146,234);font-style:italic">else if </span><span style="color:rgb(137,221,255)">(</span>error <span style="color:rgb(137,221,255)">< </span><span style="color:rgb(247,140,108)">0</span><span style="color:rgb(137,221,255)">)<br></span><span style="color:rgb(137,221,255)">    {<br></span><span style="color:rgb(137,221,255)">        </span><span style="color:rgb(130,170,255)">av_log</span><span style="color:rgb(137,221,255)">(</span><span style="color:rgb(255,203,107);font-weight:bold">NULL</span><span style="color:rgb(137,221,255)">, </span><span style="color:rgb(255,203,107);font-weight:bold">AV_LOG_ERROR</span><span style="color:rgb(137,221,255)">, </span><span style="color:rgb(195,232,141)">"Error while receiving a frame from the decoder</span><span style="color:rgb(137,221,255)">\n</span><span style="color:rgb(195,232,141)">"</span><span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(137,221,255)">        </span><span style="color:rgb(199,146,234);font-style:italic">return </span><span style="color:rgb(137,221,255)">-</span><span style="color:rgb(247,140,108)">1</span><span style="color:rgb(137,221,255)">;<br></span><span style="color:rgb(137,221,255)">    }<br></span><span style="color:rgb(137,221,255)"><br></span><span style="color:rgb(137,221,255)">    </span><span style="color:rgb(247,140,108)">input_frame</span><span style="color:rgb(137,221,255)">-></span>pts <span style="color:rgb(137,221,255)">= </span><span style="color:rgb(247,140,108)">input_frame</span><span style="color:rgb(137,221,255)">-></span>best_effort_timestamp<span style="color:rgb(137,221,255)">;<br></span><span style="color:rgb(137,221,255)"><br></span><span style="color:rgb(137,221,255)"><br></span><span style="color:rgb(137,221,255)">    </span><span style="color:rgb(199,146,234);font-style:italic">if </span><span style="color:rgb(137,221,255)">(</span><span style="color:rgb(130,170,255)">av_buffersrc_add_frame_flags</span><span style="color:rgb(137,221,255)">(</span><span style="color:rgb(247,140,108)">buffersrc_ctx</span><span style="color:rgb(137,221,255)">,<br></span><span style="color:rgb(137,221,255)">                                     </span><span style="color:rgb(247,140,108)">input_frame</span><span style="color:rgb(137,221,255)">,<br></span><span style="color:rgb(137,221,255)">                                     </span><span style="color:rgb(247,140,108)">AV_BUFFERSRC_FLAG_KEEP_REF</span><span style="color:rgb(137,221,255)">) < </span><span style="color:rgb(247,140,108)">0</span><span style="color:rgb(137,221,255)">)<br></span><span style="color:rgb(137,221,255)">    {<br></span><span style="color:rgb(137,221,255)">        </span><span style="color:rgb(130,170,255)">av_log</span><span style="color:rgb(137,221,255)">(</span><span style="color:rgb(255,203,107);font-weight:bold">NULL</span><span style="color:rgb(137,221,255)">, </span><span style="color:rgb(255,203,107);font-weight:bold">AV_LOG_ERROR</span><span style="color:rgb(137,221,255)">, </span><span style="color:rgb(195,232,141)">"Error while feeding the audio filtergraph</span><span style="color:rgb(137,221,255)">\n</span><span style="color:rgb(195,232,141)">"</span><span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(137,221,255)">        </span><span style="color:rgb(199,146,234);font-style:italic">continue</span><span style="color:rgb(137,221,255)">;<br></span><span style="color:rgb(137,221,255)">    }<br></span><span style="color:rgb(137,221,255)"><br></span><span style="color:rgb(137,221,255)">    </span><span style="color:rgb(130,170,255)">av_frame_unref</span><span style="color:rgb(137,221,255)">(</span><span style="color:rgb(247,140,108)">input_frame</span><span style="color:rgb(137,221,255)">); <br></span><span style="color:rgb(137,221,255)"><br></span><span style="color:rgb(137,221,255)">    </span><span style="color:rgb(199,146,234);font-style:italic">while </span><span style="color:rgb(137,221,255)">(</span><span style="color:rgb(199,146,234);font-style:italic">true</span><span style="color:rgb(137,221,255)">)<br></span><span style="color:rgb(137,221,255)">    {<br></span><span style="color:rgb(137,221,255)">        </span>error <span style="color:rgb(137,221,255)">= </span><span style="color:rgb(130,170,255)">av_buffersink_get_frame</span><span style="color:rgb(137,221,255)">(</span><span style="color:rgb(247,140,108)">buffersink_ctx</span><span style="color:rgb(137,221,255)">, </span><span style="color:rgb(247,140,108)">filt_frame</span><span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(137,221,255)">        </span><span style="color:rgb(199,146,234);font-style:italic">if </span><span style="color:rgb(137,221,255)">(</span>error <span style="color:rgb(137,221,255)">== </span><span style="color:rgb(255,203,107);font-weight:bold">AVERROR</span><span style="color:rgb(137,221,255)">(</span>EAGAIN<span style="color:rgb(137,221,255)">) || </span>error <span style="color:rgb(137,221,255)">== </span><span style="color:rgb(255,203,107);font-weight:bold">AVERROR_EOF</span><span style="color:rgb(137,221,255)">)<br></span><span style="color:rgb(137,221,255)">            </span><span style="color:rgb(199,146,234);font-style:italic">break</span><span style="color:rgb(137,221,255)">;<br></span><span style="color:rgb(137,221,255)">        </span><span style="color:rgb(199,146,234);font-style:italic">if </span><span style="color:rgb(137,221,255)">(</span>error <span style="color:rgb(137,221,255)">< </span><span style="color:rgb(247,140,108)">0</span><span style="color:rgb(137,221,255)">)<br></span><span style="color:rgb(137,221,255)">            </span><span style="color:rgb(199,146,234);font-style:italic">return </span><span style="color:rgb(137,221,255)">-</span><span style="color:rgb(247,140,108)">1</span><span style="color:rgb(137,221,255)">;<br></span><span style="color:rgb(137,221,255)"><br></span><span style="color:rgb(137,221,255)">        </span><span style="color:rgb(247,140,108)">filt_frame</span><span style="color:rgb(137,221,255)">-></span>time_base <span style="color:rgb(137,221,255)">= </span><span style="color:rgb(130,170,255)">av_buffersink_get_time_base</span><span style="color:rgb(137,221,255)">(</span><span style="color:rgb(247,140,108)">buffersink_ctx</span><span style="color:rgb(137,221,255)">);;<br></span><span style="color:rgb(137,221,255)">        </span><span style="color:rgb(247,140,108)">filt_frame</span><span style="color:rgb(137,221,255)">-></span>pict_type <span style="color:rgb(137,221,255)">= </span><span style="color:rgb(247,140,108)">AV_PICTURE_TYPE_NONE</span><span style="color:rgb(137,221,255)">;<br></span><span style="color:rgb(137,221,255)"><br></span><span style="color:rgb(137,221,255)">        </span><span style="color:rgb(195,232,141)">AVPacket </span><span style="color:rgb(137,221,255)">*</span>output_packet <span style="color:rgb(137,221,255)">= </span><span style="color:rgb(130,170,255)">av_packet_alloc</span><span style="color:rgb(137,221,255)">();<br></span><span style="color:rgb(137,221,255)">        </span><span style="color:rgb(199,146,234);font-style:italic">if </span><span style="color:rgb(137,221,255)">(!</span>output_packet<span style="color:rgb(137,221,255)">)<br></span><span style="color:rgb(137,221,255)">        {<br></span><span style="color:rgb(137,221,255)">            </span><span style="color:rgb(130,170,255)">fprintf</span><span style="color:rgb(137,221,255)">(</span><span style="color:rgb(255,203,107);font-weight:bold">stderr</span><span style="color:rgb(137,221,255)">, </span><span style="color:rgb(195,232,141)">"could not allocate memory for output packet</span><span style="color:rgb(137,221,255)">\n</span><span style="color:rgb(195,232,141)">"</span><span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(137,221,255)">            </span><span style="color:rgb(199,146,234);font-style:italic">return </span><span style="color:rgb(137,221,255)">-</span><span style="color:rgb(247,140,108)">1</span><span style="color:rgb(137,221,255)">;<br></span><span style="color:rgb(137,221,255)">        }<br></span><span style="color:rgb(137,221,255)"><br></span><span style="color:rgb(137,221,255)">        </span><span style="color:rgb(199,146,234);font-style:italic">int </span>response <span style="color:rgb(137,221,255)">= </span><span style="color:rgb(130,170,255)">avcodec_send_frame</span><span style="color:rgb(137,221,255)">(</span><span style="color:rgb(247,140,108)">encoder</span><span style="color:rgb(137,221,255)">-></span>video_avcc<span style="color:rgb(137,221,255)">, </span><span style="color:rgb(247,140,108)">filt_frame</span><span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(137,221,255)"><br></span><span style="color:rgb(137,221,255)">        </span><span style="color:rgb(199,146,234);font-style:italic">while </span><span style="color:rgb(137,221,255)">(</span>response <span style="color:rgb(137,221,255)">>= </span><span style="color:rgb(247,140,108)">0</span><span style="color:rgb(137,221,255)">)<br></span><span style="color:rgb(137,221,255)">        {<br></span><span style="color:rgb(137,221,255)">            </span>response <span style="color:rgb(137,221,255)">= </span><span style="color:rgb(130,170,255)">avcodec_receive_packet</span><span style="color:rgb(137,221,255)">(</span><span style="color:rgb(247,140,108)">encoder</span><span style="color:rgb(137,221,255)">-></span>video_avcc<span style="color:rgb(137,221,255)">, </span>output_packet<span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(137,221,255)">            </span><span style="color:rgb(199,146,234);font-style:italic">if </span><span style="color:rgb(137,221,255)">(</span>response <span style="color:rgb(137,221,255)">== </span><span style="color:rgb(255,203,107);font-weight:bold">AVERROR</span><span style="color:rgb(137,221,255)">(</span>EAGAIN<span style="color:rgb(137,221,255)">) || </span>response <span style="color:rgb(137,221,255)">== </span><span style="color:rgb(255,203,107);font-weight:bold">AVERROR_EOF</span><span style="color:rgb(137,221,255)">)<br></span><span style="color:rgb(137,221,255)">            {<br></span><span style="color:rgb(137,221,255)">                </span><span style="color:rgb(199,146,234);font-style:italic">break</span><span style="color:rgb(137,221,255)">;<br></span><span style="color:rgb(137,221,255)">            } </span><span style="color:rgb(199,146,234);font-style:italic">else if </span><span style="color:rgb(137,221,255)">(</span>response <span style="color:rgb(137,221,255)">< </span><span style="color:rgb(247,140,108)">0</span><span style="color:rgb(137,221,255)">)<br></span><span style="color:rgb(137,221,255)">            {<br></span><span style="color:rgb(137,221,255)">                </span><span style="color:rgb(130,170,255)">fprintf</span><span style="color:rgb(137,221,255)">(</span><span style="color:rgb(255,203,107);font-weight:bold">stderr</span><span style="color:rgb(137,221,255)">, </span><span style="color:rgb(195,232,141)">"Error while receiving packet from encoder: %s</span><span style="color:rgb(137,221,255)">\n</span><span style="color:rgb(195,232,141)">"</span><span style="color:rgb(137,221,255)">, </span><span style="color:rgb(255,203,107);font-weight:bold">av_err2str</span><span style="color:rgb(137,221,255)">(</span>response<span style="color:rgb(137,221,255)">));<br></span><span style="color:rgb(137,221,255)">                </span><span style="color:rgb(199,146,234);font-style:italic">return </span><span style="color:rgb(137,221,255)">-</span><span style="color:rgb(247,140,108)">1</span><span style="color:rgb(137,221,255)">;<br></span><span style="color:rgb(137,221,255)">            }<br></span><span style="color:rgb(137,221,255)"><br></span><span style="color:rgb(137,221,255)">            </span>output_packet<span style="color:rgb(137,221,255)">-></span>stream_index <span style="color:rgb(137,221,255)">= </span><span style="color:rgb(247,140,108)">encoder</span><span style="color:rgb(137,221,255)">-></span>video_avs<span style="color:rgb(137,221,255)">-></span>index<span style="color:rgb(137,221,255)">;<br></span><span style="color:rgb(137,221,255)"><br></span><span style="color:rgb(137,221,255)">            </span><span style="color:rgb(130,170,255)">av_packet_rescale_ts</span><span style="color:rgb(137,221,255)">(</span>output_packet<span style="color:rgb(137,221,255)">,<br></span><span style="color:rgb(137,221,255)">                                 </span><span style="color:rgb(247,140,108)">encoder</span><span style="color:rgb(137,221,255)">-></span>video_avcc<span style="color:rgb(137,221,255)">-></span>time_base<span style="color:rgb(137,221,255)">,<br></span><span style="color:rgb(137,221,255)">                                 </span><span style="color:rgb(247,140,108)">encoder</span><span style="color:rgb(137,221,255)">-></span>video_avs<span style="color:rgb(137,221,255)">-></span>time_base<span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(137,221,255)"><br></span><span style="color:rgb(137,221,255)">            </span><span style="color:rgb(199,146,234);font-style:italic">if </span><span style="color:rgb(137,221,255)">(</span>output_packet<span style="color:rgb(137,221,255)">-></span>pts <span style="color:rgb(137,221,255)">!= </span><span style="color:rgb(255,203,107);font-weight:bold">AV_NOPTS_VALUE</span><span style="color:rgb(137,221,255)">)<br></span><span style="color:rgb(137,221,255)">            {<br></span><span style="color:rgb(137,221,255)">                </span>output_packet<span style="color:rgb(137,221,255)">-></span>pts <span style="color:rgb(137,221,255)">= </span><span style="color:rgb(130,170,255)">av_rescale_q</span><span style="color:rgb(137,221,255)">(</span>output_packet<span style="color:rgb(137,221,255)">-></span>pts<span style="color:rgb(137,221,255)">,<br></span><span style="color:rgb(137,221,255)">                                                  </span><span style="color:rgb(247,140,108)">decoder</span><span style="color:rgb(137,221,255)">-></span>avfc<span style="color:rgb(137,221,255)">-></span>streams<span style="color:rgb(137,221,255)">[</span><span style="color:rgb(247,140,108)">decoder</span><span style="color:rgb(137,221,255)">-></span>video_index<span style="color:rgb(137,221,255)">]-></span>time_base<span style="color:rgb(137,221,255)">,<br></span><span style="color:rgb(137,221,255)">                                                  </span><span style="color:rgb(247,140,108)">encoder</span><span style="color:rgb(137,221,255)">-></span>avfc<span style="color:rgb(137,221,255)">-></span>streams<span style="color:rgb(137,221,255)">[</span><span style="color:rgb(247,140,108)">decoder</span><span style="color:rgb(137,221,255)">-></span>video_index<span style="color:rgb(137,221,255)">]-></span>time_base<span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(137,221,255)">            }<br></span><span style="color:rgb(137,221,255)"><br></span><span style="color:rgb(137,221,255)">            </span><span style="color:rgb(199,146,234);font-style:italic">if </span><span style="color:rgb(137,221,255)">(</span>output_packet<span style="color:rgb(137,221,255)">-></span>dts <span style="color:rgb(137,221,255)">!= </span><span style="color:rgb(255,203,107);font-weight:bold">AV_NOPTS_VALUE</span><span style="color:rgb(137,221,255)">)<br></span><span style="color:rgb(137,221,255)">            {<br></span><span style="color:rgb(137,221,255)">                </span>output_packet<span style="color:rgb(137,221,255)">-></span>dts <span style="color:rgb(137,221,255)">= </span><span style="color:rgb(130,170,255)">av_rescale_q</span><span style="color:rgb(137,221,255)">(</span>output_packet<span style="color:rgb(137,221,255)">-></span>dts<span style="color:rgb(137,221,255)">,<br></span><span style="color:rgb(137,221,255)">                                                  </span><span style="color:rgb(247,140,108)">decoder</span><span style="color:rgb(137,221,255)">-></span>avfc<span style="color:rgb(137,221,255)">-></span>streams<span style="color:rgb(137,221,255)">[</span><span style="color:rgb(247,140,108)">decoder</span><span style="color:rgb(137,221,255)">-></span>video_index<span style="color:rgb(137,221,255)">]-></span>time_base<span style="color:rgb(137,221,255)">,<br></span><span style="color:rgb(137,221,255)">                                                  </span><span style="color:rgb(247,140,108)">encoder</span><span style="color:rgb(137,221,255)">-></span>avfc<span style="color:rgb(137,221,255)">-></span>streams<span style="color:rgb(137,221,255)">[</span><span style="color:rgb(247,140,108)">decoder</span><span style="color:rgb(137,221,255)">-></span>video_index<span style="color:rgb(137,221,255)">]-></span>time_base<span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(137,221,255)">            }<br></span><span style="color:rgb(137,221,255)"><br></span><span style="color:rgb(137,221,255)">            </span>response <span style="color:rgb(137,221,255)">= </span><span style="color:rgb(130,170,255)">av_interleaved_write_frame</span><span style="color:rgb(137,221,255)">(</span><span style="color:rgb(247,140,108)">encoder</span><span style="color:rgb(137,221,255)">-></span>avfc<span style="color:rgb(137,221,255)">, </span>output_packet<span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(137,221,255)">            </span><span style="color:rgb(199,146,234);font-style:italic">if </span><span style="color:rgb(137,221,255)">(</span>response <span style="color:rgb(137,221,255)">!= </span><span style="color:rgb(247,140,108)">0</span><span style="color:rgb(137,221,255)">)<br></span><span style="color:rgb(137,221,255)">            {<br></span><span style="color:rgb(137,221,255)">                </span><span style="color:rgb(130,170,255)">fprintf</span><span style="color:rgb(137,221,255)">(</span><span style="color:rgb(255,203,107);font-weight:bold">stderr</span><span style="color:rgb(137,221,255)">, </span><span style="color:rgb(195,232,141)">"Error %d writing interleaved frame: %s</span><span style="color:rgb(137,221,255)">\n</span><span style="color:rgb(195,232,141)">"</span><span style="color:rgb(137,221,255)">, </span>response<span style="color:rgb(137,221,255)">,<br></span><span style="color:rgb(137,221,255)">                        </span><span style="color:rgb(255,203,107);font-weight:bold">av_err2str</span><span style="color:rgb(137,221,255)">(</span>response<span style="color:rgb(137,221,255)">));<br></span><span style="color:rgb(137,221,255)">                </span><span style="color:rgb(199,146,234);font-style:italic">continue</span><span style="color:rgb(137,221,255)">;<br></span><span style="color:rgb(137,221,255)">            }<br></span><span style="color:rgb(137,221,255)"><br></span><span style="color:rgb(137,221,255)">            </span><span style="color:rgb(130,170,255)">av_frame_unref</span><span style="color:rgb(137,221,255)">(</span><span style="color:rgb(247,140,108)">filt_frame</span><span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(137,221,255)">        }<br></span><span style="color:rgb(137,221,255)"><br></span><span style="color:rgb(137,221,255)">        </span><span style="color:rgb(130,170,255)">av_packet_unref</span><span style="color:rgb(137,221,255)">(</span>output_packet<span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(137,221,255)">        </span><span style="color:rgb(130,170,255)">av_packet_free</span><span style="color:rgb(137,221,255)">(&</span>output_packet<span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(137,221,255)">    }<br></span><span style="color:rgb(137,221,255)"><br></span><span style="color:rgb(137,221,255)"><br></span><span style="color:rgb(137,221,255)">    </span><span style="color:rgb(130,170,255)">av_frame_unref</span><span style="color:rgb(137,221,255)">(</span><span style="color:rgb(247,140,108)">input_frame</span><span style="color:rgb(137,221,255)">);<br></span><span style="color:rgb(137,221,255)">}<br></span><span style="color:rgb(199,146,234);font-style:italic">return </span><span style="color:rgb(247,140,108)">0</span><span style="color:rgb(137,221,255)">;</span></pre></div><br></div></div>