Misc stuff for beta 3
authorjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Mon, 11 Nov 2002 01:08:29 +0000 (01:08 +0000)
committerjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Mon, 11 Nov 2002 01:08:29 +0000 (01:08 +0000)
git-svn-id: http://svn.xiph.org/trunk/speex@4102 0101bb08-14d6-0310-b084-bc0e0c8e3800

configure.in
doc/manual.lyx
libspeex/modes.c
libspeex/modes.h
libspeex/nb_celp.c
libspeex/sb_celp.c
src/speexdec.1
src/speexdec.c
src/speexenc.1
src/speexenc.c

index bf11030..af5b086 100644 (file)
@@ -5,7 +5,7 @@ AC_INIT(libspeex/speex.h)
 SPEEX_MAJOR_VERSION=0
 SPEEX_MINOR_VERSION=99
 SPEEX_MICRO_VERSION=0
-SPEEX_VERSION=1.0beta3cvs
+SPEEX_VERSION=1.0beta3
 SPEEX_BINARY_AGE=0
 SPEEX_INTERFACE_AGE=0
 
index efc67dc..eaaee24 100644 (file)
@@ -191,6 +191,12 @@ Variable complexity
 \end_inset 
 
 
+\layout Itemize
+
+Ultra-wideband mode at 32 kHz (up to 48 kHz)
+\layout Itemize
+
+Intensity stereo encoding option
 \layout Section
 \pagebreak_top 
 Introduction to CELP Coding
@@ -3074,8 +3080,24 @@ The encoder takes the following options:
 (-w) Tell Speex to treat the input as wideband (16 kHz)
 \layout Description
 
+--ultra-wideband\SpecialChar ~
+(-u) Tell Speex to treat the input as 
+\begin_inset Quotes eld
+\end_inset 
+
+ultra-wideband
+\begin_inset Quotes erd
+\end_inset 
+
+ (32 kHz)
+\layout Description
+
 --quality\SpecialChar ~
-n Set the encoding quality (0-10)
+n Set the encoding quality (0-10), default is 3
+\layout Description
+
+--bitrate\SpecialChar ~
+n Encoding bit-rate (use bit-rate n or lower) 
 \layout Description
 
 --vbr Enable VBR (Variable Bit-Rate), disabled by default
@@ -3099,6 +3121,44 @@ n Set encoding speed/quality tradeoff.
 
 --version\SpecialChar ~
 (-v) Print version information
+\layout Subsubsection*
+
+Speex comments
+\layout Description
+
+--comment Add the given string as an extra comment.
+ This may be used multiple times.
+\layout Description
+
+--author Author of this track.
+\layout Description
+
+--title Title for this track.
+\layout Subsubsection*
+
+Raw input options
+\layout Description
+
+--rate\SpecialChar ~
+n Sampling rate for raw input
+\layout Description
+
+--stereo Consider raw input as stereo 
+\layout Description
+
+--le Raw input is little-endian 
+\layout Description
+
+--be Raw input is big-endian 
+\layout Description
+
+--8bit Raw input is 8-bit unsigned 
+\layout Description
+
+--16bit Raw input is 16-bit signed 
 \layout Subsection
 
 
@@ -3120,6 +3180,21 @@ The decoder takes the following options:
 --no-enh disable post-filter (default)
 \layout Description
 
+--force-nb Force decoding in narrowband 
+\layout Description
+
+--force-wb Force decoding in wideband 
+\layout Description
+
+--force-uwb Force decoding in ultra-wideband 
+\layout Description
+
+--mono Force decoding in mono 
+\layout Description
+
+--stereo Force decoding in stereo 
+\layout Description
+
 --packet-loss\SpecialChar ~
 n Simulate n % random packet loss
 \layout Description
@@ -3476,9 +3551,21 @@ SPEEX_SET_COMPLEXITY* Set the CPU resources allowed for the encoder
 SPEEX_GET_COMPLEXITY* Get the CPU resources allowed for the encoder
 \layout Description
 
+SPEEX_SET_BITRATE* Set the bit-rate to use to the closest value not exceeding
+ the parameter (integer in bps)
+\layout Description
+
 SPEEX_GET_BITRATE Get the current bit-rate in use (integer in bps)
 \layout Description
 
