X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Frangecoder.c;h=d750e6545311a8e8ec15a85a9f6b9231ba79c833;hb=e161e007be2ca2df1e560470f94d4038dd841d67;hp=4e15ce3096140dc51c40e4468034ed289faf95a6;hpb=2029f312e8c13b25d322d69961b42db2e66f616a;p=ffmpeg diff --git a/libavcodec/rangecoder.c b/libavcodec/rangecoder.c index 4e15ce30961..d750e654531 100644 --- a/libavcodec/rangecoder.c +++ b/libavcodec/rangecoder.c @@ -17,11 +17,10 @@ * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * */ /** - * @file rangecoder.c + * @file libavcodec/rangecoder.c * Range coder. * based upon * "Range encoding: an algorithm for removing redundancy from a digitised @@ -36,6 +35,7 @@ #include "avcodec.h" #include "rangecoder.h" +#include "bytestream.h" void ff_init_range_encoder(RangeCoder *c, uint8_t *buf, int buf_size){ @@ -53,8 +53,7 @@ void ff_init_range_decoder(RangeCoder *c, const uint8_t *buf, int buf_size){ /* cast to avoid compiler warning */ ff_init_range_encoder(c, (uint8_t *) buf, buf_size); - c->low =(*c->bytestream++)<<8; - c->low+= *c->bytestream++; + c->low = bytestream_get_be16(&c->bytestream); } void ff_build_rac_states(RangeCoder *c, int factor, int max_p){ @@ -110,14 +109,20 @@ int ff_rac_terminate(RangeCoder *c){ return c->bytestream - c->bytestream_start; } -#if 0 //selftest +#ifdef TEST #define SIZE 10240 -int main(){ + +#include "libavutil/lfg.h" + +int main(void){ RangeCoder c; uint8_t b[9*SIZE]; uint8_t r[9*SIZE]; int i; uint8_t state[10]= {0}; + AVLFG prng; + + av_lfg_init(&prng, 1); ff_init_range_encoder(&c, b, SIZE); ff_build_rac_states(&c, 0.05*(1LL<<32), 128+64+32+16); @@ -125,7 +130,7 @@ int main(){ memset(state, 128, sizeof(state)); for(i=0; i