Autor Tema: Cancelar un proceso en Linux con Kill desde C++  (Leído 1219 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado tsk

  • PIC16
  • ***
  • Mensajes: 248
Re:Cancelar un proceso en Linux con Kill desde C++
« Respuesta #30 en: 28 de Febrero de 2018, 14:00:43 »
Parar la reproducción, es un decir, pero lo puedes implementar de la forma que más te convenga, por ejemplo, que a la hora de recibir una interrupción cambie la fuente de los datos. No se como está hecho tu código, pero puedes probar lo que te menciono.

También veo arriba que mencionaste el omxplayer, así que o lo estas usando como base o estás usando la API de OpenMAX para tu programa, si esto es cierto, entonces OpenMAX te permite cambiar de estados y responde a eventos, muy parecido a lo que te comentaba de las señales, si los usas lo más seguro es que no se quede colgada la GPU, porque para responder a un evento o señal y/o comando, estos pasan antes por un cola de eventos, los cuales son atendidos al momento que el sistema los pueda atender.

Por ejemplo puedes mandarle el comando para poner el sistema en el estado de espera, el cambio no va a ser momentáneo, sino que va a entrar a una cola a esperar a ser atendido. Lo mismo sucede con los eventos.

Por lo pronto no cuento con una Raspberry Pi para probar, por lo que no puede hacer las pruebas.

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3423
    • Pinballsp
Re:Cancelar un proceso en Linux con Kill desde C++
« Respuesta #31 en: 01 de Marzo de 2018, 00:58:21 »
 
Si, el programa echa mano de Openmax, pero la documentación que hay al respecto es muy confusa. Lo único que encontré es el libro "Raspberry Pi GPU Audio Video Programming", que no me aclara mucho porque prácticamente es una colección de fuentes.

La idea original, era editar el programa en C++ de ejemplo, que reproduce un video, para meter una función que lee constantemente varios expansores de puertos MCP23s17, y en función del estado de varias matrices de señales, lanzar videos distintos.

Si un video está en ejecución, y se detecta una señal para lanzar otro video, hay que parar ese, y lanzar el nuevo. El problema es que para hacer eso, tocando el fuente del reproductor, hay que hacerlo dentro del bucle que alimenta constantemente la GPU con datos del video a reproducir. Eso lo conseguí, pero siempre hay que dejar que el video se reproduzca al menos un par de segundos o la GPU se queda colgada.

Al ver todo esto de lanzar un programa externo al principal y poder cancelarlo, me parece mejor idea. Por ahora no tengo necesidad de interactuar con el video, este solo se reproduce o se cancela cuando se tenga que lanzar uno nuevo.

Por ahora prefiero dejar el programa reproductor original sin tocar, y simplemente llamarlo desde un programa principal mío, para cancelarlo con pkill y lanzar uno nuevo cuando sea necesario reproducir otro video.

Si que estuve mirando algo para mezclar texto con ese vídeo en tiempo de ejecución, es lo único que me interesaría para interactuar con el vídeo en curso. Las pruebas que hice funcionaron bastante bien con varios efectos de texto sobre el vídeo, pero es todo muy complejo y la documentación que hay se hace pesada de manejar.

También me gustaría reproducir uno o varios videos simultaneamente en ventanas, ahora sale a pantalla completa. Algo se cuenta en el libro al respecto, aún lo tengo que probar.

La posibilidad de lanzar el reproductor una sola vez desde un programa principal mío, e interactuar con este por medio de algún sistema de comunicación, todo esto de las "pipes", también se ve interesante. En el ejemplo que he puesto antes creando una especie de cola FIFO, creo que lo hacen así.




« Última modificación: 01 de Marzo de 2018, 01:09:55 por planeta9999 »