diff common.h @ 0:986e461dc072 libavcodec

Initial revision
author glantau
date Sun, 22 Jul 2001 14:18:56 +0000
parents
children 2e2c46c87460
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/common.h	Sun Jul 22 14:18:56 2001 +0000
@@ -0,0 +1,170 @@
+#ifndef COMMON_H
+#define COMMON_H
+
+#include "../config.h"
+
+#ifndef USE_LIBAVCODEC
+// workaround for typedef conflict in MPlayer
+typedef unsigned short UINT16;
+typedef signed short INT16;
+#endif
+
+typedef unsigned char UINT8;
+typedef unsigned int UINT32;
+typedef unsigned long long UINT64;
+typedef signed char INT8;
+typedef signed int INT32;
+typedef signed long long INT64;
+
+/* bit output */
+
+struct PutBitContext;
+
+typedef void (*WriteDataFunc)(void *, UINT8 *, int);
+
+typedef struct PutBitContext {
+    UINT8 *buf, *buf_ptr, *buf_end;
+    int bit_cnt;
+    UINT32 bit_buf;
+    long long data_out_size; /* in bytes */
+    void *opaque;
+    WriteDataFunc write_data;
+} PutBitContext;
+
+void init_put_bits(PutBitContext *s, 
+                   UINT8 *buffer, int buffer_size,
+                   void *opaque,
+                   void (*write_data)(void *, UINT8 *, int));
+void put_bits(PutBitContext *s, int n, unsigned int value);
+long long get_bit_count(PutBitContext *s);
+void align_put_bits(PutBitContext *s);
+void flush_put_bits(PutBitContext *s);
+
+/* jpeg specific put_bits */
+void jput_bits(PutBitContext *s, int n, unsigned int value);
+void jflush_put_bits(PutBitContext *s);
+
+/* bit input */
+
+typedef struct GetBitContext {
+    UINT8 *buf, *buf_ptr, *buf_end;
+    int bit_cnt;
+    UINT32 bit_buf;
+} GetBitContext;
+
+typedef struct VLC {
+    int bits;
+    INT16 *table_codes;
+    INT8 *table_bits;
+    int table_size, table_allocated;
+} VLC;
+
+void init_get_bits(GetBitContext *s, 
+                   UINT8 *buffer, int buffer_size);
+
+unsigned int get_bits(GetBitContext *s, int n);
+void align_get_bits(GetBitContext *s);
+int init_vlc(VLC *vlc, int nb_bits, int nb_codes,
+             const void *bits, int bits_wrap, int bits_size,
+             const void *codes, int codes_wrap, int codes_size);
+void free_vlc(VLC *vlc);
+int get_vlc(GetBitContext *s, VLC *vlc);
+
+/* macro to go faster */
+/* n must be <= 24 */
+/* XXX: optimize buffer end test */
+#define SHOW_BITS(s, val, n)\
+{\
+    if (bit_cnt < n && buf_ptr < (s)->buf_end) {\
+        bit_buf |= *buf_ptr++ << (24 - bit_cnt);\
+        bit_cnt += 8;\
+        if (bit_cnt < n && buf_ptr < (s)->buf_end) {\
+            bit_buf |= *buf_ptr++ << (24 - bit_cnt);\
+            bit_cnt += 8;\
+            if (bit_cnt < n && buf_ptr < (s)->buf_end) {\
+                bit_buf |= *buf_ptr++ << (24 - bit_cnt);\
+                bit_cnt += 8;\
+            }\
+        }\
+    }\
+    val = bit_buf >> (32 - n);\
+}
+
+/* SHOW_BITS with n1 >= n must be been done before */
+#define FLUSH_BITS(n)\
+{\
+    bit_buf <<= n;\
+    bit_cnt -= n;\
+}
+
+#define SAVE_BITS(s) \
+{\
+    bit_cnt = (s)->bit_cnt;\
+    bit_buf = (s)->bit_buf;\
+    buf_ptr = (s)->buf_ptr;\
+}
+
+#define RESTORE_BITS(s) \
+{\
+    (s)->buf_ptr = buf_ptr;\
+    (s)->bit_buf = bit_buf;\
+    (s)->bit_cnt = bit_cnt;\
+}
+
+/* define it to include statistics code (useful only for optimizing
+   codec efficiency */
+//#define STATS
+
+#ifdef STATS
+
+enum {
+    ST_UNKNOWN,
+    ST_DC,
+    ST_INTRA_AC,
+    ST_INTER_AC,
+    ST_INTRA_MB,
+    ST_INTER_MB,
+    ST_MV,
+    ST_NB,
+};
+
+extern int st_current_index;
+extern unsigned int st_bit_counts[ST_NB];
+extern unsigned int st_out_bit_counts[ST_NB];
+
+void print_stats(void);
+#endif
+
+/* misc math functions */
+
+extern inline int log2(unsigned int v)
+{
+    int n;
+
+    n = 0;
+    if (v & 0xffff0000) {
+        v >>= 16;
+        n += 16;
+    }
+    if (v & 0xff00) {
+        v >>= 8;
+        n += 8;
+    }
+    if (v & 0xf0) {
+        v >>= 4;
+        n += 4;
+    }
+    if (v & 0xc) {
+        v >>= 2;
+        n += 2;
+    }
+    if (v & 0x2) {
+        n++;
+    }
+    return n;
+}
+
+/* memory */
+void *av_mallocz(int size);
+
+#endif