~ubuntu-dev/mplayer/ubuntu-feisty

« back to all changes in this revision

Viewing changes to input/input.c

  • Committer: Reinhard Tartler
  • Date: 2006-07-08 08:47:54 UTC
  • Revision ID: siretart@tauware.de-20060708084754-c3ff228cc9c2d8de
upgrade to pre8

Show diffs side-by-side

added added

removed removed

Lines of Context:
48
48
 
49
49
static mp_cmd_t mp_cmds[] = {
50
50
  { MP_CMD_SEEK, "seek", 1, { {MP_CMD_ARG_FLOAT,{0}}, {MP_CMD_ARG_INT,{0}}, {-1,{0}} } },
51
 
#ifdef USE_EDL
52
51
  { MP_CMD_EDL_MARK, "edl_mark", 0, { {-1,{0}} } },
53
 
#endif
54
 
  { MP_CMD_AUDIO_DELAY, "audio_delay", 1, { {MP_CMD_ARG_FLOAT,{0}}, {-1,{0}} } },
 
52
  { MP_CMD_AUDIO_DELAY, "audio_delay", 1, { {MP_CMD_ARG_FLOAT,{0}}, {MP_CMD_ARG_INT,{0}}, {-1,{0}} } },
55
53
  { MP_CMD_SPEED_INCR, "speed_incr", 1, { {MP_CMD_ARG_FLOAT,{0}}, {-1,{0}} } },
56
54
  { MP_CMD_SPEED_MULT, "speed_mult", 1, { {MP_CMD_ARG_FLOAT,{0}}, {-1,{0}} } },
57
55
  { MP_CMD_SPEED_SET, "speed_set", 1, { {MP_CMD_ARG_FLOAT,{0}}, {-1,{0}} } },
65
63
  { MP_CMD_SUB_DELAY, "sub_delay",1,  { {MP_CMD_ARG_FLOAT,{0}}, {MP_CMD_ARG_INT,{0}}, {-1,{0}} } },
66
64
  { MP_CMD_SUB_STEP, "sub_step",1,  { { MP_CMD_ARG_INT,{0} }, {MP_CMD_ARG_INT,{0}}, {-1,{0}} } },
67
65
  { MP_CMD_OSD, "osd",0, { {MP_CMD_ARG_INT,{-1}}, {-1,{0}} } },
68
 
  { MP_CMD_OSD_SHOW_TEXT, "osd_show_text", 1, { {MP_CMD_ARG_STRING, {0}}, {-1,{0}} } },
69
 
  { MP_CMD_VOLUME, "volume", 1, { { MP_CMD_ARG_INT,{0} }, {MP_CMD_ARG_INT,{0}}, {-1,{0}} } },
 
66
  { MP_CMD_OSD_SHOW_TEXT, "osd_show_text", 1, { {MP_CMD_ARG_STRING, {0}}, {MP_CMD_ARG_INT,{-1}}, {MP_CMD_ARG_INT,{0}}, {-1,{0}} } },
 
67
  { MP_CMD_OSD_SHOW_PROPERTY_TEXT, "osd_show_property_text",1, { {MP_CMD_ARG_STRING, {0}}, {MP_CMD_ARG_INT,{-1}}, {MP_CMD_ARG_INT,{0}}, {-1,{0}} } },
 
68
  { MP_CMD_VOLUME, "volume", 1, { { MP_CMD_ARG_FLOAT,{0} }, {MP_CMD_ARG_INT,{0}}, {-1,{0}} } },
70
69
  { MP_CMD_MIXER_USEMASTER, "use_master", 0, { {-1,{0}} } },
71
 
  { MP_CMD_MUTE, "mute", 0, { {-1,{0}} } },
 
70
  { MP_CMD_MUTE, "mute", 0, { {MP_CMD_ARG_INT,{-1}}, {-1,{0}} } },
72
71
  { MP_CMD_CONTRAST, "contrast",1,  { {MP_CMD_ARG_INT,{0}}, {MP_CMD_ARG_INT,{0}}, {-1,{0}} } },
73
72
  { MP_CMD_GAMMA, "gamma", 1, { {MP_CMD_ARG_INT,{0}}, {MP_CMD_ARG_INT,{0}}, {-1,{0}} }  },
74
73
  { MP_CMD_BRIGHTNESS, "brightness",1,  { {MP_CMD_ARG_INT,{0}}, {MP_CMD_ARG_INT,{0}}, {-1,{0}} }  },
77
76
  { MP_CMD_FRAMEDROPPING, "frame_drop",0, { { MP_CMD_ARG_INT,{-1} }, {-1,{0}} } },
78
77
  { MP_CMD_SUB_POS, "sub_pos", 1, { {MP_CMD_ARG_INT,{0}}, {MP_CMD_ARG_INT,{0}}, {-1,{0}} } },
79
78
  { MP_CMD_SUB_ALIGNMENT, "sub_alignment",0, { {MP_CMD_ARG_INT,{-1}}, {-1,{0}} } },
80
 
  { MP_CMD_SUB_VISIBILITY, "sub_visibility", 0, { {-1,{0}} } },
 
79
  { MP_CMD_SUB_VISIBILITY, "sub_visibility", 0, { {MP_CMD_ARG_INT,{-1}}, {-1,{0}} } },
81
80
  { MP_CMD_SUB_LOAD, "sub_load", 1, { {MP_CMD_ARG_STRING,{0}}, {-1,{0}} } },
82
81
  { MP_CMD_SUB_REMOVE, "sub_remove", 0, { {MP_CMD_ARG_INT,{-1}}, {-1,{0}} } },
83
82
  { MP_CMD_SUB_SELECT, "vobsub_lang", 0, { { MP_CMD_ARG_INT,{-2} }, {-1,{0}} } }, // for compatibility
95
94
  { MP_CMD_TV_LAST_CHANNEL, "tv_last_channel", 0, { {-1,{0}} } },
96
95
  { MP_CMD_TV_SET_FREQ, "tv_set_freq", 1, { {MP_CMD_ARG_FLOAT,{0}}, {-1,{0}} } },
97
96
  { MP_CMD_TV_SET_NORM, "tv_set_norm", 1, { {MP_CMD_ARG_STRING,{0}}, {-1,{0}} } },
98
 
  { MP_CMD_TV_SET_BRIGHTNESS, "tv_set_brightness", 1,  { { MP_CMD_ARG_INT ,{0}}, {-1,{0}} }},
99
 
  { MP_CMD_TV_SET_CONTRAST, "tv_set_contrast", 1,  { { MP_CMD_ARG_INT ,{0}}, {-1,{0}} }},
100
 
  { MP_CMD_TV_SET_HUE, "tv_set_hue", 1,  { { MP_CMD_ARG_INT ,{0}}, {-1,{0}} }},
101
 
  { MP_CMD_TV_SET_SATURATION, "tv_set_saturation", 1,  { { MP_CMD_ARG_INT ,{0}}, {-1,{0}} }},
 
97
  { MP_CMD_TV_SET_BRIGHTNESS, "tv_set_brightness", 1,  { { MP_CMD_ARG_INT ,{0}}, { MP_CMD_ARG_INT,{1} }, {-1,{0}} }},
 
98
  { MP_CMD_TV_SET_CONTRAST, "tv_set_contrast", 1,  { { MP_CMD_ARG_INT ,{0}}, { MP_CMD_ARG_INT,{1} }, {-1,{0}} }},
 
99
  { MP_CMD_TV_SET_HUE, "tv_set_hue", 1,  { { MP_CMD_ARG_INT ,{0}}, { MP_CMD_ARG_INT,{1} }, {-1,{0}} }},
 
100
  { MP_CMD_TV_SET_SATURATION, "tv_set_saturation", 1,  { { MP_CMD_ARG_INT ,{0}}, { MP_CMD_ARG_INT,{1} }, {-1,{0}} }},
102
101
#endif
103
 
  { MP_CMD_SUB_FORCED_ONLY, "forced_subs_only",  0, { {-1,{0}} } },
 
102
  { MP_CMD_SUB_FORCED_ONLY, "forced_subs_only",  0, { {MP_CMD_ARG_INT,{-1}}, {-1,{0}} } },
104
103
#ifdef HAS_DVBIN_SUPPORT
105
104
  { MP_CMD_DVB_SET_CHANNEL, "dvb_set_channel", 2, { {MP_CMD_ARG_INT,{0}}, {MP_CMD_ARG_INT,{0}}, {-1,{0}}}},
106
105
#endif
107
106
  { MP_CMD_SWITCH_RATIO, "switch_ratio", 0, { {MP_CMD_ARG_FLOAT,{0}}, {-1,{0}} } },
108
 
  { MP_CMD_VO_FULLSCREEN, "vo_fullscreen", 0, { {-1,{0}} } },
109
 
  { MP_CMD_VO_ONTOP, "vo_ontop", 0, { {-1,{0}} } },
110
 
  { MP_CMD_VO_ROOTWIN, "vo_rootwin", 0, { {-1,{0}} } },
111
 
  { MP_CMD_VO_BORDER, "vo_border", 0, { {-1,{0}} } },
 
107
  { MP_CMD_VO_FULLSCREEN, "vo_fullscreen", 0, { {MP_CMD_ARG_INT,{-1}}, {-1,{0}} } },
 
108
  { MP_CMD_VO_ONTOP, "vo_ontop", 0, { {MP_CMD_ARG_INT,{-1}}, {-1,{0}} } },
 
109
  { MP_CMD_VO_ROOTWIN, "vo_rootwin", 0, { {MP_CMD_ARG_INT,{-1}}, {-1,{0}} } },
 
110
  { MP_CMD_VO_BORDER, "vo_border", 0, { {MP_CMD_ARG_INT,{-1}}, {-1,{0}} } },
112
111
  { MP_CMD_SCREENSHOT, "screenshot", 0, { {-1,{0}} } },
113
112
  { MP_CMD_PANSCAN, "panscan",1,  { {MP_CMD_ARG_FLOAT,{0}}, {MP_CMD_ARG_INT,{0}}, {-1,{0}} } },
114
113
  { MP_CMD_SWITCH_VSYNC, "switch_vsync", 0, { {MP_CMD_ARG_INT,{0}}, {-1,{0}} } },
144
143
  { MP_CMD_GET_VO_FULLSCREEN, "get_vo_fullscreen", 0, { {-1,{0}} } },
145
144
  { MP_CMD_GET_SUB_VISIBILITY, "get_sub_visibility", 0, { {-1,{0}} } },
146
145
  { MP_CMD_KEYDOWN_EVENTS, "key_down_event", 1, { {MP_CMD_ARG_INT,{0}}, {-1,{0}} } },
 
146
  { MP_CMD_SET_PROPERTY, "set_property", 2, { {MP_CMD_ARG_STRING, {0}},  {MP_CMD_ARG_STRING, {0}}, {-1,{0}} } },
 
147
  { MP_CMD_GET_PROPERTY, "get_property", 1, { {MP_CMD_ARG_STRING, {0}},  {-1,{0}} } },
147
148
  
148
149
  { 0, NULL, 0, {} }
149
150
};
302
303
  { {  KEY_DOWN, 0 }, "seek -60" },
