Remove end-byte handling to allow arbitrary padding with zeros for CBR.
authorTimothy B. Terriberry <tterribe@email.unc.edu>
Fri, 25 Jan 2008 03:28:58 +0000 (22:28 -0500)
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Fri, 25 Jan 2008 03:41:04 +0000 (14:41 +1100)
From d28a530115ee7c739f12a6afb7e233cd29f64869 Mon Sep 17 00:00:00 2001
From: Timothy B. Terriberry <tterribe@xiph.org>
Date: Thu, 24 Jan 2008 21:56:48 -0500
Subject: [PATCH] Remove end-byte handling to allow arbitrary padding with zeros for CBR.

libentcode/mfrngdec.c
libentcode/mfrngenc.c
libentcode/rangedec.c
libentcode/rangeenc.c

index 0220a37..2310a63 100644 (file)
@@ -137,22 +137,7 @@ static int ec_dec_in(ec_dec *_this){
   int ret;
   ret=ec_byte_read1(_this->buf);
   if(ret<0){
-    unsigned char *buf;
-    long           i;
-    i=ec_byte_bytes(_this->buf);
-    buf=ec_byte_get_buffer(_this->buf);
-    /*Breaking abstraction: don't do this at home, kids.*/
-    if(_this->buf->storage==i&&i>0){
-      unsigned char *buf;
-      buf=ec_byte_get_buffer(_this->buf);
-      /*If we end in a string of 0 or more EC_FOF_RSV1 bytes preceded by a
-         zero, return an extra EC_FOF_RSV1 byte.*/
-      do i--;
-      while(i>0&&buf[i]==EC_FOF_RSV1);
-      if(!buf[i])ret=EC_FOF_RSV1;
-      else ret=0;
-    }
-    else ret=0;
+    ret=0;
     /*Needed to make sure the above conditional only triggers once, and to keep
        oc_dec_tell() operating correctly.*/
     ec_byte_adv1(_this->buf);
index 704b3e4..3d88f89 100644 (file)
@@ -167,28 +167,9 @@ void ec_enc_done(ec_enc *_this){
       end=end<<EC_SYM_BITS&EC_CODE_TOP-1;
     }
   }
-  /*If we have a buffered byte...*/
+  /*If we have a buffered byte flush it into the output buffer.*/
   if(_this->rem>=0){
-    unsigned char *buf;
-    long           i;
-    /*Flush it into the output buffer.*/
     ec_enc_carry_out(_this,0);
     _this->rem=-1;
-    /*We may be able to drop some redundant bytes from the end.*/
-    buf=ec_byte_get_buffer(_this->buf);
-    i=ec_byte_bytes(_this->buf);
-    /*Strip trailing zeros.*/
-    do i--;
-    while(i>0&&!buf[i]);
-    /*Strip one trailing EC_FOF_RSV1 byte if the buffer ends in a string of
-       consecutive EC_FOF_RSV1 bytes preceded by one (or more) zeros.*/
-    if(i>0&&buf[i]==EC_FOF_RSV1){
-      long j;
-      j=i;
-      do j--;
-      while(j>0&&buf[j]==EC_FOF_RSV1);
-      if(!buf[j])i--;
-    }
-    ec_byte_writetrunc(_this->buf,i+1);
   }
 }
index 1d2815d..84726f3 100644 (file)
@@ -121,22 +121,7 @@ static int ec_dec_in(ec_dec *_this){
   int ret;
   ret=ec_byte_read1(_this->buf);
   if(ret<0){
-    unsigned char *buf;
-    long           i;
-    i=ec_byte_bytes(_this->buf);
-    buf=ec_byte_get_buffer(_this->buf);
-    /*Breaking abstraction: don't do this at home, kids.*/
-    if(_this->buf->storage==i&&i>0){
-      unsigned char *buf;
-      buf=ec_byte_get_buffer(_this->buf);
-      /*If we end in a string of 0 or more EC_FOF_RSV1 bytes preceded by a
-         zero, return an extra EC_FOF_RSV1 byte.*/
-      do i--;
-      while(i>0&&buf[i]==EC_FOF_RSV1);
-      if(!buf[i])ret=EC_FOF_RSV1;
-      else ret=0;
-    }
-    else ret=0;
+    ret=0;
     /*Needed to make sure the above conditional only triggers once, and to keep
        oc_dec_tell() operating correctly.*/
     ec_byte_adv1(_this->buf);
index 47f067b..5353606 100644 (file)
@@ -137,28 +137,9 @@ void ec_enc_done(ec_enc *_this){
       end=end<<EC_SYM_BITS&EC_CODE_TOP-1;
     }
   }
-  /*If we have a buffered byte...*/
+  /*If we have a buffered byte flush it into the output buffer.*/
   if(_this->rem>=0){
-    unsigned char *buf;
-    long           i;
-    /*Flush it into the output buffer.*/
     ec_enc_carry_out(_this,0);
     _this->rem=-1;
-    /*We may be able to drop some redundant bytes from the end.*/
-    buf=ec_byte_get_buffer(_this->buf);
-    i=ec_byte_bytes(_this->buf);
-    /*Strip trailing zeros.*/
-    do i--;
-    while(i>0&&!buf[i]);
-    /*Strip one trailing EC_FOF_RSV1 byte if the buffer ends in a string of
-       consecutive EC_FOF_RSV1 bytes preceded by one (or more) zeros.*/
-    if(i>0&&buf[i]==EC_FOF_RSV1){
-      long j;
-      j=i;
-      do j--;
-      while(j>0&&buf[j]==EC_FOF_RSV1);
-      if(!buf[j])i--;
-    }
-    ec_byte_writetrunc(_this->buf,i+1);
   }
 }