Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mumble-voip/speex.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjmvalin <jmvalin@0101bb08-14d6-0310-b084-bc0e0c8e3800>2002-03-27 06:40:32 +0300
committerjmvalin <jmvalin@0101bb08-14d6-0310-b084-bc0e0c8e3800>2002-03-27 06:40:32 +0300
commit05b7bed82809ce142dba07a00c77a584e9388dfe (patch)
treec9432751ca0fee55e45f686462e4c74c0ea62400
parent251630f15692164cd1d1c32620c807612ca5f419 (diff)
Don't fill the last byte in the frame before saving (saves a couple bits
per frame). git-svn-id: http://svn.xiph.org/trunk/speex@3191 0101bb08-14d6-0310-b084-bc0e0c8e3800
-rw-r--r--libspeex/bits.c15
-rw-r--r--libspeex/bits.h2
-rw-r--r--src/speexenc.c40
3 files changed, 48 insertions, 9 deletions
diff --git a/libspeex/bits.c b/libspeex/bits.c
index 42636d3..ab24c72 100644
--- a/libspeex/bits.c
+++ b/libspeex/bits.c
@@ -79,6 +79,21 @@ int frame_bits_write(FrameBits *bits, char *bytes, int max_len)
return max_len;
}
+int frame_bits_write_whole_bytes(FrameBits *bits, char *bytes, int max_len)
+{
+ int i;
+ if (max_len > ((bits->nbBits)>>3))
+ max_len = ((bits->nbBits)>>3);
+ for (i=0;i<max_len;i++)
+ bytes[i]=bits->bytes[i];
+
+ bits->bytes[0]=bits->bytes[max_len];
+ bits->bytePtr=0;
+ bits->nbBits-=((bits->nbBits)>>3)<<3;
+ return max_len;
+}
+
+
void frame_bits_pack(FrameBits *bits, int data, int nbBits)
{
unsigned int d=data;
diff --git a/libspeex/bits.h b/libspeex/bits.h
index c5ed0bf..259ddc3 100644
--- a/libspeex/bits.h
+++ b/libspeex/bits.h
@@ -43,6 +43,8 @@ void frame_bits_init_from(FrameBits *bits, char *bytes, int len);
int frame_bits_write(FrameBits *bits, char *bytes, int max_len);
+int frame_bits_write_whole_bytes(FrameBits *bits, char *bytes, int max_len);
+
void frame_bits_pack(FrameBits *bits, int data, int nbBits);
int frame_bits_unpack_signed(FrameBits *bits, int nbBits);
diff --git a/src/speexenc.c b/src/speexenc.c
index d83fac5..6a5ba5d 100644
--- a/src/speexenc.c
+++ b/src/speexenc.c
@@ -20,6 +20,7 @@
#include <unistd.h>
#include <getopt.h>
#include <stdlib.h>
+#include <string.h>
#include "modes.h"
#include "speex.h"
@@ -53,9 +54,10 @@ int main(int argc, char **argv)
short in[MAX_FRAME_SIZE];
float input[MAX_FRAME_SIZE];
int frame_size;
- SpeexMode *mode;
+ SpeexMode *mode=NULL;
EncState st;
FrameBits bits;
+ char cbits[MAX_FRAME_BYTES];
struct option long_options[] =
{
{"wideband", no_argument, NULL, 0},
@@ -115,7 +117,7 @@ int main(int argc, char **argv)
}
inFile=argv[optind];
outFile=argv[optind+1];
- printf ("input: %s\noutput: %s\n", inFile, outFile);
+
if (wideband && narrowband)
{
fprintf (stderr,"Cannot specify both wideband and narrowband at the same time\n");
@@ -128,25 +130,45 @@ int main(int argc, char **argv)
if (wideband)
mode=&mp_wb_mode;
- fin = fopen(inFile, "r");
- fout = fopen(outFile, "w");
+ if (strcmp(inFile, "-")==0)
+ fin=stdin;
+ else
+ {
+ fin = fopen(inFile, "r");
+ if (!fin)
+ {
+ perror(inFile);
+ exit(1);
+ }
+ }
+ if (strcmp(outFile,"-")==0)
+ fout=stdout;
+ else
+ {
+ fout = fopen(outFile, "w");
+ if (!fout)
+ {
+ perror(outFile);
+ exit(1);
+ }
+ }
encoder_init(&st, mode);
frame_size=mode->frameSize;
- while (!feof(fin))
+ while (1)
{
int i,nbBytes;
- char cbits[MAX_FRAME_BYTES];
fread(in, sizeof(short), frame_size, fin);
+ if (feof(fin))
+ break;
for (i=0;i<frame_size;i++)
input[i]=in[i];
- frame_bits_reset(&bits);
encode(&st, input, &bits);
- nbBytes = frame_bits_write(&bits, cbits, 200);
+ nbBytes = frame_bits_write_whole_bytes(&bits, cbits, 200);
fwrite(cbits, 1, nbBytes, fout);
}
-
+ frame_bits_write(&bits, cbits, 200);
encoder_destroy(&st);
exit(0);
return 1;