Я пишу видеодекодер (используя FFMPEG/AVCodec) для пользовательской реализации видеопотока mpeg4. Особенность этого видеопотока заключается в том, что он может разбиваться на многие потоки "сынов", создавая много P-кадров на основе одного и того же родителя. Видеопоток, который я пытаюсь декодировать, на самом деле является своего рода "видео-деревом". Что-то вроде этого:
I <--P <--P <---------------------P <-------------- P <------------ P
\ <--P <--P <--P \ <--P <--P \ <--P <--P
Я уже написал базовый декодер, который отлично работает, когда я решаю следовать одному пути, проблема в том, что я пытаюсь следовать нескольким путям в дереве видео. На этом этапе мне нужно "развить" мой декодер, чтобы следовать двум различным видеопотокам. разделение может происходить не только после ключевого кадра, но даже после P-кадра, поэтому мне нужно дублировать AVCodecContext (я использую avcodec_copy_context
), но, похоже, он создает новый декодер из чистого состояния.. он, кажется, игнорирует предыдущий статус видео, поэтому декодированные P-кадры "применяются" к пустой видеокадре.
Вероятно, копирование контекста с помощью avcodec_copy_context
недостаточно... Любое предложение? Как я могу дублировать контекст и полный статус декодера?
Или, есть ли другой способ декодирования моего потока, используя ссылки?
Спасибо!