[svn] / trunk / xvidcore / src / bitstream / bitstream.c Repository:
ViewVC logotype

Diff of /trunk/xvidcore/src/bitstream/bitstream.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 469, Tue Sep 10 22:52:13 2002 UTC revision 655, Sun Nov 17 00:57:58 2002 UTC
# Line 3  Line 3 
3   *  XVID MPEG-4 VIDEO CODEC   *  XVID MPEG-4 VIDEO CODEC
4   *  - Bitstream reader/writer functions -   *  - Bitstream reader/writer functions -
5   *   *
6   *  Copyright (C) 2001-2002 - Peter Ross <pross@cs.rmit.edu.au>   *  Copyright (C) 2001-2002 - Peter Ross <pross@xvid.org>
7   *   *
8   *  This program is an implementation of a part of one or more MPEG-4   *  This file is part of XviD, a free MPEG-4 video encoder/decoder
  *  Video tools as specified in ISO/IEC 14496-2 standard.  Those intending  
  *  to use this software module in hardware or software products are  
  *  advised that its use may infringe existing patents or copyrights, and  
  *  any such use would be at such party's own risk.  The original  
  *  developer of this software module and his/her company, and subsequent  
  *  editors and their companies, will have no liability for use of this  
  *  software or modifications or derivatives thereof.  
