Directdraw: поворот видео потока - PullRequest
       11

Directdraw: поворот видео потока

1 голос
/ 18 февраля 2010

Задача

Windows Mobile / Directdraw: поворот видео потока

Предварительный просмотр видео работает, все, что мне сейчас нужно, это способ поворота изображения. Я думаю, что единственный способ справиться с этим - написать собственный фильтр на основе CTransformFilter, который будет вращать изображение с камеры. Если вы можете помочь мне решить эту проблему, например, помогая мне разработать этот фильтр с моими ограниченными знаниями DirectDraw, вы получаете награду.

Справочная информация / Предыдущий вопрос

В настоящее время я разрабатываю приложение для мобильного устройства (HTC HD2, Windows Mobile 6). Одна из вещей, которую должна сделать программа, - делать снимки с помощью встроенной камеры. Ранее я делал это с помощью CameraCaptureDialog, предлагаемого Windows Mobile 6 SDK, но наш клиент хочет более удобное решение.

Идея состоит в том, чтобы предварительно просмотреть видеопоток камеры в элементе управления и сделать снимок с высоким разрешением (> = 2 мегапикселя), используя функцию фотокамеры при нажатии на элемент управления. Мы провели некоторое исследование по этой теме и выяснили, что наилучшим способом достижения этого является использование Direct Draw.

Недостатки в том, что я никогда не использовал какой-либо собственный Windows API и что мой C ++ довольно плохой. В дополнение к этому я где-то читал, что поддержка Direct Draw в телефонах HTC особенно плоха, и вам придется использовать недокументированные вызовы из собственных библиотек HTC, чтобы делать высококачественные снимки.

Хорошей новостью является то, что компания предложила нам разработать элемент управления, отвечающий указанным выше спецификациям. По их оценкам, это займет у них около 10 дней, что приведет к дискуссии, если мы сможем самостоятельно разработать этот контроль в разумные сроки.

Теперь моя работа - исследовать, какая альтернатива лучше. Само собой разумеется, что слишком мало времени для изучения всей архитектуры и разработки демо-версии, что приводит меня к следующим вопросам:

Вопросы больше не актуальны!

  • Кто-нибудь из вас имеет опыт работы с подобными проектами? Каковы ваши рекомендации?
  • Есть ли хороший пример исходного кода Direct Draw, который касается предварительного просмотра видео и захвата изображения?

Ответы [ 2 ]

2 голосов
/ 01 марта 2010

Хорошо, если вы посмотрите на пример EZRGB24, вы получите основы простого фильтра видеопреобразования.

Есть 2 вещи, которые нужно сделать с образцом, чтобы он сделал то, что вы хотите.

1) Вам нужно скопировать x, y в y, x.
2) Вы должны указать сэмплу носителя, что сэмпл теперь имеет высоту x ширину, а не ширину x высоту.

Имейте в виду, что конечное изображение будет иметь точно такое же количество пикселей.

Решить 1 относительно просто. Вы можете рассчитать положение пикселя, выполнив «x + (y * Width)». Таким образом, вы проходите через все x и y таким образом, рассчитываете положение и затем записываете его в «y + (x * Height)». Это будет транспонировать изображение. Конечно, без шага 2 это будет выглядеть совершенно неправильно.

Для решения 2 вам нужно получить AM_MEDIA_TYPE входного сэмпла. Затем вам нужно выяснить, что такое formatType (вероятно, FormatType_VideoInfo или FormatType_VideoInfo2). Таким образом, вы можете преобразовать член pbFormat AM_MEDIA_TYPE в VIDEOINFOHEADER или VIDEOINFOHEADER2 (в зависимости от FormatType). Теперь вам нужно установить VIDEOINFOHEADER [2] :: bmiHeader.biWidth и biHeight равными biHeight и biWidth (соответственно) образца входного мультимедиа. Все остальное должно быть таким же, как ввод AM_MEDIA_TYPE.

Надеюсь, это немного поможет.

1 голос
/ 19 февраля 2010

Этот вопрос поможет вам получить некоторые сведения о DirectDraw.Некоторое время назад я провел некоторое исследование по этому вопросу, и лучшее, что я смог найти, был этот блог post (также упомянутый в предыдущем вопросе).В посте представлено расширение образца CameraCapture в SDK.

Однако не стоит ожидать больших ожиданий.Похоже, что предварительный просмотр и сделанный снимок будут работать только в небольшом разрешении.Хотя DirectDraw описывает способ настройки разрешения, нет гарантии, что это будет правильно реализовано драйвером.

Итак, из моего опыта, то, что вы прочитали, верно.Единственный способ сделать это - использовать драйверы HTC.Итак, если вы не хотите проводить бесконечные дни в реверс-инжиниринге с сомнительным результатом, пусть кто-то другой сделает эту работу за вас.Если вы хотите попробовать, попробуйте xda-developers forum .

...