Subversion Repositories Kolibri OS

Rev

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