[MPlayer-dev-eng] [PATCH] input.c: optimize mp_cmd list.

Reimar Döffinger Reimar.Doeffinger at gmx.de
Sat Feb 13 23:12:32 CET 2016


Reduce its size and encode strings directly
to avoid relocations.
---
 gui/interface.c  | 2 +-
 gui/ui/actions.c | 2 +-
 input/input.c    | 8 ++------
 input/input.h    | 4 ++--
 4 files changed, 6 insertions(+), 10 deletions(-)

diff --git a/gui/interface.c b/gui/interface.c
index 30a564f..3d98998 100644
--- a/gui/interface.c
+++ b/gui/interface.c
@@ -1262,7 +1262,7 @@ void mplayer(int what, float value, void *data)
 
         mp_cmd       = calloc(1, sizeof(*mp_cmd));
         mp_cmd->id   = MP_CMD_PANSCAN;
-        mp_cmd->name = strdup("panscan");
+        strcpy(mp_cmd->name, "panscan");
         mp_cmd->args[0].v.f = value;
         mp_cmd->args[1].v.i = 1;
         mp_input_queue_cmd(mp_cmd);
diff --git a/gui/ui/actions.c b/gui/ui/actions.c
index 4304817..2728986 100644
--- a/gui/ui/actions.c
+++ b/gui/ui/actions.c
@@ -578,7 +578,7 @@ void uiPause(void)
 
         if (cmd) {
             cmd->id   = MP_CMD_PAUSE;
-            cmd->name = strdup("pause");
+            strcpy(cmd->name, "pause");
             mp_input_queue_cmd(cmd);
         }
     } else
diff --git a/input/input.c b/input/input.c
index 4f80e68..1a52efe 100644
--- a/input/input.c
+++ b/input/input.c
@@ -212,7 +212,7 @@ static const mp_cmd_t mp_cmds[] = {
 
   { MP_CMD_GUI, "gui", 1, { {MP_CMD_ARG_STRING, {0}}, {-1,{0}} } },
 
-  { 0, NULL, 0, {} }
+  { 0, "", 0, {} }
 };
 
 /// The names of the keys as used in input.conf
@@ -831,7 +831,7 @@ mp_input_parse_cmd(char* str) {
 
   cmd = calloc(1, sizeof(mp_cmd_t));
   cmd->id = cmd_def->id;
-  cmd->name = strdup(cmd_def->name);
+  memcpy(cmd->name, cmd_def->name, sizeof(cmd->name));
   if (pausing == -1) {
     switch (cmd->id) {
       case MP_CMD_KEYDOWN_EVENTS:
@@ -1432,8 +1432,6 @@ mp_cmd_free(mp_cmd_t* cmd) {
 //#endif
   if ( !cmd ) return;
 
-  free(cmd->name);
-
   for(i=0; i < MP_CMD_MAX_ARGS && cmd->args[i].type != -1; i++) {
     if(cmd->args[i].type == MP_CMD_ARG_STRING)
       free(cmd->args[i].v.s);
@@ -1451,8 +1449,6 @@ mp_cmd_clone(mp_cmd_t* cmd) {
 
   ret = malloc(sizeof(mp_cmd_t));
   memcpy(ret,cmd,sizeof(mp_cmd_t));
-  if(cmd->name)
-    ret->name = strdup(cmd->name);
   for(i = 0;  i < MP_CMD_MAX_ARGS && cmd->args[i].type != -1; i++) {
     if(cmd->args[i].type == MP_CMD_ARG_STRING && cmd->args[i].v.s != NULL)
       ret->args[i].v.s = strdup(cmd->args[i].v.s);
diff --git a/input/input.h b/input/input.h
index e723618..3e1b463 100644
--- a/input/input.h
+++ b/input/input.h
@@ -174,7 +174,7 @@ typedef enum {
 #define MP_CMD_ARG_VOID 3
 
 #ifndef MP_CMD_MAX_ARGS
-#define MP_CMD_MAX_ARGS 10
+#define MP_CMD_MAX_ARGS 6
 #endif
 
 // Error codes for the drivers
@@ -215,7 +215,7 @@ typedef struct mp_cmd_arg {
 
 typedef struct mp_cmd {
   int id;
-  char* name;
+  char name[24];
   int nargs;
   mp_cmd_arg_t args[MP_CMD_MAX_ARGS];
   int pausing;
-- 
2.7.0



More information about the MPlayer-dev-eng mailing list