My favorites | Sign in
Project Home Downloads Wiki Issues Source
READ-ONLY: This project has been archived. For more information see this post.
Search
for
enjoy  
htpc basé sur les EFL, FFmpeg
a
Updated Jan 11, 2008 by samuel.r...@gmail.com

Introduction

Enjoy est un logiciel HTPC (Home Theater PC) modulaire basé sur FFmpeg, les EFL et OpenAL.

Fonctionnalités natives :

  • lecteur video (yc streaming rtp, rtsp)
  • lecteur audio (yc streaming rtp, rtsp)
  • lecteur images
  • navigation clavier/souris
  • configuration
    • raccourcis clavier
    • affichage ou non du curseur de la souris
    • modules (liste chargés, liste non chargés, config)
    • themes (liste, import, preview)
    • fonds d'écran (liste, import, preview; également ceux présent dans les thèmes)
  • apparence :
    • utilise les objets définis dans les thèmes e17 directement
    • n'importe quel objet Evas peut faire office de fond d'écran (bg e17, gradient, ...); possibilté d'ajouter d'autres types via des modules
  • en plein écran le curseur de la souris n'est pas affichés (quoique ...)
  • surveillance du materiel (HAL et/ou lmsensors)
  • actions système :
    • arret
    • reboot
    • suspend to disk
    • suspend to ram
  • Redimensionnement par défaut d'evas, avec ou sans smooth pour tous les objets evas de type image.

Il sera constitué de deux éléments principaux :

  • enjoy : l'exécutable contenant l'interface graphique basée sur edje et evas
  • libenjoy : la bibliothèque partagée utilisant FFmpeg et OpenAL
Ainsi que d'un certain nombre de modules gérés par libenjoy :
  • des modules permettant le redimensionnement (par défaut evas, swscale, scale2x, ...)
  • des modules de fonctionnalités (émulateur, lecture de dvd, jeux, ...)
  • ...

Détails

libenjoy

  • gestion de l'apparence (themes, fonds d'écrans et icones)
  • gestion des évènements
  • gestion des modules
  • un module peut surcharger des fonctionnalités internes

Modules

  • Les modules sont des bibliothèques partagées (shared libraries) chargées dynamiquement au cours de l'exécution.
  • Un module a un nom, une description, une catégorie, des options.
  • On pourra précisér à libenjoy
    • de charger un seul module pendant l'exécution du process
    • de charger une catégorie de modules pendant l'exécution du process
    Exemple : dans le cadre d'un media player, chargé uniquement les modules audio/video
  • les modules auront accès à tous les objets internes d'enjoy
  • Modules souhaités :
    • Devices :
      • télécommande (lirc)
      • joystick (calibrage)
      • écran lcd (LCDProc)
    • Drawing/filter
      • swscale (et ses différents filtres)
      • scale2x
      • hq2x, hq3x, hq4x
    • Fonctions
      • CD (lecture, gravure et rip)
      • DVD (lecture, gravure et rip)
      • Emulation (gb, gba, ds, nes, gg/ms, snes, md, ps, n64, ...)
      • Petits Jeux (Tétris, frozen bubble, pacman, ...)
      • Ports de jeux plus conséquents (TuxKart, Pingus, ...)
    • Apparence
      • modules de gestion de formats de themes différents (freevo, gtk, etk, ewl, ...)
      • modules de gestion de formats de fonds d'écrans différents (slideshow, ...)
  • Gestion des options :
  • /* 
     * Retourne la liste des options disponibles pour un module
     */
    Evas_List * enjoy_module_options_get (module);
    
    /*
     * Retourne la liste des valeurs possible pour une options
     * ou NULL si aucune valeur n'est définie (par exemple une option définissant 
     * un chemin d'accès à une ressource ne peut pas être définie lors  de l'écriture
     * du module).
     */
    Evas_List * enjoy_module_option_available_values_get (module, option);
    
    /*
     * Retourne la valeur actuelle d'une option d'un module
     */
    char * enjoy_module_option_value_get (module, option);
    
    /*
     * Met à jour la valeur d'une option d'un module
     */
    int enjoy_module_option_value_set (module, option, value);
  • Enjoy.h
  • #ifndef __ENJOY_H__
    #define __ENJOY_H__
    
    int enjoy_init (void);
    int enjoy_shutdown (void);
    
    Evas_Object * enjoy_object_add (Evas * e);
    int           enjoy_object_file_set (Evas_Object * o, const char * file);
    const char *  enjoy_object_file_get (Evas_Object * o);
    int           enjoy_object_play (Evas_Object * o);
    int           enjoy_object_stop (Evas_Object * o);
    int           enjoy_object_record (Evas_Object * o);
    int           enjoy_object_next (Evas_Object * o);
    int           enjoy_object_prev (Evas_Object * o);
    int           enjoy_object_forward (Evas_Object * o, int speed);
    int           enjoy_object_backward (Evas_Object * o, int speed);
    
    /* ... */
    
    /* Error management */
    void         enjoy_error_add (int error);
    int          enjoy_error_get (void);
    const char * enjoy_error_message_get (int error);
    
    void         enjoy_error_info_print (const char * msg, ...);
    void         enjoy_error_warn_print (const char * msg, ...);
    void         enjoy_error_fatal_print (const char * msg, ...);
    
    #endif /* __ENJOY_H__ */

