puedo porque funcionar espaƱol error dev dejo compilar blog c++ windows visual-studio-2013 ms-media-foundation

porque - Problemas al capturar con Media Foundation y Windows 8 en C++



g++ dejo de funcionar windows (3)

Esta será mi primera pregunta en StackOverflow después de varios días buscando una explicación. Por favor, se amable conmigo por preguntar porque sé que mi problema es un poco extraño para ser un problema general.

Hice una aplicación de captura de video MF, basada en el ejemplo de Microsoft ''CaptureToFile''. Funcionó en Windows 7 x64. Actualicé a Visual Studio 2013 sin problemas. Surgieron problemas cuando intento poner todo el desarrollo en una máquina con Windows 8.1 x64.

La aplicación compila y ejecuta sin error, pero es IMPOSIBLE capturar muestras utilizando m_pReader-> ReadSample () en modo asíncrono; solo las dos primeras muestras llegan al método OnReadSample; y debe haber muestras de "control", porque la Muestra IMF es nula en todas ellas. Después de eso, la aplicación queda ''colgada'' en espera de datos.

Probé la muestra original de MFCaptureToFile con los mismos tristes resultados.

Por supuesto, creo que el hardware y el software son similares (la misma tarjeta de captura con la misma versión de controlador, ambas son PC de escritorio ...)

¿Conoces alguna posible razón para este comportamiento? ¡en Win7 todo está funcionando sin defectos! O al menos, si pudieras hablarme un poco sobre nuevos caminos para encontrar lo que está sucediendo

Gracias por adelantado

ACTUALIZACIÓN: hay otro "jugador" en el juego. Al examinar los hilos, veo que hay un hilo de trabajo en ''RTWorkQ.dll'', el contenedor de colas de trabajos en tiempo real, específico solo para Windows 8. Continuaré investigando. Mientras tanto, si tienes alguna idea, algo para compartir, estaré encantado de escucharte.

ACTUALIZACIÓN 2: Modifiqué el ejemplo MFCaptureToFile para obtener muestras de video de forma sincrónica, porque pensé que el problema podría deberse al comportamiento asincrónico; relacionado con las colas Debo decir que el problema persiste incluso con este cambio. La segunda vez que intenta leer una muestra, la aplicación queda ''colgada'' esperando una lectura que nunca llega.

ACTUALIZACIÓN 3: He intentado con la aplicación de ejemplo CaptureEngine que utiliza otra forma MF para capturar video (MFCaptureEngine). Construye y funciona sin problemas, pero no muestra ninguna imagen al iniciar la "vista previa" y no registra ningún archivo útil, solo no jugable.

ACTUALIZACIÓN 4: He instalado Visual Studio 2010 Ultimate en Windows 8 PRO. El ejemplo MFCaptureToFile falla nuevamente en la muestra. No puede leer una segunda muestra del capturador de fotogramas. Estoy empezando a pensar que puede haber una incompatibilidad entre la tarjeta de captura (Datapath VisionRGB-E1S) y Windows 8 PRO a pesar de que el controlador asegura que funciona bien en esta plataforma y el programa de prueba muestra imágenes. Mañana probaré la prueba con una cámara web USB externa.


Debe ser un problema del capturador de cuadros Datapath VisionRGB-E1S. Lo intenté con la nueva cámara web USB LifeCam Studio, y todo funcionó bien.

Dejaré para otro hilo futuro por qué este comportamiento no emparejado entre Windows 8 y Windows 7, pero podría ser algo relacionado con el acceso en modo de usuario ...


Finalmente, he descubierto la razón de este problema.

Con la versión de Windows 8.1, Microsoft ha presentado las Nuevas Interfaces AVStream para Windows 8.1. Hay un pequeño pero muy importante cambio en la estructura KS_FRAME_INFO , el nuevo miembro de FrameCompletionNumber.

Un número de secuencia de identificación para el cuadro en la cola completa. Este número se usa para verificar el orden de fotograma correcto. Cuando este valor es 0, el cuadro fue cancelado. Este miembro está disponible comenzando con Windows 8.1.

DirectShow no se preocupa por este número. Y a MediaFoundation le importa.

Entonces, no puedes simplemente arreglar eso en tu lado de modo de usuario. Los desarrolladores de fabricación deben lanzar una actualización. Por cierto, tengo dos webcams: Logitech C270 y Creative Live Socialize HD. Logitech admite Metro mientras que Creative no.

He actualizado con éxito mi controlador con solo unas pocas líneas de código (para configurar FrameCompletionNumber correctamente).

UPD. hilo similar http://www.osronline.com/showthread.cfm?link=255004


Tuve el mismo tipo de problema:

  • IMFSourceReader se obtuvo con éxito

  • reader->SetCurrentMediaType() no informó ningún error.

  • reader->ReadSample() fue exitoso.

entonces OnReadSample() se OnReadSample() solo una vez y el argumento 0x80070491

Para mí, el problema fue que modifiqué el subtipo de video IMFMediaType , y luego lo apliqué al lector como tipo de medio actual.