summaryrefslogtreecommitdiff
path: root/apps/plugins/mpegplayer/mpegplayer.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/mpegplayer/mpegplayer.c')
-rw-r--r--apps/plugins/mpegplayer/mpegplayer.c84
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
47static mpeg2dec_t * mpeg2dec; 47static mpeg2dec_t * mpeg2dec;
48static vo_open_t * output_open = NULL;
49static vo_instance_t * output;
50static int total_offset = 0; 48static int total_offset = 0;
51 49
52extern 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)