Subversion Repositories Kolibri OS

Rev

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