Интеллектуальные указатели C++ на объекты FFmpegC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Интеллектуальные указатели C++ на объекты FFmpeg

Сообщение Anonymous »

Могу ли я создавать и использовать интеллектуальные указатели C++ для разных типов указателей из FFmpeg?
  • "AVCodecContext *", который используется только как указатель во всех функциях кроме освобождения.
Выделить:

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

AVCodecContext *avcodec_alloc_context3(const AVCodec *codec);
Бесплатно:

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

void avcodec_free_context(AVCodecContext **avctx);
Использование:

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

int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options);
Затем умный указатель:

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

std::shared_ptr av_codec_context(avcodec_alloc_context3(av_codec),
[](AVCodecContext* _context)
{
if (_context) avcodec_free_context(&_context);
});
avcodec_open2(av_codec_context.get(), av_codec, NULL)
Это правильно?
  • "AVDictionary **" который используется во всех функциях только как указатель на указатель.
Выделяйте и используйте:

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

int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags);
где pm — указатель на указатель на структуру словаря. Если *pm имеет значение NULL, структура словаря выделяется и помещается в *pm.
Бесплатно:

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

void av_dict_free(AVDictionary **m);
Тогда умный указатель:

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

std::shared_ptr av_dict(new (AVDictionary*),
[](AVDictionary** _dict)
{
if (_dict)
{
if(*_dict)
av_dict_free(_dict);
delete _dict;
}
});
av_dict_set(av_dict.get(), "key", "value", 0);
Это правильно?
  • "AVFormatContext *", который используется и как указатель, и как указатель на указатель.
Alloc:

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

AVFormatContext *avformat_alloc_context(void);
Бесплатно:

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

void avformat_free_context(AVFormatContext *s);
Использование:

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

int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options);
или

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

int avformat_open_input(AVFormatContext **ps, const char *url, const AVInputFormat *fmt, AVDictionary **options);
где ps — указатель на предоставленный пользователем AVFormatContext (выделенный avformat_alloc_context). Может быть указателем на NULL, и в этом случае AVFormatContext выделяется этой функцией и записывается в ps.
Тогда умный указатель:

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

std::shared_ptr av_format_context(avformat_alloc_context(),
[](AVFormatContext* _context)
{
if(_context)
avformat_free_context(_context);
});
avformat_find_stream_info(av_format_context.get(), NULL);
Это правильно? Но как я могу использовать его с функцией avformat_open_input(), которой нужен указатель на указатель и которая может захотеть создать объект по этому указателю?

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Можно ли использовать интеллектуальные указатели C++ вместе с malloc C?
    Anonymous » » в форуме C++
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Преобразование связанного списка из необработанных указателей в интеллектуальные указатели
    Anonymous » » в форуме C++
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • У меня есть проблема с моим аудиокодиком FFMPEG FFMPEG FFMPEG
    Anonymous » » в форуме C++
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Указатели на символы и указатели на целые числа (++)
    Anonymous » » в форуме C++
    0 Ответы
    85 Просмотры
    Последнее сообщение Anonymous
  • Как я могу добавить интеллектуальные теги в мой компонент .NET?
    Anonymous » » в форуме C#
    0 Ответы
    46 Просмотры
    Последнее сообщение Anonymous

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