Subversion Repositories Kolibri OS

Rev

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

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