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

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

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

revision 1.7, Thu Apr 25 06:55:00 2002 UTC revision 1.9, Fri May 3 00:45:10 2002 UTC
# Line 41  Line 41 
41    *                                                                                                                                                        *    *                                                                                                                                                        *
42    *  Revision history:                                                         *    *  Revision history:                                                         *
43    *                                                                                                                                                        *    *                                                                                                                                                        *
44      *  01.05.2002 added BVOP support to BitstreamWriteVopHeader
45    *  15.04.2002 rewrite log2bin use asm386  By MinChen <chenm001@163.com>      *    *  15.04.2002 rewrite log2bin use asm386  By MinChen <chenm001@163.com>      *
46    *  26.03.2002 interlacing support                                                                                        *    *  26.03.2002 interlacing support                                                                                        *
47    *  03.03.2002 qmatrix writing                                                                                            *    *  03.03.2002 qmatrix writing                                                                                            *
# Line 114  Line 115 
115  returns coding_type, or -1 if error  returns coding_type, or -1 if error
116  */  */
117    
118  int BitstreamReadHeaders(Bitstream * bs, DECODER * dec, uint32_t * rounding, uint32_t * quant, uint32_t * fcode, uint32_t * intra_dc_threshold)  int BitstreamReadHeaders(Bitstream * bs, DECODER * dec, uint32_t * rounding, uint32_t * quant, uint32_t * fcode_forward, uint32_t * fcode_backward, uint32_t * intra_dc_threshold)
119  {  {
120          uint32_t vol_ver_id;          uint32_t vol_ver_id;
121          uint32_t time_inc_resolution;          static uint32_t time_increment_resolution;
122          uint32_t coding_type;          uint32_t coding_type;
123          uint32_t start_code;          uint32_t start_code;
124            uint32_t time_incr=0;
125            int32_t  time_increment;
126    
127          do          do
128          {          {
# Line 248  Line 251 
251    
252                          READ_MARKER();                          READ_MARKER();
253    
254                          time_inc_resolution = BitstreamGetBits(bs, 16); // vop_time_increment_resolution  // *************************** for decode B-frame time ***********************
255                          time_inc_resolution--;                          time_increment_resolution = BitstreamGetBits(bs, 16);   // vop_time_increment_resolution
256                          if (time_inc_resolution > 0)                          time_increment_resolution--;
257                            //DEBUG1("time_increment_resolution=",time_increment_resolution);
258                            if (time_increment_resolution > 0)
259                          {                          {
260                                  dec->time_inc_bits = log2bin(time_inc_resolution);                                  dec->time_inc_bits = log2bin(time_increment_resolution);
261                          }                          }
262                          else                          else
263                          {                          {
# Line 416  Line 421 
421                                          }                                          }
422                                  }                                  }
423    
424                                  if (BitstreamGetBit(bs))        // scalability                                  if ((dec->scalability=BitstreamGetBit(bs)))     // scalability
425                                  {                                  {
426                                          // TODO                                          // TODO
427                                          DEBUG("TODO: scalability");                                          DEBUG("TODO: scalability");
# Line 462  Line 467 
467                          coding_type = BitstreamGetBits(bs, 2);          // vop_coding_type                          coding_type = BitstreamGetBits(bs, 2);          // vop_coding_type
468                          //DEBUG1("coding_type", coding_type);                          //DEBUG1("coding_type", coding_type);
469    
470                          while (BitstreamGetBit(bs) != 0) ;                      // time_base  // *************************** for decode B-frame time ***********************
471                            while (BitstreamGetBit(bs) != 0)                        // time_base
472                                    time_incr++;
473    
474                          READ_MARKER();                          READ_MARKER();
475    
# Line 470  Line 477 
477                          //DEBUG1("vop_time_incr", BitstreamShowBits(bs, dec->time_inc_bits));                          //DEBUG1("vop_time_incr", BitstreamShowBits(bs, dec->time_inc_bits));
478                          if (dec->time_inc_bits)                          if (dec->time_inc_bits)
479                          {                          {
480                                  BitstreamSkip(bs, dec->time_inc_bits);  // vop_time_increment                                  //BitstreamSkip(bs, dec->time_inc_bits);        // vop_time_increment
481                                    time_increment = (BitstreamGetBits(bs, dec->time_inc_bits));    // vop_time_increment
482                            }
483                            if(coding_type != B_VOP){
484                                dec->last_time_base = dec->time_base;
485                                    dec->time_base += time_incr;
486                                    dec->time = dec->time_base*time_increment_resolution + time_increment;
487                                    dec->time_pp= (uint32_t)(dec->time - dec->last_non_b_time);
488                                    dec->last_non_b_time= dec->time;
489                            }else{
490                                    dec->time = (dec->last_time_base + time_incr)*time_increment_resolution + time_increment;
491                                    dec->time_bp= (uint32_t)(dec->last_non_b_time - dec->time);
492                          }                          }
493                            //DEBUG1("time_increment=",time_increment);
494    
495                          READ_MARKER();                          READ_MARKER();
496    
# Line 485  Line 504 
504                          }                          }
505                          */                          */
506    
507                          if (coding_type != I_VOP)                          // fix a little bug by MinChen <chenm002@163.com>
508                            if ((dec->shape != VIDOBJLAY_SHAPE_BINARY_ONLY) && (coding_type == P_VOP))
509                          {                          {
510                                  *rounding = BitstreamGetBit(bs);        // rounding_type                                  *rounding = BitstreamGetBit(bs);        // rounding_type
511                                  //DEBUG1("rounding", *rounding);                                  //DEBUG1("rounding", *rounding);
# Line 544  Line 564 
564    
565                          if (coding_type != I_VOP)                          if (coding_type != I_VOP)
566                          {                          {
567                                  *fcode = BitstreamGetBits(bs, 3);                       // fcode_forward                                  *fcode_forward = BitstreamGetBits(bs, 3);               // fcode_forward
568                          }                          }
569    
570                          if (coding_type == B_VOP)                          if (coding_type == B_VOP)
571                          {                          {
572                                  // *fcode_backward = BitstreamGetBits(bs, 3);           // fcode_backward                                  *fcode_backward = BitstreamGetBits(bs, 3);              // fcode_backward
573                            }
574                            if (!dec->scalability){
575                                    if ((dec->shape != VIDOBJLAY_SHAPE_RECTANGULAR) && (coding_type != I_VOP)){
576                                            BitstreamSkip(bs, 1);           // vop_shape_coding_type
577                                    }
578                          }                          }
579                          return coding_type;                          return coding_type;
580                  }                  }
# Line 683  Line 708 
708                                                  const MBParam * pParam,                                                  const MBParam * pParam,
709                                                  const FRAMEINFO * frame)                                                  const FRAMEINFO * frame)
710  {  {
711    #ifdef BFRAMES
712            uint32_t i;
713    #endif
714      BitstreamPad(bs);      BitstreamPad(bs);
715      BitstreamPutBits(bs, VOP_START_CODE, 32);      BitstreamPutBits(bs, VOP_START_CODE, 32);
716    
717      BitstreamPutBits(bs, frame->coding_type, 2);      BitstreamPutBits(bs, frame->coding_type, 2);
718    
719          // time_base = 0  write n x PutBit(1), PutBit(0)          // time_base = 0  write n x PutBit(1), PutBit(0)
720    #ifdef BFRAMES
721            for (i = 0; i < frame->seconds; i++)
722            {
723                    BitstreamPutBit(bs, 1);
724            }
725            BitstreamPutBit(bs, 0);
726    #else
727          BitstreamPutBits(bs, 0, 1);          BitstreamPutBits(bs, 0, 1);
728    #endif
729    
730          WRITE_MARKER();          WRITE_MARKER();
731    
732          // time_increment: value=nth_of_sec, nbits = log2(resolution)          // time_increment: value=nth_of_sec, nbits = log2(resolution)
733    #ifdef BFRAMES
734            BitstreamPutBits(bs, frame->ticks, 5);
735            dprintf("[%i:%i] %c\n", frame->seconds, frame->ticks, frame->coding_type == I_VOP ? 'I' : frame->coding_type == P_VOP ? 'P' : 'B');
736    #else
737          BitstreamPutBits(bs, 1, 1);          BitstreamPutBits(bs, 1, 1);
738    #endif
739    
740          WRITE_MARKER();          WRITE_MARKER();
741    
# Line 714  Line 755 
755          BitstreamPutBits(bs, frame->quant, 5);                  // quantizer          BitstreamPutBits(bs, frame->quant, 5);                  // quantizer
756    
757          if (frame->coding_type != I_VOP)          if (frame->coding_type != I_VOP)
758                  BitstreamPutBits(bs, frame->fcode, 3);          // fixed_code = [1,4]                  BitstreamPutBits(bs, frame->fcode, 3);          // forward_fixed_code
759    
760            if (frame->coding_type == B_VOP)
761                    BitstreamPutBits(bs, frame->bcode, 3);          // backward_fixed_code
762    
763  }  }

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.9

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