• Lunes 23 de Diciembre de 2024, 04:27

Autor Tema:  Problema Con Isamplegrabber  (Leído 1944 veces)

AiTdX

  • Nuevo Miembro
  • *
  • Mensajes: 18
    • Ver Perfil
Problema Con Isamplegrabber
« en: Martes 7 de Noviembre de 2006, 20:30 »
0
Uso ISampelGrabber para reproducir videos puesto que necesito realizar capturas. Funciona perfectamente con toda clase de archivos excepto con algunas .avi. Al realizar IMediaControl.Stop se queda colgado.

Así construyo el grafo y configuro el ISampleGrabber
Mi sospeche se halla en que el problema se halla al establecer caracteristicas de flujo
Código: Text
  1. //
  2. // Construimos el grafo de filtros
  3. //
  4. void ConstruirGrafoFiltros(Control controlVideo)
  5. {
  6. try
  7. {
  8. // get the interfaces needed
  9. gb = (IGraphBuilder)new FilterGraph();
  10. mc = (IMediaControl)gb;
  11. me = (IMediaEventEx)gb;
  12. mp = (IMediaPosition)gb;
  13.  
  14. me.SetNotifyWindow(controlVideo.Handle, WM_GRAPHNOTIFY, IntPtr.Zero);
  15.  
  16. // creamos el filtro ISampleGrabber y lo configuramos
  17. // usamos este filtro para llevar a cabo las capturas
  18. sb = (ISampleGrabber)new SampleGrabber();
  19. this.ConfigurarSampleGrabber(sb);
  20.  
  21. gb.AddFilter((IBaseFilter)sb, "SampleGrabber");
  22.  
  23. // usamos conexion inteligente para el resto
  24. gb.RenderFile(nomFic, null);
  25.  
  26. // establecemos algunas propiedades del video
  27. bv = (IBasicVideo)gb;
  28. bv.GetVideoSize(out ancVid, out altVid);
  29.  
  30. this.Propietario(controlVideo);
  31. this.ObtenerStride();
  32.  
  33. // run arrancamos el grafo
  34. mc.Run();
  35. }
  36. catch (Exception ex) { MessageBox.Show(ex.Message); }
  37. }
  38.  
  39. //
  40. // configuracion del SampleGrabber
  41. //
  42. void ConfigurarSampleGrabber(ISampleGrabber sampGrabber)
  43. {
  44. AMMediaType media;
  45.  
  46. // establecemos caracteristicas del flujo
  47. media = new AMMediaType();
  48. media.majorType = MediaType.Video;
  49. media.subType = MediaSubType.RGB24;
  50. media.formatType = FormatType.VideoInfo;
  51.  
  52. //media.formatType = FormatType.VideoInfo2;
  53. //media.formatType = FormatType.MpegVideo;
  54. //media.formatType = FormatType.Mpeg2Video;
  55. //FormatType.DvInfo
  56.  
  57. // asociamos caracteristicas a filtro
  58. sb.SetMediaType(media);
  59.  
  60. DsUtils.FreeAMMediaType(media);
  61. media = null;
  62.  
  63. // llamamos a BufferCB
  64. sb.SetCallback(this, 1);
  65. }
  66.  

Gracias por adelantado