Ffmpeg возможная утечка памяти sws_scaleC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Ffmpeg возможная утечка памяти sws_scale

Сообщение Anonymous »

Я декодирую любой кодек камеры, а затем всегда кодирую его в H264 и, более конкретно, в qsv, если он поддерживается. Сейчас тестирую 2 камеры. Один из них — кодировка H264, другой — rawvideo. Проблема возникает с rawvideo. Формат пикселей — BGR24 и масштабируется до NV12

Я упрощу код, потому что он такой же, как и любой другой пример.

Код: Выделить всё

avcodec_send_packet()
// while
avcodec_receive_frame()

// if frame is not EAGAIN convert BGR24 to NV12
if (_pConvertContext == null)
{
_pConvertContext = CreateContext(sourcePixFmt, targePixFmt);
}

if (_convertedFrameBufferPtr == IntPtr.Zero)
{
int buffSize = ffmpeg.av_image_get_buffer_size(targePixFmt, sourceFrame->width, sourceFrame->height, 1);
_convertedFrameBufferPtr = Marshal.AllocHGlobal(buffSize);
ffmpeg.av_image_fill_arrays(ref _dstData, ref _dstLinesize, (byte*)_convertedFrameBufferPtr, targePixFmt, sourceFrame->width, sourceFrame->height, 1);
}

return ScaleImage(_pConvertContext, sourceFrame, targePixFmt, _dstData, _dstLinesize);
И метод ScaleImage

Код: Выделить всё

ffmpeg.sws_scale(ctx, sourceFrame->data, sourceFrame->linesize, 0, sourceFrame->height, dstData, dstLinesize);

AVFrame* f = ffmpeg.av_frame_alloc();

var data = new byte_ptrArray8();
data.UpdateFrom(dstData);
var linesize = new int_array8();
linesize.UpdateFrom(dstLinesize);

f->data = data;
f->linesize = linesize;
f->width = sourceFrame->width;
f->height = sourceFrame->height;
f->format = (int)targePixelFormat;

return f;
После этого отправляем масштабированный кадр в кодер и получаем его и записываем файл. После этого я вызываю av_frame_free(&frame) для кадра, возвращенного методом. Но когда я устанавливаю точку останова, я вижу, что адрес кадра тот же, даже после вызова av_frame_alloc() и очистки каждый раз. И я думаю, что это причина утечки памяти. Если я сделаю глубокое клонирование f перед его возвратом, все будет в порядке. Почему это происходит, когда та же логика работает нормально с другой камерой?

Подробнее здесь: https://stackoverflow.com/questions/604 ... emory-leak
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Анимация SVG Scale Scale медленная на iOS
    Anonymous » » в форуме CSS
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Bluetooth Scale Scale Проблема задержки чтения в Android
    Anonymous » » в форуме Android
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Как устранить предупреждение node js - (узел: 3384) MaxListenersExceededWarning: обнаружена возможная утечка памяти Even
    Гость » » в форуме Javascript
    0 Ответы
    28 Просмотры
    Последнее сообщение Гость
  • Предупреждение «Возможная утечка памяти»
    Anonymous » » в форуме C++
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Возможная утечка памяти в примере FFMPEGAutogen
    Anonymous » » в форуме C#
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»