Procesamiento de datos

[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

Análisis de datos multimedia

Si el filtro analiza los datos multimedia, no confíe en encabezados u otros datos autodescriptivos en el contenido. Por ejemplo, no confíe en los valores de tamaño que aparecen en fragmentos RIFF de AVI o paquetes MPEG. Entre los ejemplos comunes de este tipo de error se incluyen los siguientes:

  • Leyendo N bytes de datos, donde el valor de N procede del contenido, sin comprobar N con el tamaño real del búfer.
  • Saltar a un desplazamiento de bytes dentro de un búfer, sin comprobar que el desplazamiento se encuentra dentro del búfer.

Otra clase común de errores implica no validar las descripciones de formato que se encuentran en el contenido. Por ejemplo:

  • Una estructura BITMAPINFOHEADER puede ser seguida de una tabla de colores. La estructura BITMAPINFO se define como una estructura BITMAPINFOHEADER seguida de una matriz de valores RGBQUAD que componen la tabla de colores. El tamaño de la matriz viene determinado por el valor de biClrUsed. Nunca copie una tabla de colores en un BITMAPINFO sin comprobar primero el tamaño del búfer que se asignó para la estructura BITMAPINFO .
  • Una estructura WAVEFORMATEX puede tener información de formato adicional anexada a la estructura. El miembro cbSize especifica el tamaño de la información adicional.

Durante la conexión de patillas, un filtro debe comprobar que todas las estructuras de formato tienen un formato correcto y contienen valores razonables. Si no es así, rechace la conexión. En el código que valida la estructura de formato, tenga especial cuidado con respecto al desbordamiento aritmético. Por ejemplo, en un BITMAPINFOHEADER, el ancho y el alto son valores largos de 32 bits, pero el tamaño de la imagen (que es una función del producto de los dos) es solo un valor DWORD .

Si el formato de los datos del origen es mayor que el búfer asignado, no trunca los datos de origen para copiarlos en el búfer. Si lo hace, puede crear una estructura cuyo tamaño implícito sea mayor que su tamaño real. Por ejemplo, un encabezado de mapa de bits podría especificar una tabla de paletas que ya no existe. En su lugar, reasigna el búfer o simplemente produce un error en la conexión.

Errores durante el streaming

Cuando se ejecuta el grafo, si el filtro recibe contenido con formato incorrecto, debe finalizar la transmisión por secuencias. Haga lo siguiente:

Dar formato a los cambios

Existen varios mecanismos para que los filtros cambien los formatos de la secuencia media. Cada uno de ellos implica más de un paso, lo que crea el potencial de aceptaciones falsas. Si el filtro obtiene una solicitud para un cambio de formato dinámico, debe rechazar la solicitud o, de lo contrario, respetar el nuevo formato cuando llegue. De forma similar, nunca cambie los formatos a menos que el otro filtro acepte. Para obtener más información, vea Cambios de formato dinámico.