Код: Выделить всё
extern "C" {
#include
#include
#include
#include
#include
#include
}
Код: Выделить всё
AVCodec *encoderVideoCodec = nullptr;
AVCodecContext *encoderVideoCodecContext = nullptr;
Код: Выделить всё
encoderVideoCodecContext = avcodec_alloc_context3(encoderVideoCodec);
if(!encoderVideoCodecContext) {
std::cerr priv_data, outStreamParams.codec_priv_key, outStreamParams.codec_priv_value, 0);
encoderVideoCodecContext->height = decoderVideoCodecContext->height;
encoderVideoCodecContext->width = decoderVideoCodecContext->width;
encoderVideoCodecContext->sample_aspect_ratio = decoderVideoCodecContext->sample_aspect_ratio;
if(encoderVideoCodec->pix_fmts)
encoderVideoCodecContext->pix_fmt = encoderVideoCodec->pix_fmts[0];
else
encoderVideoCodecContext->pix_fmt = decoderVideoCodecContext->pix_fmt;
encoderVideoCodecContext->bit_rate = bitrate;
encoderVideoCodecContext->rc_buffer_size = 4*1000*1000;
encoderVideoCodecContext->rc_max_rate = 2*1000*1000;
encoderVideoCodecContext->rc_min_rate = 2.5*1000*1000;
encoderVideoCodecContext->time_base = av_inv_q(frameRate);
encoderVideoStream->time_base = encoderVideoCodecContext->time_base;
int ret = 0;
ret = avcodec_open2(encoderVideoCodecContext, encoderVideoCodec, nullptr);
if(ret < 0 ) {
std::cerr Метод выделяет некоторую память, которая не чистится. Или какую память мне следует убрать, и снова распределить, чтобы исправить утечку памяти?
Подробнее здесь: [url]https://stackoverflow.com/questions/79436750/how-to-reinitialize-avcodec-with-updated-avcodeccontext-on-fly[/url]