303
304
  { {  KEY_PAGE_UP, 0 }, "seek 600" },
304
305
  { { KEY_PAGE_DOWN, 0 }, "seek -600" },
305
 
  { { '-', 0 }, "audio_delay 0.100" },
306
 
  { { '+', 0 }, "audio_delay -0.100" },
 
306
  { { '+', 0 }, "audio_delay 0.100" },
 
307
  { { '-', 0 }, "audio_delay -0.100" },
307
308
  { { '[', 0 }, "speed_mult 0.9091" },
308
309
  { { ']', 0 }, "speed_mult 1.1" },
309
310
  { { '{', 0 }, "speed_mult 0.5" },
311
312
  { { KEY_BACKSPACE, 0 }, "speed_set 1.0" },
312
313
  { { 'q', 0 }, "quit" },
313
314
  { { 'Q', 0 }, "quit" },
314
 
#ifndef HAVE_NEW_GUI
315
315
  { { KEY_ESC, 0 }, "quit" },
316
316
  { { 'p', 0 }, "pause" },
317
317
  { { 'P', 0 }, "pause" },
318
 
#endif
319
318
  { { ' ', 0 }, "pause" },
320
319
  { { '.', 0 }, "frame_step" },
321
320
  { { KEY_HOME, 0 }, "pt_up_step 1" },
