]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/rangecoder.c
lavc: introduce a new decoding/encoding API with decoupled input/output
[ffmpeg] / libavcodec / rangecoder.c
index 147e58de409a3ae66e5ebb4e014b09a6d8e41e49..1a5d106b08e990d9dfa4fbaee6ad230c096366f7 100644 (file)
  *     G. N. N. Martin                  Presented in March 1979 to the Video &
  *                                      Data Recording Conference,
  *     IBM UK Scientific Center         held in Southampton July 24-27 1979."
- *
  */
 
 #include <string.h>
 
+#include "libavutil/attributes.h"
+#include "libavutil/intreadwrite.h"
+
 #include "avcodec.h"
 #include "rangecoder.h"
-#include "bytestream.h"
 
-void ff_init_range_encoder(RangeCoder *c, uint8_t *buf, int buf_size)
+av_cold void ff_init_range_encoder(RangeCoder *c, uint8_t *buf, int buf_size)
 {
     c->bytestream_start  =
     c->bytestream        = buf;
@@ -48,12 +49,14 @@ void ff_init_range_encoder(RangeCoder *c, uint8_t *buf, int buf_size)
     c->outstanding_byte  = -1;
 }
 
-void ff_init_range_decoder(RangeCoder *c, const uint8_t *buf, int buf_size)
+av_cold 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 = bytestream_get_be16(&c->bytestream);
+    c->low = AV_RB16(c->bytestream);
+    c->bytestream += 2;
 }
 
 void ff_build_rac_states(RangeCoder *c, int factor, int max_p)
@@ -136,11 +139,8 @@ int main(void)
     for (i = 0; i < SIZE; i++)
         r[i] = av_lfg_get(&prng) % 7;
 
-    for (i = 0; i < SIZE; i++) {
-START_TIMER
+    for (i = 0; i < SIZE; i++)
         put_rac(&c, state, r[i] & 1);
-STOP_TIMER("put_rac")
-    }
 
     ff_rac_terminate(&c);
 
@@ -148,12 +148,11 @@ STOP_TIMER("put_rac")
 
     memset(state, 128, sizeof(state));
 
-    for (i = 0; i < SIZE; i++) {
-START_TIMER
-        if ((r[i] & 1) != get_rac(&c, state))
+    for (i = 0; i < SIZE; i++)
+        if ((r[i] & 1) != get_rac(&c, state)) {
             av_log(NULL, AV_LOG_ERROR, "rac failure at %d\n", i);
-STOP_TIMER("get_rac")
-    }
+            return 1;
+        }
 
     return 0;
 }