changeset 14246:474a40917f73

CONF_TYPE_AFMT similar to CONF_TYPE_IMGFMT
author alex
date Mon, 27 Dec 2004 17:32:54 +0000
parents 815f03b7cee5
children 7ea3c86f3295
files m_option.c m_option.h
diffstat 2 files changed, 91 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/m_option.c	Mon Dec 27 17:30:15 2004 +0000
+++ b/m_option.c	Mon Dec 27 17:32:54 2004 +0000
@@ -1041,6 +1041,95 @@
   NULL
 };
 
+#include "libaf/af_format.h"
+
+/* FIXME: snyc with af_format.h */
+static struct {
+  char* name;
+  unsigned int fmt;
+} mp_afmt_list[] = {
+  // SPECIAL
+  {"mulaw", AF_FORMAT_MU_LAW},
+  {"alaw", AF_FORMAT_A_LAW},
+  {"mpeg2", AF_FORMAT_MPEG2},
+  {"ac3", AF_FORMAT_AC3},
+  {"imaadpcm", AF_FORMAT_IMA_ADPCM},
+  // ORIDNARY
+  {"u8", AF_FORMAT_U8},
+  {"s8", AF_FORMAT_S8},
+  {"u16le", AF_FORMAT_U16_LE},
+  {"u16be", AF_FORMAT_U16_BE},
+  {"u16ne", AF_FORMAT_U16_NE},
+  {"s16le", AF_FORMAT_S16_LE},
+  {"s16be", AF_FORMAT_S16_BE},
+  {"s16ne", AF_FORMAT_S16_NE},
+  {"u24le", AF_FORMAT_U24_LE},
+  {"u24be", AF_FORMAT_U24_BE},
+  {"u24ne", AF_FORMAT_U24_NE},
+  {"s24le", AF_FORMAT_S24_LE},
+  {"s24be", AF_FORMAT_S24_BE},
+  {"s24ne", AF_FORMAT_S24_NE},
+  {"u32le", AF_FORMAT_U32_LE},
+  {"u32be", AF_FORMAT_U32_BE},
+  {"u32ne", AF_FORMAT_U32_NE},
+  {"s32le", AF_FORMAT_S32_LE},
+  {"s32be", AF_FORMAT_S32_BE},
+  {"s32ne", AF_FORMAT_S32_NE},
+  {"floatle", AF_FORMAT_FLOAT_LE},
+  {"floatbe", AF_FORMAT_FLOAT_BE},
+  {"floatne", AF_FORMAT_FLOAT_NE},
+  { NULL, 0 }
+};
+
+static int parse_afmt(m_option_t* opt,char *name, char *param, void* dst, int src) {
+  uint32_t fmt = 0;
+  int i;
+
+  if (param == NULL || strlen(param) == 0)
+    return M_OPT_MISSING_PARAM;
+
+  if(!strcmp(param,"help")) {
+    mp_msg(MSGT_CFGPARSER, MSGL_INFO, "Available formats:");
+    for(i = 0 ; mp_afmt_list[i].name ; i++)
+      mp_msg(MSGT_CFGPARSER, MSGL_INFO, " %s",mp_afmt_list[i].name);
+    mp_msg(MSGT_CFGPARSER, MSGL_INFO, "\n");
+    return M_OPT_EXIT;
+  }
+  
+  if (sscanf(param, "0x%x", &fmt) != 1)
+  {
+  for(i = 0 ; mp_afmt_list[i].name ; i++) {
+    if(!strcasecmp(param,mp_afmt_list[i].name)) {
+      fmt=mp_afmt_list[i].fmt;
+      break;
+    }
+  }
+  if(!mp_afmt_list[i].name) {
+    mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %s: unknown format name: '%s'\n",name,param);
+    return M_OPT_INVALID;
+  }
+  }
+
+  if(dst)
+    *((uint32_t*)dst) = fmt;
+
+  return 1;
+}
+
+m_option_type_t m_option_type_afmt = {
+  "Audio format",
+  "Please report any missing formats.",
+  sizeof(uint32_t),
+  0,
+  parse_afmt,
+  NULL,
+  copy_opt,
+  copy_opt,
+  NULL,
+  NULL
+};
+
+
 //// Objects (i.e. filters, etc) settings
 
 #include "m_struct.h"
--- a/m_option.h	Mon Dec 27 17:30:15 2004 +0000
+++ b/m_option.h	Mon Dec 27 17:32:54 2004 +0000
@@ -20,6 +20,7 @@
 extern m_option_type_t m_option_type_print_indirect;
 extern m_option_type_t m_option_type_subconfig;
 extern m_option_type_t m_option_type_imgfmt;
+extern m_option_type_t m_option_type_afmt;
 
 // Func based types 
 extern m_option_type_t m_option_type_func_full;
@@ -90,6 +91,7 @@
 #define CONF_TYPE_STRING_LIST	(&m_option_type_string_list)
 #define CONF_TYPE_POSITION	(&m_option_type_position)
 #define CONF_TYPE_IMGFMT	(&m_option_type_imgfmt)
+#define CONF_TYPE_AFMT		(&m_option_type_afmt)
 #define CONF_TYPE_SPAN		(&m_option_type_span)
 #define CONF_TYPE_OBJ_SETTINGS_LIST (&m_option_type_obj_settings_list)
 #define CONF_TYPE_OBJ_PRESETS	(&m_option_type_obj_presets)