forked from enlightenment/efl
grr - i'm trying to debug why xine locks up on closing/stopping/deleting a
stream in elation but NOt in emotion when emotion_test shuts down. ok emotion_test: emotion_test dvd:// now once its played a bit of the dvd hit: q and it will quit destroy video objects then exit main loop and exit. now with elation: elation now put a dvd in the drive (or already have one) elation will detect this. now let it play a bit of the dvd, and hit "Escape" to eject the dvd (which will try delete thevideo object). elatiojn will get STUCK inside an emotion call whihc get stuckin the emotion_xine module call thsat gets stuck inside xine_stop(). now WHY. what is it about elation that triggers xine to go batty? SVN revision: 10910
This commit is contained in:
parent
7ed4bd13cd
commit
755168f03b
|
@ -132,6 +132,13 @@ static int
|
||||||
main_signal_exit(void *data, int ev_type, void *ev)
|
main_signal_exit(void *data, int ev_type, void *ev)
|
||||||
{
|
{
|
||||||
ecore_main_loop_quit();
|
ecore_main_loop_quit();
|
||||||
|
while (video_objs)
|
||||||
|
{
|
||||||
|
printf("del obj!\n");
|
||||||
|
evas_object_del(video_objs->data);
|
||||||
|
video_objs = evas_list_remove_list(video_objs, video_objs);
|
||||||
|
printf("done\n");
|
||||||
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -332,6 +339,17 @@ bg_key_down(void *data, Evas * e, Evas_Object * obj, void *event_info)
|
||||||
else
|
else
|
||||||
ecore_evas_borderless_set(ecore_evas, 0);
|
ecore_evas_borderless_set(ecore_evas, 0);
|
||||||
}
|
}
|
||||||
|
else if (!strcmp(ev->keyname, "q"))
|
||||||
|
{
|
||||||
|
ecore_main_loop_quit();
|
||||||
|
while (video_objs)
|
||||||
|
{
|
||||||
|
printf("del obj!\n");
|
||||||
|
evas_object_del(video_objs->data);
|
||||||
|
video_objs = evas_list_remove_list(video_objs, video_objs);
|
||||||
|
printf("done\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
printf("UNHANDLED: %s\n", ev->keyname);
|
printf("UNHANDLED: %s\n", ev->keyname);
|
||||||
|
|
|
@ -338,19 +338,29 @@ em_file_close(void *ef)
|
||||||
pthread_cond_broadcast(&(ev->get_pos_len_cond));
|
pthread_cond_broadcast(&(ev->get_pos_len_cond));
|
||||||
while (ev->seek_to);
|
while (ev->seek_to);
|
||||||
while (ev->get_poslen);
|
while (ev->get_poslen);
|
||||||
|
printf("EX pause...\n");
|
||||||
|
// xine_set_param(ev->stream, XINE_PARAM_SPEED, XINE_SPEED_PAUSE);
|
||||||
|
printf("EX stop\n");
|
||||||
|
xine_stop(ev->stream);
|
||||||
|
printf("EX close\n");
|
||||||
|
xine_close(ev->stream);
|
||||||
|
printf("EX dispose\n");
|
||||||
|
xine_dispose(ev->stream);
|
||||||
|
printf("EX dispose evq\n");
|
||||||
|
xine_event_dispose_queue(ev->queue);
|
||||||
|
printf("EX close video drv\n");
|
||||||
|
if (ev->video) xine_close_video_driver(decoder, ev->video);
|
||||||
|
printf("EX close audio drv\n");
|
||||||
|
if (ev->audio) xine_close_audio_driver(decoder, ev->audio);
|
||||||
|
printf("EX del timer\n");
|
||||||
|
if (ev->timer) ecore_timer_del(ev->timer);
|
||||||
|
printf("EX del fds\n");
|
||||||
ecore_main_fd_handler_del(ev->fd_handler);
|
ecore_main_fd_handler_del(ev->fd_handler);
|
||||||
close(ev->fd_write);
|
close(ev->fd_write);
|
||||||
close(ev->fd_read);
|
close(ev->fd_read);
|
||||||
ecore_main_fd_handler_del(ev->fd_ev_handler);
|
ecore_main_fd_handler_del(ev->fd_ev_handler);
|
||||||
close(ev->fd_ev_write);
|
close(ev->fd_ev_write);
|
||||||
close(ev->fd_ev_read);
|
close(ev->fd_ev_read);
|
||||||
xine_stop(ev->stream);
|
|
||||||
xine_close(ev->stream);
|
|
||||||
xine_dispose(ev->stream);
|
|
||||||
xine_event_dispose_queue(ev->queue);
|
|
||||||
if (ev->video) xine_close_video_driver(decoder, ev->video);
|
|
||||||
if (ev->audio) xine_close_audio_driver(decoder, ev->audio);
|
|
||||||
if (ev->timer) ecore_timer_del(ev->timer);
|
|
||||||
free(ev);
|
free(ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -123,6 +123,7 @@ _emotion_class_init(xine_t *xine, void *visual)
|
||||||
cl->config = xine->config;
|
cl->config = xine->config;
|
||||||
cl->xine = xine;
|
cl->xine = xine;
|
||||||
|
|
||||||
|
printf("VO class init\n");
|
||||||
return cl;
|
return cl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,6 +134,7 @@ _emotion_class_dispose(video_driver_class_t *driver_class)
|
||||||
|
|
||||||
cl = (Emotion_Class *)driver_class;
|
cl = (Emotion_Class *)driver_class;
|
||||||
free(cl);
|
free(cl);
|
||||||
|
printf("VO class dispose\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
|
@ -183,6 +185,7 @@ _emotion_open(video_driver_class_t *driver_class, const void *visual)
|
||||||
dv->vo_driver.dispose = _emotion_dispose;
|
dv->vo_driver.dispose = _emotion_dispose;
|
||||||
dv->vo_driver.redraw_needed = _emotion_redraw;
|
dv->vo_driver.redraw_needed = _emotion_redraw;
|
||||||
dv->ev = (Emotion_Xine_Video *)visual;
|
dv->ev = (Emotion_Xine_Video *)visual;
|
||||||
|
printf("VO open\n");
|
||||||
return &dv->vo_driver;
|
return &dv->vo_driver;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,6 +197,7 @@ _emotion_dispose(vo_driver_t *vo_driver)
|
||||||
dv = (Emotion_Driver *)vo_driver;
|
dv = (Emotion_Driver *)vo_driver;
|
||||||
// printf("emotion: _emotion_dispose()\n");
|
// printf("emotion: _emotion_dispose()\n");
|
||||||
free(dv);
|
free(dv);
|
||||||
|
printf("VO dispose\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
|
@ -319,6 +323,7 @@ _emotion_frame_alloc(vo_driver_t *vo_driver)
|
||||||
fr->vo_frame.dispose = _emotion_frame_dispose;
|
fr->vo_frame.dispose = _emotion_frame_dispose;
|
||||||
fr->vo_frame.driver = vo_driver;
|
fr->vo_frame.driver = vo_driver;
|
||||||
|
|
||||||
|
printf("VO frame alloc\n");
|
||||||
return (vo_frame_t *)fr;
|
return (vo_frame_t *)fr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -328,6 +333,7 @@ _emotion_frame_dispose(vo_frame_t *vo_frame)
|
||||||
Emotion_Frame *fr;
|
Emotion_Frame *fr;
|
||||||
|
|
||||||
fr = (Emotion_Frame *)vo_frame;
|
fr = (Emotion_Frame *)vo_frame;
|
||||||
|
printf("VO frame dispose\n");
|
||||||
// printf("emotion: _emotion_frame_dispose()\n");
|
// printf("emotion: _emotion_frame_dispose()\n");
|
||||||
_emotion_frame_data_free(fr);
|
_emotion_frame_data_free(fr);
|
||||||
free(fr);
|
free(fr);
|
||||||
|
|
Loading…
Reference in New Issue