+SPEEX_SET_SAMPLING_RATE Set real sampling rate (is used to determine real
+ bit-rate)
+\layout Description
+
+SPEEX_GET_SAMPLING_RATE Get real sampling rate (is used to determine real
+ bit-rate)
+\layout Description
+
 * applies only to the encoder
 \layout Description
 
@@ -3878,7 +3965,7 @@ Transmit (8-bit) character to the other end
 
 \layout Standard
 
-reserved
+Intensity stereo information
 \end_inset 
 </cell>
 </row>
index 77ed227..3ff3c01 100644 (file)
@@ -319,7 +319,8 @@ static SpeexNBMode nb_mode = {
    0.0,    /*preemph*/
    {NULL, &nb_submode1, &nb_submode2, &nb_submode3, &nb_submode4, &nb_submode5, &nb_submode6, &nb_submode7,
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL},
-   5
+   5,
+   {0, 1, 2, 3, 3, 4, 4, 5, 5, 6, 7}
 };
 
 
@@ -443,7 +444,9 @@ static SpeexSBMode sb_wb_mode = {
    1.0001, /*lpc_floor*/
    0.0,    /*preemph*/
    {NULL, &wb_submode1, &wb_submode2, &wb_submode3, &wb_submode4, NULL, NULL, NULL},
-   3
+   3,
+   {0, 1, 2, 3, 4, 5, 5, 6, 6, 7, 7},
+   {0, 1, 1, 1, 1, 1, 2, 2, 3, 3, 4}
 };
 
 