9   *   *
10   *  This program is free software ; you can redistribute it and/or modify   *  XviD is free software; you can redistribute it and/or modify it
11   *  it under the terms of the GNU General Public License as published by   *  under the terms of the GNU General Public License as published by
12   *  the Free Software Foundation ; either version 2 of the License, or   *  the Free Software Foundation ; either version 2 of the License, or
13   *  (at your option) any later version.   *  (at your option) any later version.
14   *   *
# Line 28  Line 21 
21   *  along with this program ; if not, write to the Free Software   *  along with this program ; if not, write to the Free Software
22   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
23   *   *
24   * $Id: bitstream.c,v 1.29 2002-09-10 22:52:12 edgomez Exp $   *  Under section 8 of the GNU General Public License, the copyright
25     *  holders of XVID explicitly forbid distribution in the following
26     *  countries:
27     *
28     *    - Japan
29     *    - United States of America
30     *
31     *  Linking XviD statically or dynamically with other modules is making a
32     *  combined work based on XviD.  Thus, the terms and conditions of the
33     *  GNU General Public License cover the whole combination.
34     *
35     *  As a special exception, the copyright holders of XviD give you
36     *  permission to link XviD with independent modules that communicate with
37     *  XviD solely through the VFW1.1 and DShow interfaces, regardless of the
38     *  license terms of these independent modules, and to copy and distribute
39     *  the resulting combined work under terms of your choice, provided that
40     *  every copy of the combined work is accompanied by a complete copy of
41     *  the source code of XviD (the version of XviD used to produce the
42     *  combined work), being distributed under the terms of the GNU General
43     *  Public License plus this exception.  An independent module is a module
44     *  which is not derived from or based on XviD.
45     *
46     *  Note that people who make modified versions of XviD are not obligated
47     *  to grant this special exception for their modified versions; it is
48     *  their choice whether to do so.  The GNU General Public License gives
49     *  permission to release a modified version without this exception; this
50     *  exception also makes it possible to release a modified version which
51     *  carries forward this exception.
52     *
53     * $Id: bitstream.c,v 1.35 2002-11-17 00:57:56 edgomez Exp $
54   *   *
55   ****************************************************************************/   ****************************************************************************/
56    
# Line 44  Line 66 
66  log2bin(uint32_t value)  log2bin(uint32_t value)
67  {  {
68  /* Changed by Chenm001 */  /* Changed by Chenm001 */
69  #ifndef WIN32  #if !defined(_MSC_VER)
70          int n = 0;          int n = 0;
71    
72          while (value) {          while (value) {
# Line 161  Line 183 
183          uint32_t coding_type;          uint32_t coding_type;
184          uint32_t start_code;          uint32_t start_code;
185          uint32_t time_incr = 0;          uint32_t time_incr = 0;
186          int32_t time_increment;          int32_t time_increment = 0;
187    
188          do {          do {
189                  BitstreamByteAlign(bs);                  BitstreamByteAlign(bs);
# Line 417  Line 439 
439    
440    
441                                  if (vol_ver_id != 1) {                                  if (vol_ver_id != 1) {
442                                          DEBUG("QUARTERPEL BITSTREAM");                                          DPRINTF(DPRINTF_DEBUG, "QUARTERPEL BITSTREAM");
443                                          dec->quarterpel = BitstreamGetBit(bs);  // quarter_sample                                          dec->quarterpel = BitstreamGetBit(bs);  // quarter_sample
444                                  }                                  }
445                                  else                                  else
# Line 688  Line 710 
710          BitstreamPutBit(bs, 1); // vol_control_parameters          BitstreamPutBit(bs, 1); // vol_control_parameters
711          BitstreamPutBits(bs, 1, 2);     // chroma_format 1="4:2:0"          BitstreamPutBits(bs, 1, 2);     // chroma_format 1="4:2:0"
712    
 #ifdef BFRAMES  
         if (pParam->max_bframes > 0) {  
                 BitstreamPutBit(bs, 0); // low_delay  
         } else  
 #endif  
         {  
713                  BitstreamPutBit(bs, 1); // low_delay                  BitstreamPutBit(bs, 1); // low_delay
714          }  
715          BitstreamPutBit(bs, 0); // vbv_parameters (0=not given)          BitstreamPutBit(bs, 0); // vbv_parameters (0=not given)
716    
717          BitstreamPutBits(bs, 0, 2);     // video_object_layer_shape (0=rectangular)          BitstreamPutBits(bs, 0, 2);     // video_object_layer_shape (0=rectangular)
718    
719          WRITE_MARKER();          WRITE_MARKER();
720    
721          /* time_increment_resolution; ignored by current decore versions          /*
722             eg. 2fps     res=2       inc=1           * time_increment_resolution; ignored by current decore versions
723             25fps        res=25      inc=1           *  eg. 2fps     res=2       inc=1
724             29.97fps res=30000   inc=1001           *      25fps    res=25      inc=1
725             *      29.97fps res=30000   inc=1001
726           */           */
 #ifdef BFRAMES  
727          BitstreamPutBits(bs, pParam->fbase, 16);          BitstreamPutBits(bs, pParam->fbase, 16);
728  #else  
         BitstreamPutBits(bs, pParam->fbase, 16);  
 #endif  
729    
730          WRITE_MARKER();          WRITE_MARKER();
731    
 #ifdef BFRAMES  
         BitstreamPutBit(bs, 1);         // fixed_vop_rate = 1  
         BitstreamPutBits(bs, pParam->fincr, log2bin(pParam->fbase));    // fixed_vop_time_increment  
 #else  
732          BitstreamPutBit(bs, 1);         // fixed_vop_rate = 1          BitstreamPutBit(bs, 1);         // fixed_vop_rate = 1
733          BitstreamPutBits(bs, pParam->fincr, log2bin(pParam->fbase));    // fixed_vop_time_increment          BitstreamPutBits(bs, pParam->fincr, log2bin(pParam->fbase));    // fixed_vop_time_increment
 #endif  
734    
735          WRITE_MARKER();          WRITE_MARKER();
736          BitstreamPutBits(bs, pParam->width, 13);        // width          BitstreamPutBits(bs, pParam->width, 13);        // width
# Line 779  Line 788 
788          BitstreamPutBits(bs, frame->coding_type, 2);          BitstreamPutBits(bs, frame->coding_type, 2);
789    
790          // time_base = 0  write n x PutBit(1), PutBit(0)          // time_base = 0  write n x PutBit(1), PutBit(0)
 #ifdef BFRAMES  
         for (i = 0; i < frame->seconds; i++) {  
                 BitstreamPutBit(bs, 1);  
         }  
         BitstreamPutBit(bs, 0);  
 #else  
791          for (i = 0; i < frame->seconds; i++) {          for (i = 0; i < frame->seconds; i++) {
792                  BitstreamPutBit(bs, 1);                  BitstreamPutBit(bs, 1);
793          }          }
794          BitstreamPutBit(bs, 0);          BitstreamPutBit(bs, 0);
 //      BitstreamPutBits(bs, 0, 1);  
 #endif  
795    
796          WRITE_MARKER();          WRITE_MARKER();
797    
798          // time_increment: value=nth_of_sec, nbits = log2(resolution)          // time_increment: value=nth_of_sec, nbits = log2(resolution)
 #ifdef BFRAMES  
799          BitstreamPutBits(bs, frame->ticks, log2bin(pParam->fbase));          BitstreamPutBits(bs, frame->ticks, log2bin(pParam->fbase));
         /*DPRINTF("[%i:%i] %c\n", frame->seconds, frame->ticks,  
                         frame->coding_type == I_VOP ? 'I' : frame->coding_type ==  
                         P_VOP ? 'P' : 'B');*/  
 #else  
         BitstreamPutBits(bs, frame->ticks, log2bin(pParam->fbase));  
 //      BitstreamPutBits(bs, 1, 1);  
 #endif  
800    
801          WRITE_MARKER();          WRITE_MARKER();
802    

Legend:
Removed from v.469  
changed lines
  Added in v.655

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4