From 3f0b3470a3f5078a9ee4409f4e987a014b6a5be7 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 16 Jun 2000 22:58:38 +0000 Subject: [PATCH] Unified putbits. Original commit message from CVS: Unified putbits. --- configure.in | 1 + libs/Makefile.am | 4 +- libs/putbits/.gitignore | 7 +++ libs/putbits/Makefile.am | 15 ++++++ libs/putbits/gstputbits.c | 101 ++++++++++++++++++++++++++++++++++++++ libs/putbits/gstputbits.h | 78 +++++++++++++++++++++++++++++ 6 files changed, 204 insertions(+), 2 deletions(-) create mode 100644 libs/putbits/.gitignore create mode 100644 libs/putbits/Makefile.am create mode 100644 libs/putbits/gstputbits.c create mode 100644 libs/putbits/gstputbits.h diff --git a/configure.in b/configure.in index 942bd9aae3..37d094bbc1 100644 --- a/configure.in +++ b/configure.in @@ -326,6 +326,7 @@ libs/riff/Makefile libs/colorspace/Makefile libs/videoscale/Makefile libs/getbits/Makefile +libs/putbits/Makefile plugins/Makefile plugins/au/Makefile plugins/wav/Makefile diff --git a/libs/Makefile.am b/libs/Makefile.am index 00087c244e..a407394e6d 100644 --- a/libs/Makefile.am +++ b/libs/Makefile.am @@ -1,3 +1,3 @@ -SUBDIRS = riff colorspace getbits videoscale +SUBDIRS = riff colorspace getbits putbits videoscale -DIST_SUBDIRS = riff colorspace getbits videoscale +DIST_SUBDIRS = riff colorspace getbits putbits videoscale diff --git a/libs/putbits/.gitignore b/libs/putbits/.gitignore new file mode 100644 index 0000000000..08f5ed37d8 --- /dev/null +++ b/libs/putbits/.gitignore @@ -0,0 +1,7 @@ +Makefile +Makefile.in +*.o +*.lo +*.la +.deps +.libs diff --git a/libs/putbits/Makefile.am b/libs/putbits/Makefile.am new file mode 100644 index 0000000000..29b80b8617 --- /dev/null +++ b/libs/putbits/Makefile.am @@ -0,0 +1,15 @@ +filterdir = $(libdir)/gst + +filter_LTLIBRARIES = libgstputbits.la + +libgstputbits_la_SOURCES = gstputbits.c + +libgstputbitsincludedir = $(includedir)/gst/libs/gstputbits.h +libgstputbitsinclude_HEADERS = gstputbits.h + +noinst_HEADERS = gstputbits.h + +CFLAGS += -Wall -O2 -fomit-frame-pointer -funroll-all-loops -finline-functions -ffast-math + +INCLUDES = $(GLIB_CFLAGS) $(GTK_CFLAGS) -I$(top_srcdir) -I$(top_srcdir)/include +LDADD = $(GLIB_LIBS) $(GTK_LIBS) $(top_srcdir)/gst/libgst.la diff --git a/libs/putbits/gstputbits.c b/libs/putbits/gstputbits.c new file mode 100644 index 0000000000..76bff88687 --- /dev/null +++ b/libs/putbits/gstputbits.c @@ -0,0 +1,101 @@ +/* putbits.c, bit-level output */ + +/* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */ + +/* + * Disclaimer of Warranty + * + * These software programs are available to the user without any license fee or + * royalty on an "as is" basis. The MPEG Software Simulation Group disclaims + * any and all warranties, whether express, implied, or statuary, including any + * implied warranties or merchantability or of fitness for a particular + * purpose. In no event shall the copyright-holder be liable for any + * incidental, punitive, or consequential damages of any kind whatsoever + * arising from the use of these programs. + * + * This disclaimer of warranty extends to the user of these programs and user's + * customers, employees, agents, transferees, successors, and assigns. + * + * The MPEG Software Simulation Group does not represent or warrant that the + * programs furnished hereunder are free of infringement of any third-party + * patents. + * + * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware, + * are subject to royalty fees to patent holders. Many of these patents are + * general enough such that they are unavoidable regardless of implementation + * design. + * + */ + +#include +#include +#include "gstputbits.h" + +/* initialize buffer, call once before first putbits or alignbits */ +void gst_putbits_init(gst_putbits_t *pb) +{ + pb->outcnt = 8; + pb->bytecnt = 0; + pb->outbase = 0; +} + +void gst_putbits_new_empty_buffer(gst_putbits_t *pb, int len) +{ + pb->outbfr = pb->outbase = malloc(len); + pb->temp = 0; + pb->len = len; + pb->newlen = 0; + pb->outcnt = 8; +} + +void gst_putbits_new_buffer(gst_putbits_t *pb, unsigned char *buffer, int len) +{ + pb->outbfr = buffer; + pb->temp = 0; + pb->outcnt = 8; + pb->bytecnt = 0; + pb->len = len; +} + +/* write rightmost n (0<=n<=32) bits of val to outfile */ +void gst_putbits(gst_putbits_t *pb, int val, int n) +{ + int i; + unsigned int mask; + + //printf("putbits: %d %d %ld\n", val, n, pb->outcnt); + mask = 1 << (n-1); /* selects first (leftmost) bit */ + + for (i=0; itemp <<= 1; + + if (val & mask) + pb->temp|= 1; + + mask >>= 1; /* select next bit */ + pb->outcnt--; + + if (pb->outcnt==0) /* 8 bit buffer full */ + { + pb->len--; + pb->newlen++; + *(pb->outbfr++) = pb->temp; + pb->outcnt = 8; + pb->bytecnt++; + } + } +} + +/* zero bit stuffing to next byte boundary (5.2.3, 6.2.1) */ +void gst_putbits_align(gst_putbits_t *pb) +{ + if (pb->outcnt!=8) + gst_putbits(pb, 0, pb->outcnt); +} + +/* return total number of generated bits */ +int gst_putbits_bitcount(gst_putbits_t *pb) +{ + return 8*pb->bytecnt + (8-pb->outcnt); +} diff --git a/libs/putbits/gstputbits.h b/libs/putbits/gstputbits.h new file mode 100644 index 0000000000..10954b9034 --- /dev/null +++ b/libs/putbits/gstputbits.h @@ -0,0 +1,78 @@ +/* putbits.h, bit-level output */ + +/* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */ + +/* + * Disclaimer of Warranty + * + * These software programs are available to the user without any license fee or + * royalty on an "as is" basis. The MPEG Software Simulation Group disclaims + * any and all warranties, whether express, implied, or statuary, including any + * implied warranties or merchantability or of fitness for a particular + * purpose. In no event shall the copyright-holder be liable for any + * incidental, punitive, or consequential damages of any kind whatsoever + * arising from the use of these programs. + * + * This disclaimer of warranty extends to the user of these programs and user's + * customers, employees, agents, transferees, successors, and assigns. + * + * The MPEG Software Simulation Group does not represent or warrant that the + * programs furnished hereunder are free of infringement of any third-party + * patents. + * + * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware, + * are subject to royalty fees to patent holders. Many of these patents are + * general enough such that they are unavoidable regardless of implementation + * design. + * + */ + +#ifndef __GST_PUTBITS_H__ +#define __GST_PUTBITS_H__ + +typedef struct _gst_putbits_t gst_putbits_t; + +struct _gst_putbits_t { + unsigned char *outbfr; + unsigned char *outbase; + unsigned char temp; + int outcnt; + int bytecnt; + int len; + int newlen; +}; + +void gst_putbits_init(gst_putbits_t *pb); +void gst_putbits_new_empty_buffer(gst_putbits_t *pb, int len); +void gst_putbits_new_buffer(gst_putbits_t *pb, unsigned char *buffer, int len); +void gst_putbits(gst_putbits_t *pb, int val, int n); +void gst_putbits_align(gst_putbits_t *pb); +int gst_putbits_bitcount(gst_putbits_t *pb); + +#define gst_putbits1(gb, val) gst_putbits(gb, val, 1) +#define gst_putbits2(gb, val) gst_putbits(gb, val, 2) +#define gst_putbits3(gb, val) gst_putbits(gb, val, 3) +#define gst_putbits4(gb, val) gst_putbits(gb, val, 4) +#define gst_putbits5(gb, val) gst_putbits(gb, val, 5) +#define gst_putbits6(gb, val) gst_putbits(gb, val, 6) +#define gst_putbits7(gb, val) gst_putbits(gb, val, 7) +#define gst_putbits8(gb, val) gst_putbits(gb, val, 8) +#define gst_putbits9(gb, val) gst_putbits(gb, val, 9) +#define gst_putbits10(gb, val) gst_putbits(gb, val, 10) +#define gst_putbits11(gb, val) gst_putbits(gb, val, 11) +#define gst_putbits12(gb, val) gst_putbits(gb, val, 12) +#define gst_putbits13(gb, val) gst_putbits(gb, val, 13) +#define gst_putbits14(gb, val) gst_putbits(gb, val, 14) +#define gst_putbits15(gb, val) gst_putbits(gb, val, 15) +#define gst_putbits16(gb, val) gst_putbits(gb, val, 16) +#define gst_putbits17(gb, val) gst_putbits(gb, val, 17) +#define gst_putbits18(gb, val) gst_putbits(gb, val, 18) +#define gst_putbits19(gb, val) gst_putbits(gb, val, 19) +#define gst_putbits20(gb, val) gst_putbits(gb, val, 20) +#define gst_putbits21(gb, val) gst_putbits(gb, val, 21) +#define gst_putbits22(gb, val) gst_putbits(gb, val, 22) +#define gst_putbits32(gb, val) gst_putbits(gb, val, 32) + +#define gst_putbitsn(gb, val, n) gst_putbits(gb, val, n) + +#endif /* __GST_PUTBITS_H__ */