Thread: [Mplayerplug-in-cvs] mplayerplug-in/Source plugin-support.cpp,1.84,1.85 plugin-threads.cpp,1.193,1.1
Brought to you by:
kdekorte
From: Kevin D. <kde...@us...> - 2005-11-19 00:24:06
|
Update of /cvsroot/mplayerplug-in/mplayerplug-in/Source In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11779/Source Modified Files: plugin-support.cpp plugin-threads.cpp plugin.cpp Log Message: Fix crash and long delay on shutdown issue Index: plugin-threads.cpp =================================================================== RCS file: /cvsroot/mplayerplug-in/mplayerplug-in/Source/plugin-threads.cpp,v retrieving revision 1.193 retrieving revision 1.194 diff -C2 -d -r1.193 -r1.194 *** plugin-threads.cpp 17 Nov 2005 14:59:53 -0000 1.193 --- plugin-threads.cpp 19 Nov 2005 00:23:52 -0000 1.194 *************** *** 715,718 **** --- 715,720 ---- int length_request_count = 0; float lastmedialength = -1.0; + int lastmediapercent = -1; + int lastpercent = -1; #ifdef GTK_ENABLED int fsupdated = 0; *************** *** 743,746 **** --- 745,752 ---- pthread_mutex_unlock(&(local_td->instance->control_mutex)); pthread_cleanup_pop(0); + #ifdef GTK_ENABLED + g_idle_add(gtkgui_save_enable, local_td->instance); + // g_idle_add(gtkgui_refreshbuttonstate, local_td->instance); + #endif while (1) { *************** *** 762,766 **** pthread_testcancel(); #ifdef GTK_ENABLED ! g_idle_add(gtkgui_save_enable, local_td->instance); #endif --- 768,773 ---- pthread_testcancel(); #ifdef GTK_ENABLED ! // g_idle_add(gtkgui_save_enable, local_td->instance); ! // g_idle_add(gtkgui_refreshbuttonstate, local_td->instance); #endif *************** *** 779,783 **** do { pthread_testcancel(); ! c = fgetc(local_td->instance->player); if (c == EOF) { buffer[i] = '\0'; --- 786,794 ---- do { pthread_testcancel(); ! if (local_td->instance->cancelled == 0 && local_td->instance->player != NULL) { ! c = fgetc(local_td->instance->player); ! } else { ! c = EOF; ! } if (c == EOF) { buffer[i] = '\0'; *************** *** 829,832 **** --- 840,844 ---- if (strstr(eos, "Cache fill:") != NULL) { cf = strstr(eos, "Cache fill:"); + lastpercent = (int)cfpercent; i = sscanf(cf, "Cache fill: %lf %% (%ld bytes)", &cfpercent, &cfbytes); *************** *** 863,869 **** snprintf(local_td->instance->lastmessage, 1024, "%s", message); ! g_idle_add(gtkgui_message, local_td->instance); ! local_td->instance->percent = (cfpercent / 100.0); ! g_idle_add(gtkgui_progress, local_td->instance); #endif } --- 875,884 ---- snprintf(local_td->instance->lastmessage, 1024, "%s", message); ! ! local_td->instance->percent = (cfpercent / 100.0); ! if (lastpercent != cfpercent) { ! g_idle_add(gtkgui_message, local_td->instance); ! g_idle_add(gtkgui_progress, local_td->instance); ! } #endif } *************** *** 901,905 **** local_list->play_y; ! if (local_td->instance->player_window != 0) { local_td->instance->movie_height = local_list->play_y; --- 916,920 ---- local_list->play_y; ! if (local_td->instance->player_window != 0 && local_td->instance->movie_height != local_list->play_y) { local_td->instance->movie_height = local_list->play_y; *************** *** 918,924 **** } else { local_td->instance->panel_height = 16; ! local_td->instance->movie_height = local_list->play_y; ! local_td->instance->movie_width = local_list->play_x; ! if (local_td->instance->player_window != 0) { #ifdef GTK_ENABLED --- 933,939 ---- } else { local_td->instance->panel_height = 16; ! if (local_td->instance->player_window != 0 && local_td->instance->movie_height != local_list->play_y) { ! local_td->instance->movie_height = local_list->play_y; ! local_td->instance->movie_width = local_list->play_x; #ifdef GTK_ENABLED *************** *** 975,983 **** local_td->instance->mediaPos); if ((int) local_td->instance->mediaLength > 1) { local_td->instance->mediaPercent = (int) ((local_td->instance->mediaPos * 100) / local_td->instance->mediaLength); #ifdef GTK_ENABLED ! g_idle_add(gtkgui_drawMediaProgress, local_td->instance); #endif } --- 990,1002 ---- local_td->instance->mediaPos); if ((int) local_td->instance->mediaLength > 1) { + lastmediapercent = local_td->instance->mediaPercent; local_td->instance->mediaPercent = (int) ((local_td->instance->mediaPos * 100) / local_td->instance->mediaLength); #ifdef GTK_ENABLED ! if (lastmediapercent != local_td->instance->mediaPercent) { ! g_idle_add(gtkgui_drawMediaProgress, local_td->instance); ! g_idle_add(gtkgui_refreshbuttonstate, local_td->instance); ! } #endif } *************** *** 991,999 **** if (local_td->instance->mediaPercent == 0) { if ((int) local_td->instance->mediaLength > 1) local_td->instance->mediaPercent = (int) ((local_td->instance->mediaPos * 100) / local_td->instance->mediaLength); #ifdef GTK_ENABLED ! g_idle_add(gtkgui_drawMediaProgress, local_td->instance); #endif } --- 1010,1022 ---- if (local_td->instance->mediaPercent == 0) { if ((int) local_td->instance->mediaLength > 1) + lastmediapercent = local_td->instance->mediaPercent; local_td->instance->mediaPercent = (int) ((local_td->instance->mediaPos * 100) / local_td->instance->mediaLength); #ifdef GTK_ENABLED ! if (lastmediapercent != local_td->instance->mediaPercent) { ! g_idle_add(gtkgui_drawMediaProgress, local_td->instance); ! g_idle_add(gtkgui_refreshbuttonstate, local_td->instance); ! } #endif } *************** *** 1014,1018 **** local_td->instance->mediaTime); #ifdef GTK_ENABLED ! g_idle_add(gtkgui_draw, local_td->instance); #endif } else { --- 1037,1041 ---- local_td->instance->mediaTime); #ifdef GTK_ENABLED ! //g_idle_add(gtkgui_draw, local_td->instance); #endif } else { *************** *** 1038,1041 **** --- 1061,1065 ---- pthread_mutex_unlock(&(local_td->instance->control_mutex)); pthread_cleanup_pop(0); + pthread_testcancel(); if (local_td->instance->paused == 0) { pthread_cleanup_push((void (*)(void *)) *************** *** 1044,1048 **** control_mutex)); pthread_mutex_lock(&(local_td->instance->control_mutex)); - // sendCommand(local_td->instance, "get_percent_pos"); if ((int) local_td->instance->mediaLength > 1) sendCommand(local_td->instance, "get_time_pos"); --- 1068,1071 ---- *************** *** 1131,1145 **** pthread_testcancel(); - /* This is commented out because it seems to cause problems and not give any benefit - if (strstr(buffer, "Stream not seekable") != NULL) { - if (*maybeplaylist == 0) { - tryagain = TRYAGAIN_TRUE; - *maybeplaylist = 1; - } else - tryagain = TRYAGAIN_FALSE; - break; - } - */ - pthread_testcancel(); if (strstr(buffer, "Error while decoding") != NULL) { if (!isMms(local_url, local_td->instance->nomediacache)) { --- 1154,1157 ---- *************** *** 1271,1275 **** } ! if (strstr(buffer, "execv") != NULL) { if (DEBUG) printf --- 1283,1288 ---- } ! pthread_testcancel(); ! if (strstr(buffer, "execv") != NULL) { if (DEBUG) printf *************** *** 1306,1312 **** } */ - #ifdef GTK_ENABLED - g_idle_add(gtkgui_refreshbuttonstate, local_td->instance); - #endif assert(local_td->instance->player != NULL); --- 1319,1322 ---- Index: plugin-support.cpp =================================================================== RCS file: /cvsroot/mplayerplug-in/mplayerplug-in/Source/plugin-support.cpp,v retrieving revision 1.84 retrieving revision 1.85 diff -C2 -d -r1.84 -r1.85 *** plugin-support.cpp 22 Aug 2005 23:48:06 -0000 1.84 --- plugin-support.cpp 19 Nov 2005 00:23:52 -0000 1.85 *************** *** 490,494 **** count = 0; ! while (instance->player != NULL && count < 1000) { usleep(100); count++; --- 490,494 ---- count = 0; ! while (instance->player != NULL && count < 100) { usleep(100); count++; Index: plugin.cpp =================================================================== RCS file: /cvsroot/mplayerplug-in/mplayerplug-in/Source/plugin.cpp,v retrieving revision 1.256 retrieving revision 1.257 diff -C2 -d -r1.256 -r1.257 *** plugin.cpp 17 Nov 2005 14:37:35 -0000 1.256 --- plugin.cpp 19 Nov 2005 00:23:52 -0000 1.257 *************** *** 384,397 **** } sendCommand(this, "quit\n"); ! pthread_mutex_unlock(&control_mutex); pthread_cancel(player_thread); pthread_join(player_thread, NULL); js_state = JS_STATE_UNDEFINED; } } if (pid != 0) { ! // killmplayer(this); } --- 384,398 ---- } sendCommand(this, "quit\n"); ! cancelled = 1; pthread_mutex_unlock(&control_mutex); pthread_cancel(player_thread); pthread_join(player_thread, NULL); js_state = JS_STATE_UNDEFINED; + } } if (pid != 0) { ! killmplayer(this); } |