mirror of
https://github.com/xiph/opus.git
synced 2025-06-05 15:03:39 +00:00
Minor enhancements to celtenc to avoid silently capping bitrate and allow an
adjustable frame size. Indentation fix in cwrs.c.
This commit is contained in:
parent
242eee35a8
commit
122c98920f
2 changed files with 31 additions and 32 deletions
|
@ -356,7 +356,7 @@ void get_required_bits(celt_int16_t *bits,int N, int MAXK, int frac)
|
||||||
bits[k]=log2_frac(k+1,frac)+worst_bits;
|
bits[k]=log2_frac(k+1,frac)+worst_bits;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
RESTORE_STACK;
|
RESTORE_STACK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -212,6 +212,7 @@ void usage(void)
|
||||||
printf ("Options:\n");
|
printf ("Options:\n");
|
||||||
printf (" --bitrate n Encoding bit-rate\n");
|
printf (" --bitrate n Encoding bit-rate\n");
|
||||||
printf (" --comp n Encoding complexity (0-10)\n");
|
printf (" --comp n Encoding complexity (0-10)\n");
|
||||||
|
printf (" --framesize n Frame size (Default: 256)\n");
|
||||||
printf (" --skeleton Outputs ogg skeleton metadata (may cause incompatibilities)\n");
|
printf (" --skeleton Outputs ogg skeleton metadata (may cause incompatibilities)\n");
|
||||||
printf (" --comment Add the given string as an extra comment. This may be\n");
|
printf (" --comment Add the given string as an extra comment. This may be\n");
|
||||||
printf (" used multiple times\n");
|
printf (" used multiple times\n");
|
||||||
|
@ -240,7 +241,7 @@ int main(int argc, char **argv)
|
||||||
char *inFile, *outFile;
|
char *inFile, *outFile;
|
||||||
FILE *fin, *fout;
|
FILE *fin, *fout;
|
||||||
short input[MAX_FRAME_SIZE];
|
short input[MAX_FRAME_SIZE];
|
||||||
celt_int32_t frame_size;
|
celt_int32_t frame_size = 256;
|
||||||
int quiet=0;
|
int quiet=0;
|
||||||
int nbBytes;
|
int nbBytes;
|
||||||
CELTMode *mode;
|
CELTMode *mode;
|
||||||
|
@ -251,6 +252,7 @@ int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
{"bitrate", required_argument, NULL, 0},
|
{"bitrate", required_argument, NULL, 0},
|
||||||
{"comp", required_argument, NULL, 0},
|
{"comp", required_argument, NULL, 0},
|
||||||
|
{"framesize", required_argument, NULL, 0},
|
||||||
{"skeleton",no_argument,NULL, 0},
|
{"skeleton",no_argument,NULL, 0},
|
||||||
{"help", no_argument, NULL, 0},
|
{"help", no_argument, NULL, 0},
|
||||||
{"quiet", no_argument, NULL, 0},
|
{"quiet", no_argument, NULL, 0},
|
||||||
|
@ -286,7 +288,7 @@ int main(int argc, char **argv)
|
||||||
int comments_length;
|
int comments_length;
|
||||||
int close_in=0, close_out=0;
|
int close_in=0, close_out=0;
|
||||||
int eos=0;
|
int eos=0;
|
||||||
celt_int32_t bitrate=-1;
|
float bitrate=-1;
|
||||||
char first_bytes[12];
|
char first_bytes[12];
|
||||||
int wave_input=0;
|
int wave_input=0;
|
||||||
celt_int32_t lookahead = 0;
|
celt_int32_t lookahead = 0;
|
||||||
|
@ -310,7 +312,7 @@ int main(int argc, char **argv)
|
||||||
case 0:
|
case 0:
|
||||||
if (strcmp(long_options[option_index].name,"bitrate")==0)
|
if (strcmp(long_options[option_index].name,"bitrate")==0)
|
||||||
{
|
{
|
||||||
bitrate = atoi (optarg);
|
bitrate = atof (optarg);
|
||||||
} else if (strcmp(long_options[option_index].name,"skeleton")==0)
|
} else if (strcmp(long_options[option_index].name,"skeleton")==0)
|
||||||
{
|
{
|
||||||
with_skeleton=1;
|
with_skeleton=1;
|
||||||
|
@ -353,6 +355,9 @@ int main(int argc, char **argv)
|
||||||
} else if (strcmp(long_options[option_index].name,"comp")==0)
|
} else if (strcmp(long_options[option_index].name,"comp")==0)
|
||||||
{
|
{
|
||||||
complexity=atoi (optarg);
|
complexity=atoi (optarg);
|
||||||
|
} else if (strcmp(long_options[option_index].name,"framesize")==0)
|
||||||
|
{
|
||||||
|
frame_size=atoi (optarg);
|
||||||
} else if (strcmp(long_options[option_index].name,"comment")==0)
|
} else if (strcmp(long_options[option_index].name,"comment")==0)
|
||||||
{
|
{
|
||||||
if (!strchr(optarg, '='))
|
if (!strchr(optarg, '='))
|
||||||
|
@ -440,34 +445,30 @@ int main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (chan == 1)
|
if (bitrate<0)
|
||||||
{
|
if (chan==1)
|
||||||
if (bitrate < 0)
|
bitrate=64.0;
|
||||||
bitrate = 64;
|
else
|
||||||
if (bitrate < 32)
|
bitrate=128.0;
|
||||||
bitrate = 32;
|
if (chan>2) {
|
||||||
if (bitrate > 110)
|
}
|
||||||
bitrate = 110;
|
|
||||||
}
|
bytes_per_packet = (bitrate*1000*frame_size/rate+4)/8;
|
||||||
else if (chan == 2)
|
|
||||||
{
|
if (bytes_per_packet < 8) {
|
||||||
if (bitrate < 0)
|
bytes_per_packet=8;
|
||||||
bitrate = 128;
|
fprintf (stderr, "Warning: Requested bitrate (%0.3fkbit/sec) is too low. Setting CELT to 8 bytes/frame.\n",bitrate);
|
||||||
if (bitrate < 64)
|
} else if (bytes_per_packet > 300) {
|
||||||
bitrate = 64;
|
bytes_per_packet=300;
|
||||||
if (bitrate > 150)
|
fprintf (stderr, "Warning: Requested bitrate (%0.3fkbit/sec) is too high. Setting CELT to 300 bytes/frame.\n",bitrate);
|
||||||
bitrate = 150;
|
|
||||||
} else {
|
|
||||||
fprintf (stderr, "Only mono and stereo are supported\n");
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mode = celt_mode_create(rate, chan, 256, NULL);
|
bitrate = ((rate/(float)frame_size)*8*bytes_per_packet)/1000.0;
|
||||||
|
|
||||||
|
mode = celt_mode_create(rate, chan, frame_size, NULL);
|
||||||
if (!mode)
|
if (!mode)
|
||||||
return 1;
|
return 1;
|
||||||
celt_mode_info(mode, CELT_GET_FRAME_SIZE, &frame_size);
|
celt_mode_info(mode, CELT_GET_FRAME_SIZE, &frame_size);
|
||||||
|
|
||||||
bytes_per_packet = (bitrate*1000*frame_size/rate+4)/8;
|
|
||||||
|
|
||||||
celt_header_init(&header, mode);
|
celt_header_init(&header, mode);
|
||||||
header.nb_channels = chan;
|
header.nb_channels = chan;
|
||||||
|
@ -477,11 +478,9 @@ int main(int argc, char **argv)
|
||||||
if (chan==2)
|
if (chan==2)
|
||||||
st_string="stereo";
|
st_string="stereo";
|
||||||
if (!quiet)
|
if (!quiet)
|
||||||
fprintf (stderr, "Encoding %d Hz audio using %s (%d bytes per packet)\n",
|
fprintf (stderr, "Encoding %d Hz %s audio in %d sample packets at %0.3fkbit/sec (%d bytes per packet)\n",
|
||||||
header.sample_rate, st_string, bytes_per_packet);
|
header.sample_rate, st_string, frame_size, bitrate, bytes_per_packet);
|
||||||
}
|
}
|
||||||
/*fprintf (stderr, "Encoding %d Hz audio at %d bps using %s mode\n",
|
|
||||||
header.rate, mode->bitrate, mode->modeName);*/
|
|
||||||
|
|
||||||
/*Initialize CELT encoder*/
|
/*Initialize CELT encoder*/
|
||||||
st = celt_encoder_create(mode);
|
st = celt_encoder_create(mode);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue