Как я могу создать ПОЛНУЮ копию декодера?

Я пишу видеодекодер (используя 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 недостаточно ... Есть предложения? Как я могу продублировать контекст и полный статус декодера? Или есть ли другой способ декодировать мой поток с помощью ссылок? Спасибо!

15
задан Thanos Markou 27 April 2015 в 11:05
поделиться