322
321
  { { KEY_END, 0 }, "pt_up_step -1" },
323
322
  { { '>', 0 }, "pt_step 1" },
324
 
#ifndef HAVE_NEW_GUI
325
323
  { { KEY_ENTER, 0 }, "pt_step 1 1" },
326
 
#endif
327
324
  { { '<', 0 }, "pt_step -1" },
328
325
  { { KEY_INS, 0 }, "alt_src_step 1" },
329
326
  { { KEY_DEL, 0 }, "alt_src_step -1" },
330
327
  { { 'o', 0 }, "osd" },
331
328
  { { 'O', 0 }, "osd" },
 
329
  { { 'I', 0 }, "osd_show_property_text \"${filename}\"" },
332
330
  { { 'z', 0 }, "sub_delay -0.1" },
333
331
  { { 'x', 0 }, "sub_delay +0.1" },
334
332
  { { 'g', 0 }, "sub_step -1" },
356
354
  { { 'j', 0 }, "vobsub_lang" },
357
355
  { { 'F', 0 }, "forced_subs_only" },
358
356
  { { '#', 0 }, "switch_audio" },
359
 
#ifdef USE_EDL
360
357
  { { 'i', 0 }, "edl_mark" },
361
 
#endif
362
358
#ifdef USE_TV
363
359
  { { 'h', 0 }, "tv_step_channel 1" },
