Subversion Repositories Kolibri OS

Rev

Rev 6438 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4438 Serge 1
 
6117 serge 2
#include 
6133 serge 3
#include "list.h"
4
4438 Serge 5
 
6
#define BLACK_MAGIC_VIDEO
7
8
 
9
typedef unsigned int count_t;
10
11
 
12
typedef struct vstate vst_t;
6117 serge 13
4438 Serge 14
 
15
#define HAS_TOP         (1<<1)
16
#define HAS_RIGHT       (1<<2)
17
#define HAS_BOTTOM      (1<<3)
18
19
 
6121 serge 20
{
21
    struct list_head list;
6133 serge 22
    enum AVPixelFormat format;
6121 serge 23
    AVPicture     picture;
24
    planar_t*     planar;
6133 serge 25
    int           is_hw_pic;
26
    int           index;
27
    double        pts;
6121 serge 28
    double        pkt_pts;
6133 serge 29
    volatile int  ready;
6121 serge 30
}vframe_t;
31
32
 
4438 Serge 33
{
34
    vst_t     *vst;
6117 serge 35
    uint32_t   caps;
4438 Serge 36
    uint32_t   ctx_width;
37
    uint32_t   ctx_height;
38
    uint32_t   win_width;
39
    uint32_t   win_height;
40
41
 
42
    rect_t     rcvideo;
43
    rect_t     rcleft;
44
    rect_t     rctop;
45
    rect_t     rcright;
46
    rect_t     rcbottom;
47
48
 
49
    bitmap_t  *bitmap[4];
5372 serge 50
    bitmap_t  *last_bitmap;
4438 Serge 51
52
 
53
    int        target;
54
55
 
56
    enum{
57
      EMPTY, INIT }state;
58
    enum win_state win_state;
59
60
 
6133 serge 61
};
4438 Serge 62
63
 
64
{
65
    CLOSED = 0,
66
    PREPARE,
67
    STOP,
68
    PAUSE,
69
    PLAY,
70
    REWIND,
71
    PLAY_2_STOP,
72
    PLAY_2_PAUSE,
73
    PAUSE_2_PLAY,
74
    REWIND_2_PLAY,
75
};
76
77
 
78
#define ID_STOP             101
79
#define ID_PROGRESS         102
80
#define ID_VOL_LEVEL        103
81
#define ID_VOL_CTRL         104
82
83
 
84
{
85
    mutex_t lock;
5603 serge 86
    char    *buffer;
87
    int     count;
88
}astream_t;
4438 Serge 89
90
 
91
{
92
  unsigned int  code;
93
  unsigned int  sender;
94
  unsigned int  stream;
95
  unsigned int  offset;
96
  unsigned int  size;
97
  unsigned int  unused[2];
98
}SND_EVENT;
99
100
 
101
 
102
    AVPacketList *first_pkt;
103
    AVPacketList *last_pkt;
104
    int size;
105
    int count;
106
    mutex_t       lock;
6117 serge 107
} queue_t;
4438 Serge 108
109
 
110
int get_packet(queue_t *q, AVPacket *pkt);
111
112
 
6144 serge 113
{
114
    const char     *name;
115
    enum AVCodecID  codec_id;
116
    int             profile;
6658 serge 117
    enum AVPixelFormat pix_fmt;
6144 serge 118
    int             width;
119
    int             height;
120
    AVFrame        *Frame;
121
    vframe_t       *active_frame;
122
    vframe_t        vframes[16];
6658 serge 123
    int             nframes;
124
    int             is_hw:1;
6144 serge 125
    int             has_surfaces:1;
6658 serge 126
    int             frame_reorder:1;
6144 serge 127
    void          (*fini)(vst_t *vst);
6658 serge 128
};
6144 serge 129
130
 
6658 serge 131
struct decoder* init_va_decoder(vst_t *vst);
132
133
 
6117 serge 134
{
135
    AVFormatContext *fCtx;              /* format context           */
6136 serge 136
    AVCodecContext  *vCtx;              /* video decoder context    */
137
    AVCodecContext  *aCtx;              /* audio decoder context    */
138
    AVCodec         *vCodec;            /* video codec              */
139
    AVCodec         *aCodec;            /* audio codec              */
140
    char            *input_file;
141
    char            *input_name;
142
    int             vStream;            /* video stream index       */
143
    int             aStream;            /* audio stream index       */
144
    AVRational      video_time_base;
145
    double          audio_timer_base;
6144 serge 146
4438 Serge 147
 
6136 serge 148
    queue_t         q_audio;            /* audio packets queue      */
149
6117 serge 150
 
6136 serge 151
    mutex_t         decoder_lock;
6133 serge 152
6117 serge 153
 
6133 serge 154
    mutex_t         output_lock;
155
    struct list_head input_list;
156
    struct list_head output_list;
157
    struct list_head destructor_list;
6658 serge 158
6133 serge 159
 
6144 serge 160
    int             snd_format;
6301 serge 161
    volatile int    frames_count;
6136 serge 162
    unsigned int    has_sound:1;
6301 serge 163
    unsigned int    audio_timer_valid:1;
164
    unsigned int    blit_bitmap:1;      /* hardware RGBA blitter    */
165
    unsigned int    blit_texture:1;     /* hardware RGBA blit and scale */
166
    unsigned int    blit_planar:1;      /* hardbare YUV blit and scale */
167
};
6117 serge 168
169
 
170
 
5603 serge 171
#define AUDIO_THREAD    2
172
#define VIDEO_THREAD    4
173
174
 
6658 serge 175
extern astream_t astream;
4438 Serge 176
177
 
6117 serge 178
void destroy_render(render_t *render);
4438 Serge 179
int init_render(render_t *render, int width, int height);
180
void render_adjust_size(render_t *render, window_t *win);
181
void render_set_size(render_t *render, int width, int height);
182
void render_draw_client(render_t *render);
183
184
 
6118 serge 185
4438 Serge 186
 
6301 serge 187
int audio_thread(void *param);
4438 Serge 188
void set_audio_volume(int left, int right);
189
190
 
191
void flush_video(vst_t* vst);
6136 serge 192
4438 Serge 193
 
6144 serge 194
void fini_video_decoder(vst_t *vst);
195
void decoder(vst_t *vst);
6117 serge 196
int decode_video(vst_t* vst);
197
int decode_audio(AVCodecContext  *ctx, queue_t *qa);
4438 Serge 198
199
 
200
201
 
202
{
203
    __asm__ __volatile__ (
204
    "int $0x40"
205
    ::"a"(68),"b"(14),"c"(event));
206
}
207
208
 
6136 serge 209
{
210
    return (double)av_q2d(vst->fCtx->streams[vst->aStream]->time_base)*1000;
211
};
212
213
 
6144 serge 214
void va_create_planar(vst_t *vst, vframe_t *vframe);
6133 serge 215
6118 serge 216
 
4438 Serge 217
char *get_moviefile();
218
219
 
6144 serge 220
#define LEAVE()   printf("leave %s\n",__FUNCTION__)
221
#define FAIL()    printf("fail %s\n",__FUNCTION__)
222
223
 
6658 serge 224