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