364
360
  { { 'k', 0 }, "tv_step_channel -1" },
365
361
  { { 'n', 0 }, "tv_step_norm" },
366
362
  { { 'u', 0 }, "tv_step_chanlist" },
367
363
#endif
368
 
#ifdef HAVE_NEW_GUI
369
 
  { { 'l', 0 }, "gui_loadfile" },
370
 
  { { 't', 0 }, "gui_loadsubtitle" },
371
 
  { { KEY_ENTER, 0 }, "gui_play" },
372
 
  { { KEY_ESC, 0 }, "gui_stop" },
373
 
  { { 'p', 0 }, "gui_playlist" },
374
 
  { { 'r', 0 }, "gui_preferences" },
375
 
  { { 'c', 0 }, "gui_skinbrowser" },
376
 
#endif
377
364
#ifdef HAVE_JOYSTICK
378
365
  { { JOY_AXIS0_PLUS, 0 }, "seek 10" },
379
366
  { { JOY_AXIS0_MINUS, 0 }, "seek -10" },
409
396
  { { 0 }, NULL }
410
397
};
411
398
 
 
399
 
 
400
#ifdef HAVE_NEW_GUI
 
401
static mp_cmd_bind_t gui_def_cmd_binds[] = {
 
402
 
 
403
  { { 'l', 0 }, "gui_loadfile" },
 
404
  { { 't', 0 }, "gui_loadsubtitle" },
 
405
  { { KEY_ENTER, 0 }, "gui_play" },
 
406
  { { KEY_ESC, 0 }, "gui_stop" },
 
407
  { { 'p', 0 }, "gui_playlist" },
 
408
  { { 'r', 0 }, "gui_preferences" },
 
409
  { { 'c', 0 }, "gui_skinbrowser" },
 
410
 
 
411
  { { 0 }, NULL }
 
412
};
 
