summaryrefslogtreecommitdiff
path: root/libavcodec/common.h
diff options
context:
space:
mode:
Diffstat (limited to 'libavcodec/common.h')
-rw-r--r--libavcodec/common.h170
1 files changed, 170 insertions, 0 deletions
diff --git a/libavcodec/common.h b/libavcodec/common.h
new file mode 100644
index 0000000000..bba7d1fb9d
--- /dev/null
+++ b/libavcodec/common.h
@@ -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