enjoy

  • c'est l'exécutable
  • peut charger un module particulier

Le menu

  • Watching TV
  • Watching DVD
  • Listen to CD
  • Library
    • Videos
    • Music
    • Images
    • Game Boy
    • Master System
    • Megadrive
    • Super Nintendo
    • Playstation
    • Nintendo 64

ou

  • Video
  • DVD (uniquement si un DVD est dans le lecteur)
  • Music
  • CD (uniquement si un CD est dans le lecteur)
  • Game
    • Game Boy
    • ...
  • Settings
    • Apparence
      • Background
      • Theme
      • Icon Theme
    • Ecran
    • Joystick
    • Modules

Les modules DVD et CD seront chargés lorsqu'un DVD ou CD sera inséré dans le lecteur. La détection sera faite via HAL. Si un media est détecter :

  • afficher un message d'indication avec les Play, Rip, Open ... selon le type du media
  • charger le module adéquate
  • lancer l'action demander

Les options

  • -m : module à charger
  • -f : fichier à charger (s'utilise avec -m pour forcer le module sinon retrouve le module grace au type mime)
  • -t : theme
  • -b : fond d'écran (bg e17 ou image)
  • -r : raz de la configuration
  • -c : spéficie le fichier de configuration (fichier eet)
  • -g : résolution de la forme wxh (exemple : 800x600)
  • -w : mode fenetre ou pelin écran (window)
  • -e : engine (fb, x11, xrender, GL, sdl, ...)

FFmpeg

ffmpeg supporte les "protocols" suivants :

  • file://
  • pipe://
  • udp://
  • tcp://
  • rtp://
  • http://

protocols à ajouter :

  • cdda://
  • dvb://
  • dvd://
  • evfs://
  • mms://
  • rstp://
  • smb://
  • v4l://
  • vcd://
  • upnp://

Exemple

/* cdda.c */

#include <avformat.h>

static int cdda_open (URLContext * h, const char * filename, int flags)
{
    strstart (filename, "cdda:", &filename);

    /* on ouvre le device avec les flags voulus */

    return 0;
}

static int cdda_read (URLContext *h, unsigned char *buf, int size)
{
    int nb_octest_lus;


    return nb_octets_lus;
}

static int cdda_write (URLContext *h, unsigned char *buf, int size)
{
    int nb_octest_ecrits;


    return nb_octets_ecrits;
}

static offset_t cdda_seek(URLContext *h, offset_t pos, int whence)
{
    offset_t nv_pos;

    return nv_pos;
}

static int cdda_close(URLContext *h)
{

    return ;
}

URLProtocol cdda_protocol = {
    "cdda",
    cdda_open,
    cdda_read,
    cdda_write,
    cdda_seek,
    cdda_close,
};

/* init.c */

#include <avformat.h>

int init (void)
{
    register_protocol (&cdda_protocol);
    return 0;
}
Powered by Google Project Hosting