413
#endif
 
414
 
412
415
#ifndef MP_MAX_KEY_FD
413
416
#define MP_MAX_KEY_FD 10
414
417
#endif
1378
1381
  memcpy(bind->input,keys,(MP_MAX_KEY_DOWN+1)*sizeof(int));
1379
1382
}
1380
1383
 
 
1384
void
 
1385
mp_input_add_binds(mp_cmd_bind_t* list) {
 
1386
  int i;
 
1387
  for(i = 0 ; list[i].cmd ; i++)
 
1388
    mp_input_bind_keys(list[i].input,list[i].cmd);
 
1389
}
1381
1390
 
1382
1391
static void
1383
1392
mp_input_free_binds(mp_cmd_bind_t* binds) {
1404
1413
  char *iter,*end;
1405
1414
  char buffer[BS_MAX];
1406
1415
  int n_binds = 0, keys[MP_MAX_KEY_DOWN+1] = { 0 };
1407
 
  mp_cmd_bind_t* binds = NULL;
1408
1416
 
1409
1417
  fd = open(file,O_RDONLY);
1410
1418
 
1423
1431
        if(errno == EINTR)
1424
1432
          continue;
1425
1433
        mp_msg(MSGT_INPUT,MSGL_ERR,MSGTR_INPUT_INPUT_ErrReadingInputConfig,file,strerror(errno));
1426
 
        mp_input_free_binds(binds);
1427
1434
        close(fd);
1428
1435
        return 0;
1429
1436
      } else if(r == 0) {
1436
1443
    // Empty buffer : return
1437
1444
    if(bs <= 1) {
1438
1445
      mp_msg(MSGT_INPUT,MSGL_V,"Input config file %s parsed: %d binds\n",file,n_binds);
1439
 
      if(binds)
1440
 
        cmd_binds = binds;
1441
1446
      close(fd);
1442
1447
      return 1;
1443
1448
    }
1483
1488
            mp_msg(MSGT_INPUT,MSGL_ERR,MSGTR_INPUT_INPUT_ErrUnfinishedBinding,iter);
1484
1489
          else
1485
1490
            mp_msg(MSGT_INPUT,MSGL_ERR,MSGTR_INPUT_INPUT_ErrBuffer2SmallForKeyName,iter);
1486
 
          mp_input_free_binds(binds);
1487
1491
          return 0;
1488
1492
        }
1489
1493
        memmove(buffer,iter,end-iter);
1496
1500
        name[end-iter] = '\0';
1497
1501
        if(! mp_input_get_input_from_name(name,keys)) {
1498
1502
          mp_msg(MSGT_INPUT,MSGL_ERR,MSGTR_INPUT_INPUT_ErrUnknownKey,name);
1499
 
          mp_input_free_binds(binds);
1500
1503
          close(fd);
1501
1504
          return 0;
1502
1505
        }
1526
1529
      if(end[0] == '\0' && ! (eof && ((end+1) - buffer) == bs)) {
1527
1530
        if(iter == buffer) {
1528
1531
          mp_msg(MSGT_INPUT,MSGL_ERR,MSGTR_INPUT_INPUT_ErrBuffer2SmallForCmd,buffer);
1529
 
          mp_input_free_binds(binds);
1530
1532
          close(fd);
1531
1533
          return 0;
1532
1534
        }
1559
1561
extern char *get_path(char *filename);
1560
1562
 
1561
1563
void
1562
 
mp_input_init(void) {
 
1564
mp_input_init(int use_gui) {
1563
1565
  char* file;
1564
1566
 
 
1567
#ifdef HAVE_NEW_GUI  
 
1568
  if(use_gui)
 
1569
    mp_input_add_binds(gui_def_cmd_binds);
 
1570
#endif
 
1571
  
1565
1572
  file = config_file[0] != '/' ? get_path(config_file) : config_file;
1566
1573
  if(!file)
1567
1574
    return;