Directdraw: fluxo de vídeo Girar

votos
1

Problema

Windows Mobile / Directdraw: fluxo de vídeo Girar

A visualização de vídeo está funcionando, tudo que eu preciso agora é uma maneira de girar a imagem. Acho que a única maneira de lidar com isso é escrever um filtro personalizado baseado em CTransformFilterque vai rodar a imagem da câmera para você. Se você pode me ajudar a resolver este problema, por exemplo, por me ajudar a desenvolver este filtro com o meu conhecimento DirectDraw limitado, a recompensa é sua.

Background / pergunta anterior

Atualmente estou desenvolvendo uma aplicação para um dispositivo móvel (HTC HD2, o Windows Mobile 6). Uma das coisas que o programa precisa fazer é tirar fotos usando a câmera embutida. Anteriormente eu fiz isso com o CameraCaptureDialogoferecido pelo Windows Mobile 6 SDK, mas o nosso cliente quer uma solução mais user-friendly.

A idéia é visualizar fluxo de vídeo da câmera em um controle e tirar uma foto de alta resolução (> = 2 megapixels) usando a função de foto da câmera, quando o controle é clicado. Nós fizemos algumas pesquisas sobre o assunto e descobri que a melhor maneira de alcançar este objetivo parece estar usando Direct Draw.

As desvantagens são que eu nunca utilizado qualquer janelas API nativa e que o meu C ++ é bastante ruim. Além disso eu li em algum lugar que o apoio Direct Draw de telefones HTC é particularidade ruim e você terá que usar bibliotecas HTC nativas indocumentados chama para tirar fotos de alta qualidade.

A boa notícia é que uma empresa ofereceu-nos a desenvolver um controle que atenda às especificações indicadas acima. Eles estimaram que levaria cerca de 10 dias, que levam à discussão se pudéssemos desenvolver esse controle a nós mesmos dentro de um período razoável de tempo.

Agora é o meu trabalho para pesquisar qual alternativa é melhor. Escusado será dizer que é muito menos tempo para estudar toda a arquitetura e desenvolver uma demo, que me levam às seguintes perguntas:

Perguntas não é mais relevante!

  • Será que algum de vocês tem experiência com projetos semelhantes? Quais são as suas recomendações?
  • Existe um bom exemplo de código fonte Direct Draw que lida com visualização de vídeo e captura de imagem?
Publicado 18/02/2010 em 16:17
fonte usuário
Em outras línguas...                            


2 respostas

votos
2

Bem, se você olhar para a amostra EZRGB24 de conseguir o básico de um vídeo simples filtro transformar.

Existem 2 coisas que você precisa fazer para a amostra para obtê-lo para fazer o que quiser.

1) Você precisa copiar x, y para y, x.
2) Você precisa dizer a amostra de mídia que a amostra é agora altura x largura em vez de largura x altura.

Tenha em mente que a imagem final terá exatamente o mesmo número de pixels.

Para resolver 1 é relativamente simples. Você pode calcular a posição de um pixel fazendo "x + (y * Largura)". Então você passar por cada x e y calcular a posição dessa forma e, em seguida, escrevê-lo com "y + (x * Altura)". Isto irá transpor a imagem. Claro, sem step2 este ficará completamente errado.

Para solucionar 2 que você precisa para obter o AM_MEDIA_TYPE da amostra de entrada. Então você precisa descobrir o que o formatType é (Provavelmente FormatType_VideoInfo ou FormatType_VideoInfo2). assim, você pode lançar o membro pbFormat de AM_MEDIA_TYPE, quer um VIDEOINFOHEADER ou um VIDEOINFOHEADER2 (Dependendo do formatType). É preciso agora definida VIDEOINFOHEADER [2] :: bmiHeader.biWidth e biHeight ao biHeight e biWidth (respectivamente) da amostra do meio de entrada. Tudo o resto deve ser o mesmo que o AM_MEDIA_TYPE entrada.

Espero que ajude um pouco.

Respondeu 01/03/2010 em 20:00
fonte usuário

votos
1

Esta questão vai ajudá-lo a obter alguns detalhes sobre DirectDraw. Eu fiz alguma pesquisa sobre este há algum tempo e o melhor que eu poderia encontrar era este blog pós (também mencionado na pergunta acima). O post apresenta uma extensão da amostra CameraCapture no SDK.

No entanto, não tenho grandes expectativas. Parece que a pré-visualização e a fotografia tirada só irá funcionar em pequena resolução. Embora DirectDraw faz descrever uma maneira de configurar a resolução, não há garantia de que isso vai ser devidamente implementado pelo condutor.

Então, da minha experiência que você leu é verdade. A única maneira de fazer isso é usar os drivers HTC. Então, se você não quer passar dias intermináveis em engenharia reversa para um resultado duvidoso, deixar alguém fazer o trabalho para você. Se você quiser dar-lhe um tiro, tente fórum xda-developers .

Respondeu 19/02/2010 em 13:16
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more