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

gitlab.com/quite/celt.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libcelt/entdec.c3
-rw-r--r--libcelt/entenc.c4
-rw-r--r--tests/ectest.c4
3 files changed, 8 insertions, 3 deletions
diff --git a/libcelt/entdec.c b/libcelt/entdec.c
index 555543f..284ce39 100644
--- a/libcelt/entdec.c
+++ b/libcelt/entdec.c
@@ -5,6 +5,7 @@
#include <stddef.h>
#include "entdec.h"
#include "os_support.h"
+#include "arch.h"
void ec_byte_readinit(ec_byte_buffer *_b,unsigned char *_buf,long _bytes){
@@ -106,6 +107,8 @@ ec_uint32 ec_dec_uint(ec_dec *_this,ec_uint32 _ft){
unsigned s;
int ftb;
t=0;
+ /*In order to optimize EC_ILOG(), it is undefined for the value 0.*/
+ celt_assert(_ft>1);
_ft--;
ftb=EC_ILOG(_ft);
if(ftb>EC_UNIT_BITS){
diff --git a/libcelt/entenc.c b/libcelt/entenc.c
index 3da351e..d0cbb0c 100644
--- a/libcelt/entenc.c
+++ b/libcelt/entenc.c
@@ -100,8 +100,10 @@ void ec_enc_uint(ec_enc *_this,ec_uint32 _fl,ec_uint32 _ft){
unsigned ft;
unsigned fl;
int ftb;
+ /*In order to optimize EC_ILOG(), it is undefined for the value 0.*/
+ celt_assert(_ft>1);
_ft--;
- ftb=EC_ILOG(_ft)&-!!_ft;
+ ftb=EC_ILOG(_ft);
if(ftb>EC_UNIT_BITS){
ftb-=EC_UNIT_BITS;
ft=(_ft>>ftb)+1;
diff --git a/tests/ectest.c b/tests/ectest.c
index b3fc220..49d39a1 100644
--- a/tests/ectest.c
+++ b/tests/ectest.c
@@ -31,7 +31,7 @@ int main(int _argc,char **_argv){
/*Testing encoding of raw bit values.*/
ec_byte_writeinit(&buf);
ec_enc_init(&enc,&buf);
- for(ft=0;ft<1024;ft++){
+ for(ft=2;ft<1024;ft++){
for(i=0;i<ft;i++){
entropy+=log(ft)*M_LOG2E;
ec_enc_uint(&enc,i,ft);
@@ -59,7 +59,7 @@ int main(int _argc,char **_argv){
fprintf(stderr,"Packed to %li bytes.\n",(long)(buf.ptr-buf.buf));
ec_byte_readinit(&buf,ec_byte_get_buffer(&buf),ec_byte_bytes(&buf));
ec_dec_init(&dec,&buf);
- for(ft=0;ft<1024;ft++){
+ for(ft=2;ft<1024;ft++){
for(i=0;i<ft;i++){
sym=ec_dec_uint(&dec,ft);
if(sym!=i){