@@ -482,7 +485,9 @@ static SpeexSBMode sb_uwb_mode = {
    1.0001, /*lpc_floor*/
    0.0,    /*preemph*/
    {NULL, &wb_submode1, NULL, NULL, NULL, NULL, NULL, NULL},
-   1
+   1,
+   {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
+   {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
 };
 
 
index 0404cc7..e10797a 100644 (file)
@@ -116,7 +116,7 @@ typedef struct SpeexNBMode {
 
    SpeexSubmode *submodes[NB_SUBMODES]; /**< Sub-mode data for the mode */
    int     defaultSubmode; /**< Default sub-mode to use when encoding */
-
+   int     quality_map[11]; /**< Mode corresponding to each quality setting */
 } SpeexNBMode;
 
 
@@ -135,6 +135,8 @@ typedef struct SpeexSBMode {
 
    SpeexSubmode *submodes[SB_SUBMODES]; /**< Sub-mode data for the mode */
    int     defaultSubmode; /**< Default sub-mode to use when encoding */
+   int     low_quality_map[11]; /**< Mode corresponding to each quality setting */
+   int     quality_map[11]; /**< Mode corresponding to each quality setting */
 
 } SpeexSBMode;
 
index 88de6fd..cee0c9c 100644 (file)
@@ -1252,6 +1252,7 @@ void nb_encoder_ctl(void *state, int request, void *ptr)
    case SPEEX_SET_QUALITY:
       {
          int quality = (*(int*)ptr);
+         /*
          if (quality<=0)
             st->submodeID = 0;
          else if (quality<=1)
@@ -1269,7 +1270,12 @@ void nb_encoder_ctl(void *state, int request, void *ptr)
          else if (quality<=10)
             st->submodeID = 7;
          else
-            fprintf(stderr, "Unknown nb_ctl quality: %d\n", quality);
+         fprintf(stderr, "Unknown nb_ctl quality: %d\n", quality);*/
+         if (quality < 0)
+            quality = 0;
+         if (quality > 10)
+            quality = 10;
+         st->submodeID = ((SpeexNBMode*)(st->mode->mode))->quality_map[quality];
       }
       break;
    case SPEEX_SET_COMPLEXITY:
@@ -1280,6 +1286,20 @@ void nb_encoder_ctl(void *state, int request, void *ptr)
    case SPEEX_GET_COMPLEXITY:
       (*(int*)ptr) = st->complexity;
       break;
+   case SPEEX_SET_BITRATE:
+      {
+         int i=10, rate, target;
+         target = (*(int*)ptr);
+         while (i>=1)
+         {
+            speex_encoder_ctl(st, SPEEX_SET_QUALITY, &i);
+            speex_encoder_ctl(st, SPEEX_GET_BITRATE, &rate);
+            if (rate <= target)
+               break;
+            i--;
+         }
+      }
+      break;
    case SPEEX_GET_BITRATE:
       if (st->submodes[st->submodeID])
          (*(int*)ptr) = st->sampling_rate*SUBMODE(bits_per_frame)/st->frameSize;
index e495fd6..7c2ecca 100644 (file)
@@ -924,6 +924,9 @@ void sb_encoder_ctl(void *state, int request, void *ptr)
    case SPEEX_SET_LOW_MODE:
       speex_encoder_ctl(st->st_low, SPEEX_SET_MODE, ptr);
       break;
+   case SPEEX_SET_MODE:
+      speex_encoder_ctl(st, SPEEX_SET_QUALITY, ptr);
+      break;
    case SPEEX_SET_VBR:
       speex_encoder_ctl(st->st_low, SPEEX_SET_VBR, ptr);
       break;
@@ -944,60 +947,13 @@ void sb_encoder_ctl(void *state, int request, void *ptr)
       {
          int nb_qual;
          int quality = (*(int*)ptr);
-         /*FIXME: Cleanup needed, should be a mode property*/
-         switch (quality)
-         {
-         case 0:
-            nb_qual=0;
-            st->submodeID = 0;
-            break;
-         case 1:
-            nb_qual=1;
-            st->submodeID = 1;
-            break;
-         case 2:
-            nb_qual=2;
-            st->submodeID = 1;
-            break;
-         case 3:
-            nb_qual=3;
-            st->submodeID = 1;
-            break;
-         case 4:
-            nb_qual=5;
-            st->submodeID = 1;
-            break;
-         case 5:
-            nb_qual=7;
-            st->submodeID = 1;
-            break;
-         case 6:
-            nb_qual=8;
-            st->submodeID = 2;
-            break;
-         case 7:
-            nb_qual=9;
-            st->submodeID = 2;
-            break;
-         case 8:
-            nb_qual=9;
-            st->submodeID = 3;
-            break;
-         case 9:
-            nb_qual=10;
-            st->submodeID = 3;
-            break;
-         case 10:
-            nb_qual=10;
-            st->submodeID = 4;
-            break;
-         default:
-            fprintf(stderr, "Unknown sb_ctl quality: %d\n", quality);
-         }
-         /*FIXME: This is a kludge*/
-         if (st->full_frame_size == 640)
-            st->submodeID = 1;
-         speex_encoder_ctl(st->st_low, SPEEX_SET_QUALITY, &nb_qual);
+         if (quality < 0)
+            quality = 0;
+         if (quality > 10)
+            quality = 10;
+         st->submodeID = ((SpeexSBMode*)(st->mode->mode))->quality_map[quality];
+         nb_qual = ((SpeexSBMode*)(st->mode->mode))->low_quality_map[quality];
+         speex_encoder_ctl(st->st_low, SPEEX_SET_MODE, &nb_qual);
       }
       break;
    case SPEEX_SET_COMPLEXITY:
@@ -1009,6 +965,20 @@ void sb_encoder_ctl(void *state, int request, void *ptr)
    case SPEEX_GET_COMPLEXITY:
       (*(int*)ptr) = st->complexity;
       break;
+   case SPEEX_SET_BITRATE:
+      {
+         int i=10, rate, target;
+         target = (*(int*)ptr);
+         while (i>=1)
+         {
+            speex_encoder_ctl(st, SPEEX_SET_QUALITY, &i);
+            speex_encoder_ctl(st, SPEEX_GET_BITRATE, &rate);
+            if (rate <= target)
+               break;
+            i--;
+         }
+      }
+      break;
    case SPEEX_GET_BITRATE:
       speex_encoder_ctl(st->st_low, request, ptr);
       if (st->submodes[st->submodeID])
index 86a1f8b..3b39c6d 100644 (file)
@@ -1,7 +1,7 @@
 .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.29.
-.TH SPEEXDEC "1" "November 2002" "speexdec (Speex decoder) version 1.0beta3-cvs (compiled Nov  9 2002)" "User Commands"
+.TH SPEEXDEC "1" "November 2002" "speexdec version 1.0beta3" "User Commands"
 .SH NAME
-speexdec \- manual page for speexdec (Speex decoder) version 1.0beta3-cvs (compiled Nov  9 2002)
+speexdec \- manual page for speexdec version 1.0beta3
 .SH SYNOPSIS
 .B speexdec
 [\fIoptions\fR] \fIinput_file.spx \fR[\fIoutput_file\fR]
index c8d2877..347dcb6 100644 (file)
@@ -221,6 +221,12 @@ void version()
    printf ("Copyright (C) 2002 Jean-Marc Valin\n");
 }
 
+void version_short()
+{
+   printf ("speexdec version " VERSION "\n");
+   printf ("Copyright (C) 2002 Jean-Marc Valin\n");
+}
+
 static void *process_header(ogg_packet *op, int enh_enabled, int *frame_size, int *rate, int *nframes, int forceMode, int *channels, SpeexStereoState *stereo)
 {
    void *st;
@@ -315,6 +321,7 @@ int main(int argc, char **argv)
    {
       {"help", no_argument, NULL, 0},
       {"version", no_argument, NULL, 0},
+      {"version-short", no_argument, NULL, 0},
       {"enh", no_argument, NULL, 0},
       {"no-enh", no_argument, NULL, 0},
       {"pf", no_argument, NULL, 0},
@@ -363,6 +370,10 @@ int main(int argc, char **argv)
          {
             version();
             exit(0);
+         } else if (strcmp(long_options[option_index].name,"version-short")==0)
+         {
+            version_short();
+            exit(0);
          } else if (strcmp(long_options[option_index].name,"enh")==0)
          {
             enh_enabled=1;
index f55c9fc..0dc69f3 100644 (file)
@@ -1,7 +1,7 @@
 .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.29.
-.TH SPEEXENC "1" "November 2002" "speexenc (Speex encoder) version 1.0beta3-cvs (compiled Nov  9 2002)" "User Commands"
+.TH SPEEXENC "1" "November 2002" "speexenc version 1.0beta3" "User Commands"
 .SH NAME
-speexenc \- manual page for speexenc (Speex encoder) version 1.0beta3-cvs (compiled Nov  9 2002)
+speexenc \- manual page for speexenc version 1.0beta3
 .SH SYNOPSIS
 .B speexenc
 [\fIoptions\fR] \fIinput_file output_file\fR
@@ -37,6 +37,9 @@ Wideband (16 kHz) input file
 \fB\-\-quality\fR n
 Encoding quality (0-10), default 3
 .TP
+\fB\-\-bitrate\fR n
+Encoding bit-rate (use bit-rate n or lower)
+.TP
 \fB\-\-vbr\fR
 Enable variable bit-rate (VBR)
 .TP
@@ -66,9 +69,12 @@ Version information
 Verbose mode (show bit-rate)
 .SS "Raw input options:"
 .TP
-\fB\-\-rate\fR
+\fB\-\-rate\fR n
 Sampling rate for raw input
 .TP
+\fB\-\-stereo\fR
+Consider raw input as stereo
+.TP
 \fB\-\-le\fR
 Raw input is little-endian
 .TP
@@ -80,9 +86,6 @@ Raw input is 8-bit unsigned
 .TP
 \fB\-\-16bit\fR
 Raw input is 16-bit signed
-.TP
-\fB\-\-stereo\fR
-Consider raw input as stereo
 .PP
 Default raw PCM input is 16-bit, little-endian, mono
 .PP
index 149d3d7..3d0a7fa 100644 (file)
@@ -116,6 +116,12 @@ void version()
    printf ("Copyright (C) 2002 Jean-Marc Valin\n");
 }
 
+void version_short()
+{
+   printf ("speexenc version " VERSION "\n");
+   printf ("Copyright (C) 2002 Jean-Marc Valin\n");
+}
+
 void usage()
 {
    printf ("Usage: speexenc [options] input_file output_file\n");
@@ -136,22 +142,24 @@ void usage()
    printf (" -w, --wideband     Wideband (16 kHz) input file\n"); 
    printf (" -u, --ultra-wideband \"Ultra-wideband\" (32 kHz) input file\n"); 
    printf (" --quality n        Encoding quality (0-10), default 3\n"); 
+   printf (" --bitrate n        Encoding bit-rate (use bit-rate n or lower)\n"); 
    printf (" --vbr              Enable variable bit-rate (VBR)\n"); 
    printf (" --comp n           Set encoding complexity (0-10), default 3\n"); 
    printf (" --nframes n        Number of frames per Ogg packet (1-10), default 1\n"); 
-   printf (" --comment          Add the given string as an extra comment. This may be\n                     used multiple times.\n");
+   printf (" --comment          Add the given string as an extra comment. This may be\n");
+   printf ("                     used multiple times.\n");
    printf (" --author           Author of this track.\n");
    printf (" --title            Title for this track.\n");
    printf (" -h, --help         This help\n"); 
    printf (" -v, --version      Version information\n"); 
    printf (" -V                 Verbose mode (show bit-rate)\n"); 
    printf ("Raw input options:\n");
-   printf (" --rate             Sampling rate for raw input\n"); 
+   printf (" --rate n           Sampling rate for raw input\n"); 
+   printf (" --stereo           Consider raw input as stereo\n"); 
    printf (" --le               Raw input is little-endian\n"); 
    printf (" --be               Raw input is big-endian\n"); 
    printf (" --8bit             Raw input is 8-bit unsigned\n"); 
    printf (" --16bit            Raw input is 16-bit signed\n"); 
-   printf (" --stereo           Consider raw input as stereo\n"); 
    printf ("Default raw PCM input is 16-bit, little-endian, mono\n"); 
    printf ("\n");
    printf ("More information is available from the Speex site: http://www.speex.org\n");
@@ -181,6 +189,7 @@ int main(int argc, char **argv)
       {"narrowband", no_argument, NULL, 0},
       {"vbr", no_argument, NULL, 0},
       {"quality", required_argument, NULL, 0},
+      {"bitrate", required_argument, NULL, 0},
       {"nframes", required_argument, NULL, 0},
       {"comp", required_argument, NULL, 0},
       {"help", no_argument, NULL, 0},
@@ -191,6 +200,7 @@ int main(int argc, char **argv)
       {"stereo", no_argument, NULL, 0},
       {"rate", required_argument, NULL, 0},
       {"version", no_argument, NULL, 0},
+      {"version-short", no_argument, NULL, 0},
       {"comment", required_argument, NULL, 0},
       {"author", required_argument, NULL, 0},
       {"title", required_argument, NULL, 0},
@@ -216,6 +226,7 @@ int main(int argc, char **argv)
    int comments_length;
    int close_in=0, close_out=0;
    int eos=0;
+   int bitrate=0;
 
    comment_init(&comments, &comments_length, vendor_string);
 
@@ -246,6 +257,9 @@ int main(int argc, char **argv)
          {
             quality = atoi (optarg);
             vbr_quality=atof(optarg);
+         } else if (strcmp(long_options[option_index].name,"bitrate")==0)
+         {
+            bitrate = atoi (optarg);
          } else if (strcmp(long_options[option_index].name,"nframes")==0)
          {
             nframes = atoi (optarg);
@@ -264,6 +278,10 @@ int main(int argc, char **argv)
          {
             version();
             exit(0);
+         } else if (strcmp(long_options[option_index].name,"version-short")==0)
+         {
+            version_short();
+            exit(0);
          } else if (strcmp(long_options[option_index].name,"le")==0)
          {
             lsb=1;
@@ -523,6 +541,12 @@ int main(int argc, char **argv)
       else
          speex_encoder_ctl(st, SPEEX_SET_QUALITY, &quality);
    }
+   if (bitrate)
+   {
+      if (quality >= 0 && vbr_enabled)
+         fprintf (stderr, "--bitrate option is overriding --quality\n");
+      speex_encoder_ctl(st, SPEEX_SET_BITRATE, &bitrate);
+   }
 
    speex_bits_init(&bits);