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