Потоковое видео в динамически меняющийся буфер памяти - PullRequest
0 голосов
/ 27 сентября 2019

Я хочу воспроизвести видеопоток в буфер памяти, используя libVLC 3.x и C ++ в Windows.Я написал пример, который работает должным образом с начальными размерами буфера памяти, но я хочу, чтобы пользователи могли динамически изменять размер буфера (в конечном итоге путем изменения размера окна), и мои усилия по написанию кода, чтобы это не удалось.

Код (извлеченный из более крупного приложения, проверка ошибок и т. Д. Удаленный) для инициализации и воспроизведения URL выглядит следующим образом:

gLibVLC = libvlc_new(vlc_argc, vlc_argv);

gLibVLCMedia = libvlc_media_new_location(gLibVLC, url.c_str());
gLibVLCMediaPlayer = libvlc_media_player_new_from_media(gLibVLCMedia);

gVLCCallbackContext.texture_pixels = gVideoBuffer;
gVLCCallbackContext.mp = gLibVLCMediaPlayer;

libvlc_video_set_callbacks(gLibVLCMediaPlayer, lock, unlock, display, &gVLCCallbackContext);
libvlc_video_set_format(gLibVLCMediaPlayer, "RV32", gTextureWidth, gTextureHeight, gTextureWidth * gTextureDepth);

libvlc_media_player_play(gLibVLCMediaPlayer);

Я добавил некоторый код в функцию, которая вызывается притребуется изменение размера.Это обновляет глобальные переменные ширины / высоты буфера, удаляет, а затем перераспределяет gVideoBuffer и делает еще один вызов:

gVLCCallbackContext.texture_pixels = gVideoBuffer;
gVLCCallbackContext.mp = gLibVLCMediaPlayer;

libvlc_video_set_callbacks(gLibVLCMediaPlayer, lock, unlock, display, &gVLCCallbackContext);
libvlc_video_set_format(gLibVLCMediaPlayer, "RV32", gTextureWidth, gTextureHeight, gTextureWidth * gTextureDepth);

, который, как я надеялся, теперь скажет VLC, декодировать каждый кадр в буферэтот размер, но мое приложение сразу падает - перезаписывает память где-то, что я ожидаю.

Могут ли какие-либо эксперты libVLC сказать мне, если (а) это правильный способ для потоковой передачи видео в буфер памяти и если да, то (б) чточасти API, которые я могу исследовать, чтобы разрешить динамическое изменение размера целевого буфера.

...