Subversion Repositories Kolibri OS

Rev

Rev 6118 | Rev 6133 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1.  
  2. #include <libsync.h>
  3. #include "pixlib3.h"
  4.  
  5. #define BLACK_MAGIC_SOUND
  6. #define BLACK_MAGIC_VIDEO
  7.  
  8. typedef unsigned int color_t;
  9. typedef unsigned int count_t;
  10.  
  11. typedef struct render  render_t;
  12. typedef struct vstate vst_t;
  13.  
  14. #define HAS_LEFT        (1<<0)
  15. #define HAS_TOP         (1<<1)
  16. #define HAS_RIGHT       (1<<2)
  17. #define HAS_BOTTOM      (1<<3)
  18.  
  19. typedef struct
  20. {
  21.     enum AVPixelFormat format;
  22.     AVPicture     picture;
  23.     int           planar;
  24.     double        pts;
  25.     volatile int  ready;
  26. }vframe_t;
  27.  
  28. struct render
  29. {
  30.     vst_t     *vst;
  31.     uint32_t   caps;
  32.     uint32_t   ctx_width;
  33.     uint32_t   ctx_height;
  34.     uint32_t   win_width;
  35.     uint32_t   win_height;
  36.  
  37.     rect_t     rc_client;
  38.     rect_t     rcvideo;
  39.     rect_t     rcleft;
  40.     rect_t     rctop;
  41.     rect_t     rcright;
  42.     rect_t     rcbottom;
  43.  
  44.     uint32_t   layout;
  45.     bitmap_t  *bitmap[4];
  46.     bitmap_t  *last_bitmap;
  47.  
  48.     uint32_t   ctx_format;
  49.     int        target;
  50.  
  51.     window_t   *win;
  52.     enum{
  53.       EMPTY, INIT }state;
  54.     enum win_state win_state;
  55.  
  56.     void (*draw)(render_t *render, AVPicture *picture);
  57. };
  58.  
  59. enum player_state
  60. {
  61.     CLOSED = 0,
  62.     PREPARE,
  63.     STOP,
  64.     PAUSE,
  65.     PLAY,
  66.     REWIND,
  67.     PLAY_2_STOP,
  68.     PLAY_2_PAUSE,
  69.     PAUSE_2_PLAY,
  70.     REWIND_2_PLAY,
  71. };
  72.  
  73. #define ID_PLAY             100
  74. #define ID_STOP             101
  75. #define ID_PROGRESS         102
  76. #define ID_VOL_LEVEL        103
  77. #define ID_VOL_CTRL         104
  78.  
  79. typedef struct
  80. {
  81.     mutex_t lock;
  82.     char    *buffer;
  83.     int     count;
  84. }astream_t;
  85.  
  86. typedef struct
  87. {
  88.   unsigned int  code;
  89.   unsigned int  sender;
  90.   unsigned int  stream;
  91.   unsigned int  offset;
  92.   unsigned int  size;
  93.   unsigned int  unused[2];
  94. }SND_EVENT;
  95.  
  96.  
  97. typedef struct {
  98.     AVPacketList *first_pkt;
  99.     AVPacketList *last_pkt;
  100.     int size;
  101.     int count;
  102.     mutex_t       lock;
  103. } queue_t;
  104.  
  105. int put_packet(queue_t *q, AVPacket *pkt);
  106. int get_packet(queue_t *q, AVPacket *pkt);
  107.  
  108. struct vstate
  109. {
  110.     AVFormatContext *fCtx;      /* format context           */
  111.     AVCodecContext  *vCtx;      /* video decoder context    */
  112.     AVCodecContext  *aCtx;      /* audio decoder context    */
  113.     AVCodec         *vCodec;    /* video codec              */
  114.     AVCodec         *aCodec;    /* audio codec              */
  115.     int             vStream;    /* video stream index       */
  116.     int             aStream;    /* audio stream index       */
  117.  
  118.     queue_t         q_video;    /* video packets queue      */
  119.     queue_t         q_audio;    /* audio packets queue      */
  120.  
  121.     mutex_t         gpu_lock;   /* gpu access lock. libdrm not yet thread safe :( */
  122.  
  123.     vframe_t        vframe[4];  /* decoder workset          */
  124.     int             vfx;        /* index of decoded frame   */
  125.     int             dfx;        /* index of renderd frame   */
  126.     void           *hwCtx;      /* hardware context         */
  127.     int             hwdec;      /* hardware decoder         */
  128. };
  129.  
  130.  
  131. #define DECODER_THREAD  1
  132. #define AUDIO_THREAD    2
  133. #define VIDEO_THREAD    4
  134.  
  135. extern int threads_running;
  136. extern astream_t astream;
  137. extern AVRational video_time_base;
  138.  
  139. render_t *create_render(vst_t *vst, window_t *win, uint32_t flags);
  140. void destroy_render(render_t *render);
  141. int init_render(render_t *render, int width, int height);
  142. void render_adjust_size(render_t *render, window_t *win);
  143. void render_set_size(render_t *render, int width, int height);
  144. void render_draw_client(render_t *render);
  145.  
  146. int fplay_init_context(vst_t *vst);
  147.  
  148. int init_audio(int format);
  149. int audio_thread(void *param);
  150. void set_audio_volume(int left, int right);
  151.  
  152. int init_video(vst_t* vst);
  153. int video_thread(void *param);
  154.  
  155. void decoder(vst_t *vst);
  156. int decode_video(vst_t* vst);
  157. int decode_audio(AVCodecContext  *ctx, queue_t *qa);
  158.  
  159. double get_master_clock(void);
  160.  
  161. static inline void GetNotify(void *event)
  162. {
  163.     __asm__ __volatile__ (
  164.     "int $0x40"
  165.     ::"a"(68),"b"(14),"c"(event));
  166. }
  167.  
  168. void va_convert_picture(vst_t *vst, int width, int height, AVPicture *pic);
  169.  
  170. int init_fontlib();
  171. char *get_moviefile();
  172.  
  173.