diff options
Diffstat (limited to 'apps/plugins/mpegplayer/mpegplayer.c')
-rw-r--r-- | apps/plugins/mpegplayer/mpegplayer.c | 84 |
1 files changed, 8 insertions, 76 deletions
diff --git a/apps/plugins/mpegplayer/mpegplayer.c b/apps/plugins/mpegplayer/mpegplayer.c index 577d9c6512..be028c01f8 100644 --- a/apps/plugins/mpegplayer/mpegplayer.c +++ b/apps/plugins/mpegplayer/mpegplayer.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* | 1 | /* |
2 | * mpegplayer.c - based on mpeg2dec.c | 2 | * mpegplayer.c - based on mpeg2dec.c |
3 | * | 3 | * |
4 | * Copyright (C) 2000-2003 Michel Lespinasse <walken@zoy.org> | 4 | * Copyright (C) 2000-2003 Michel Lespinasse <walken@zoy.org> |
@@ -45,11 +45,8 @@ struct plugin_api* rb; | |||
45 | #define BUFFER_SIZE (MEM-6)*1024*1024 | 45 | #define BUFFER_SIZE (MEM-6)*1024*1024 |
46 | 46 | ||
47 | static mpeg2dec_t * mpeg2dec; | 47 | static mpeg2dec_t * mpeg2dec; |
48 | static vo_open_t * output_open = NULL; | ||
49 | static vo_instance_t * output; | ||
50 | static int total_offset = 0; | 48 | static int total_offset = 0; |
51 | 49 | ||
52 | extern vo_open_t vo_rockbox_open; | ||
53 | /* button definitions */ | 50 | /* button definitions */ |
54 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) | 51 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) |
55 | #define MPEG_STOP BUTTON_OFF | 52 | #define MPEG_STOP BUTTON_OFF |
@@ -106,7 +103,6 @@ static bool decode_mpeg2 (uint8_t * current, uint8_t * end) | |||
106 | { | 103 | { |
107 | const mpeg2_info_t * info; | 104 | const mpeg2_info_t * info; |
108 | mpeg2_state_t state; | 105 | mpeg2_state_t state; |
109 | vo_setup_result_t setup_result; | ||
110 | 106 | ||
111 | mpeg2_buffer (mpeg2dec, current, end); | 107 | mpeg2_buffer (mpeg2dec, current, end); |
112 | total_offset += end - current; | 108 | total_offset += end - current; |
@@ -121,70 +117,20 @@ static bool decode_mpeg2 (uint8_t * current, uint8_t * end) | |||
121 | case STATE_BUFFER: | 117 | case STATE_BUFFER: |
122 | return false; | 118 | return false; |
123 | case STATE_SEQUENCE: | 119 | case STATE_SEQUENCE: |
124 | /* might set nb fbuf, convert format, stride */ | 120 | vo_setup(info->sequence->width, |
125 | /* might set fbufs */ | 121 | info->sequence->height, |
126 | if (output->setup (output, info->sequence->width, | 122 | info->sequence->chroma_width, |
127 | info->sequence->height, | 123 | info->sequence->chroma_height); |
128 | info->sequence->chroma_width, | 124 | mpeg2_skip (mpeg2dec, false); |
129 | info->sequence->chroma_height, &setup_result)) { | ||
130 | //fprintf (stderr, "display setup failed\n"); | ||
131 | return false; | ||
132 | } | ||
133 | if (setup_result.convert && | ||
134 | mpeg2_convert (mpeg2dec, setup_result.convert, NULL)) { | ||
135 | //fprintf (stderr, "color conversion setup failed\n"); | ||
136 | return false; | ||
137 | } | ||
138 | if (output->set_fbuf) { | ||
139 | uint8_t * buf[3]; | ||
140 | void * id; | ||
141 | |||
142 | mpeg2_custom_fbuf (mpeg2dec, 1); | ||
143 | output->set_fbuf (output, buf, &id); | ||
144 | mpeg2_set_buf (mpeg2dec, buf, id); | ||
145 | output->set_fbuf (output, buf, &id); | ||
146 | mpeg2_set_buf (mpeg2dec, buf, id); | ||
147 | } else if (output->setup_fbuf) { | ||
148 | uint8_t * buf[3]; | ||
149 | void * id; | ||
150 | |||
151 | output->setup_fbuf (output, buf, &id); | ||
152 | mpeg2_set_buf (mpeg2dec, buf, id); | ||
153 | output->setup_fbuf (output, buf, &id); | ||
154 | mpeg2_set_buf (mpeg2dec, buf, id); | ||
155 | output->setup_fbuf (output, buf, &id); | ||
156 | mpeg2_set_buf (mpeg2dec, buf, id); | ||
157 | } | ||
158 | mpeg2_skip (mpeg2dec, (output->draw == NULL)); | ||
159 | break; | 125 | break; |
160 | case STATE_PICTURE: | 126 | case STATE_PICTURE: |
161 | /* might skip */ | ||
162 | /* might set fbuf */ | ||
163 | if (output->set_fbuf) { | ||
164 | uint8_t * buf[3]; | ||
165 | void * id; | ||
166 | |||
167 | output->set_fbuf (output, buf, &id); | ||
168 | mpeg2_set_buf (mpeg2dec, buf, id); | ||
169 | } | ||
170 | if (output->start_fbuf) | ||
171 | output->start_fbuf (output, info->current_fbuf->buf, | ||
172 | info->current_fbuf->id); | ||
173 | break; | 127 | break; |
174 | case STATE_SLICE: | 128 | case STATE_SLICE: |
175 | case STATE_END: | 129 | case STATE_END: |
176 | case STATE_INVALID_END: | 130 | case STATE_INVALID_END: |
177 | /* draw current picture */ | 131 | /* draw current picture */ |
178 | /* might free frame buffer */ | 132 | if (info->display_fbuf) |
179 | if (info->display_fbuf) { | 133 | vo_draw_frame(info->display_fbuf->buf); |
180 | if (output->draw) | ||
181 | output->draw (output, info->display_fbuf->buf, | ||
182 | info->display_fbuf->id); | ||
183 | //print_fps (0); | ||
184 | } | ||
185 | if (output->discard && info->discard_fbuf) | ||
186 | output->discard (output, info->discard_fbuf->buf, | ||
187 | info->discard_fbuf->id); | ||
188 | break; | 134 | break; |
189 | default: | 135 | default: |
190 | break; | 136 | break; |
@@ -256,20 +202,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
256 | return PLUGIN_ERROR; | 202 | return PLUGIN_ERROR; |
257 | } | 203 | } |
258 | 204 | ||
259 | output_open = vo_rockbox_open; | ||
260 | |||
261 | if (output_open == NULL) { | ||
262 | //fprintf (stderr, "output_open is NULL\n"); | ||
263 | return PLUGIN_ERROR; | ||
264 | } | ||
265 | |||
266 | output = output_open (); | ||
267 | |||
268 | if (output == NULL) { | ||
269 | //fprintf (stderr, "Can not open output\n"); | ||
270 | return PLUGIN_ERROR; | ||
271 | } | ||
272 | |||
273 | mpeg2dec = mpeg2_init (); | 205 | mpeg2dec = mpeg2_init (); |
274 | 206 | ||
275 | if (mpeg2dec == NULL) | 207 | if (mpeg2dec == NULL) |