Вертикально ориентированный поток H.264 показывает поврежденное видео - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть IP-камера наблюдения, которая ориентирована вертикально (режим коридора), и камера настроена для этой ориентации. Когда я декодирую SPS в ответе SDP, он правильно показывает размер кадра в виде ширины 1080 и высоты 1920. Мое программное обеспечение считывает видеопоток RTSP / RTP, а затем передает его в MFT-декодер Microsoft H.264 и отображает его через DX9. Мое программное обеспечение прекрасно работает с обычными горизонтальными видеопотоками, но когда я пробую его с вертикальными камерами, дисплей поврежден Вот скриншот того, как это выглядит. Одна возможность состоит в том, что мне нужно повернуть кадр, но кажется, что настройки камеры уже сделаны и размеры кадра в формате SPS, кажется, подтверждают это. Плюс, когда я смотрю видео в веб-интерфейсе камеры и VLC, оно отображается правильно. У кого-нибудь есть идеи, почему это происходит и как я могу это исправить? Спасибо.

enter image description here

1 Ответ

0 голосов
/ 27 апреля 2018

Эффект зависит от ширины видео, а не от ориентации. Кадровые буферы могут быть фактически больше (шире), чем кадры, и вы, возможно, игнорируете это на каком-то этапе вашей обработки. Видео имеет ширину 1080 пикселей, и видео буферы, в соответствии с требованиями выравнивания видеооборудования, могут быть, например, 1152 или 1536 пикселей в ширину. Вы должны копировать данные, принимая во внимание такое выравнивание, строка за строкой, в левый верхний угол большего буфера.

В вопросе нет кода или деталей, чтобы угадать, где именно возникает проблема. Это может быть шаг, например, для загрузки данных в текстуру. DirectX 9 и другие версии, DirectShow, Media Foundation - все API, так или иначе, поддерживают концепцию расширенных шагов, поскольку это типичные требования макета для данных в видеопамяти (также для обработки SIMD).

К вашему сведению, обсуждались еще несколько вопросов с аналогичным эффектом:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...