putbits.c
资源名称:mpeg2编解码.zip [点击查看]
上传用户:hkgotone
上传日期:2013-02-17
资源大小:293k
文件大小:2k
源码类别:
Windows Mobile
开发平台:
C/C++
- /* 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 <stdio.h>
- #include "config.h"
- extern FILE *outfile; /* the only global var we need here */
- /* private data */
- static unsigned char outbfr;
- static int outcnt;
- static int bytecnt;
- /* initialize buffer, call once before first putbits or alignbits */
- void initbits()
- {
- outcnt = 8;
- bytecnt = 0;
- }
- /* write rightmost n (0<=n<=32) bits of val to outfile */
- void putbits(val,n)
- int val;
- int n;
- {
- int i;
- unsigned int mask;
- mask = 1 << (n-1); /* selects first (leftmost) bit */
- for (i=0; i<n; i++)
- {
- outbfr <<= 1;
- if (val & mask)
- outbfr|= 1;
- mask >>= 1; /* select next bit */
- outcnt--;
- if (outcnt==0) /* 8 bit buffer full */
- {
- putc(outbfr,outfile);
- outcnt = 8;
- bytecnt++;
- }
- }
- }
- /* zero bit stuffing to next byte boundary (5.2.3, 6.2.1) */
- void alignbits()
- {
- if (outcnt!=8)
- putbits(0,outcnt);
- }
- /* return total number of generated bits */
- int bitcount()
- {
- return 8*bytecnt + (8-outcnt);
- }