diff -Naur xine-ui-cvs-02-26-08.org/src/xitk/session.c xine-ui-cvs-02-26-08/src/xitk/session.c --- xine-ui-cvs-02-26-08.org/src/xitk/session.c 2008-01-16 09:36:08.000000000 -0700 +++ xine-ui-cvs-02-26-08/src/xitk/session.c 2008-03-14 21:46:27.000000000 -0600 @@ -354,6 +354,63 @@ send_ack(shdr); break; + case CMD_INTERLEAVE: + gui_toggle_interlaced(); + send_ack(shdr); + break; + + case CMD_ZOOM_RESET: + gui_reset_zoom(); + send_ack(shdr); + break; + + case CMD_ZOOM_IN: + gui_change_zoom(1,1); + send_ack(shdr); + break; + + case CMD_ZOOM_OUT: + gui_change_zoom(-1,-1); + send_ack(shdr); + break; + + case CMD_ZOOM: + { + int *zm = (int *)shdr->data; + gui_reset_zoom(); + gui_change_zoom(*zm,*zm); + send_ack(shdr); + } + break; + + case CMD_ZOOM_INFO: + { + uint32_t current_zoom = xine_get_param(gGui->stream, XINE_PARAM_VO_ZOOM_X); + send_packet(shdr->fd, CMD_ZOOM_INFO, ¤t_zoom, sizeof(current_zoom)); + send_ack(shdr); + } + break; + + case CMD_ASPECT: + { + int *asp = (int *)shdr->data; + gui_toggle_aspect(*asp); + send_ack(shdr); + } + break; + + case CMD_INTERLEAVE_INFO: + { + uint32_t current_interleave; + if(!gGui->deinterlace_enable) + current_interleave = 0; + else + current_interleave = 1; + send_packet(shdr->fd, CMD_INTERLEAVE_INFO, ¤t_interleave, sizeof(current_interleave)); + send_ack(shdr); + } + break; + case CMD_AUDIO_NEXT: gui_change_audio_channel(NULL, (void *) GUI_NEXT); send_ack(shdr); @@ -628,10 +685,10 @@ } int session_handle_subopt(char *suboptarg, int *session) { + int fullscreen, s, c, zoom, zoom_info, aspect, interleave_info; int playlist_first, playlist_last, playlist_clear, playlist_next, playlist_prev, playlist_stop_cont; int audio_next, audio_prev, spu_next, spu_prev; int volume, amp, loop, speed_status, time_status; - int fullscreen, s, c; uint32_t state; char *optstr; char **mrls = NULL; @@ -642,16 +699,18 @@ char *playlist_load = NULL; static char *const tokens[]= { /* Don't change order */ - "play", "slow2", "slow4", "pause", "fast2", - "fast4", "stop", "quit", "fullscreen", "eject", - "audio", "spu", "session", "mrl", "playlist", - "pl", "volume", "amp", "loop", "get_speed", - "get_time", + "play", "slow2", "slow4", "pause", "fast2", + "fast4", "stop", "quit", "fullscreen", "eject", + "interleave","zoom_reset","zoom_in", "zoom_out", "zoom", + "zoom_info", "aspect", "interleave_info", "audio", "spu", + "session", "mrl", "playlist", "pl", "volume", + "amp", "loop", "get_speed", "get_time", NULL }; - playlist_first = playlist_last = playlist_clear = playlist_next = playlist_prev = playlist_stop_cont = 0; fullscreen = 0; + zoom = zoom_info = aspect = interleave_info = 0; + playlist_first = playlist_last = playlist_clear = playlist_next = playlist_prev = playlist_stop_cont = 0; audio_next = audio_prev = spu_next = spu_prev = 0; volume = amp = -1; state = 0; @@ -672,11 +731,35 @@ case 7: case 8: case 9: + case 10: + case 11: + case 12: + case 13: state |= 0x80000000 >> c; break; + /* zoom */ + case 14: + zoom = strtol(optstr, &optstr, 10); + break; + + /* zoom info */ + case 15: + zoom_info = 1; + break; + + /* aspect */ + case 16: + aspect = strtol(optstr, &optstr, 10); + break; + + /* interleave info */ + case 17: + interleave_info = 1; + break; + /* audio */ - case 10: + case 18: if(!sanestrcasecmp(optstr, "next")) audio_next++; else if(!sanestrcasecmp(optstr, "prev")) @@ -684,7 +767,7 @@ break; /* spu */ - case 11: + case 19: if(!sanestrcasecmp(optstr, "next")) spu_next++; else if(!sanestrcasecmp(optstr, "prev")) @@ -692,13 +775,13 @@ break; /* session */ - case 12: + case 20: if((atoi(optstr)) >= 0) optsess = atoi(optstr); break; /* mrl */ - case 13: + case 21: mrls = (char **) realloc(mrls, sizeof(char *) * (num_mrls + 2)); mrls[num_mrls++] = strdup(optstr); @@ -706,8 +789,8 @@ break; /* playlist */ - case 14: - case 15: + case 22: + case 23: if(!sanestrcasecmp(optstr, "first")) playlist_first = 1; else if(!sanestrcasecmp(optstr, "last")) @@ -727,17 +810,17 @@ break; /* volume */ - case 16: + case 24: volume = strtol(optstr, &optstr, 10); break; /* amplification */ - case 17: + case 25: amp = strtol(optstr, &optstr, 10); break; /* loop */ - case 18: + case 26: if(!sanestrcasecmp(optstr, "none")) loop = PLAYLIST_LOOP_NO_LOOP; else if(!sanestrcasecmp(optstr, "loop")) @@ -751,11 +834,11 @@ break; /* speed status */ - case 19: + case 27: speed_status = 1; break; - case 20: + case 28: time_status = 1; if(!sanestrcasecmp(optstr, "p") || !sanestrcasecmp(optstr, "pos")) time_status = 2; @@ -808,16 +891,34 @@ } /* - * CMD_PLAY, CMD_SLOW_4, CMD_SLOW_2, CMD_PAUSE, CMD_FAST_2, - * CMD_FAST_4, CMD_STOP, CMD_FULLSCREEN, CMD_EJECT + * CMD_PLAY, CMD_SLOW_4, CMD_SLOW_2, CMD_PAUSE, CMD_FAST_2, + * CMD_FAST_4, CMD_STOP, CMD_FULLSCREEN, CMD_EJECT, CMD_INTERLEAVE, + * CMD_ZOOM_RESET, CMD_ZOOM_IN, CMD_ZOOM_OUT */ if(state) { - for(s = 0; s < 9; s++) { + for(s = 0; s < 15; s++) { if(((state << s) & 0x80000000) && ((s + 1) != CMD_QUIT)) remote_cmd(*session, (s + 1)); } } + if(zoom) + send_uint32(*session, CMD_ZOOM, (uint32_t) zoom); + + if(zoom_info) { + retval = get_uint32(*session, CMD_ZOOM_INFO); + retval = retval - 100; + fprintf(stdout, "%d\n", retval); + } + + if(aspect) + send_uint32(*session, CMD_ASPECT, (uint32_t) aspect); + + if(interleave_info) { + retval = get_uint32(*session, CMD_INTERLEAVE_INFO); + fprintf(stdout, "%d\n", retval); + } + while(audio_next) { remote_cmd(*session, CMD_AUDIO_NEXT); playlist_next--; diff -Naur xine-ui-cvs-02-26-08.org/src/xitk/session.h xine-ui-cvs-02-26-08/src/xitk/session.h --- xine-ui-cvs-02-26-08.org/src/xitk/session.h 2007-11-13 14:12:18.000000000 -0700 +++ xine-ui-cvs-02-26-08/src/xitk/session.h 2008-03-14 21:46:27.000000000 -0600 @@ -35,6 +35,14 @@ CMD_QUIT, CMD_FULLSCREEN, CMD_EJECT, + CMD_INTERLEAVE, + CMD_ZOOM_RESET, + CMD_ZOOM_IN, + CMD_ZOOM_OUT, + CMD_ZOOM, + CMD_ZOOM_INFO, + CMD_ASPECT, + CMD_INTERLEAVE_INFO, CMD_AUDIO_NEXT, CMD_AUDIO_PREV, CMD_SPU_NEXT,