[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.28.2.8, Sun Dec 8 06:43:34 2002 UTC revision 1.28.2.15, Fri Jan 3 16:25:14 2003 UTC
# Line 67  Line 67 
67    
68    
69  #include <string.h>  #include <string.h>
70    #include <stdio.h>
71    
72  #include "bitstream.h"  #include "bitstream.h"
73  #include "zigzag.h"  #include "zigzag.h"
74  #include "../quant/quant_matrix.h"  #include "../quant/quant_matrix.h"
# Line 77  Line 79 
79  log2bin(uint32_t value)  log2bin(uint32_t value)
80  {  {
81  /* Changed by Chenm001 */  /* Changed by Chenm001 */
82  #ifndef WIN32  #if !defined(_MSC_VER)
83          int n = 0;          int n = 0;
84    
85          while (value) {          while (value) {
# Line 171  Line 173 
173    
174          if (dec->shape != VIDOBJLAY_SHAPE_BINARY_ONLY)          if (dec->shape != VIDOBJLAY_SHAPE_BINARY_ONLY)
175          {          {
176                  *quant = BitstreamGetBits(bs, 5);       /* quant_scale */                  *quant = BitstreamGetBits(bs, dec->quant_bits); /* quant_scale */
177                  DPRINTF(DPRINTF_HEADER, "quant %i", *quant);                  DPRINTF(DPRINTF_HEADER, "quant %i", *quant);
178          }          }
179    
# Line 324  Line 326 
326  {  {
327          ESTIMATION * e = &dec->estimation;          ESTIMATION * e = &dec->estimation;
328    
329          if (e->method == 0)          if (e->method == 0 || e->method == 1)
330          {          {
331                  if (coding_type == I_VOP) {                  if (coding_type == I_VOP) {
332                          if (e->opaque)          BitstreamSkip(bs, 8);   /* dcecs_opaque */                          if (e->opaque)          BitstreamSkip(bs, 8);   /* dcecs_opaque */
# Line 462  Line 464 
464                          DPRINTF(DPRINTF_STARTCODE, "</visual_object_sequence>");                          DPRINTF(DPRINTF_STARTCODE, "</visual_object_sequence>");
465    
466                  } else if (start_code == VISOBJ_START_CODE) {                  } else if (start_code == VISOBJ_START_CODE) {
467                            int visobj_ver_id;
468    
469                          DPRINTF(DPRINTF_STARTCODE, "<visual_object>");                          DPRINTF(DPRINTF_STARTCODE, "<visual_object>");
470    
471                          BitstreamSkip(bs, 32);  // visual_object_start_code                          BitstreamSkip(bs, 32);  // visual_object_start_code
472                          if (BitstreamGetBit(bs))        // is_visual_object_identified                          if (BitstreamGetBit(bs))        // is_visual_object_identified
473                          {                          {
474                                  vol_ver_id = BitstreamGetBits(bs, 4);   // visual_object_ver_id                                  visobj_ver_id = BitstreamGetBits(bs, 4);        // visual_object_ver_id
475                                  DPRINTF(DPRINTF_HEADER,"ver_id %i", vol_ver_id);                                  DPRINTF(DPRINTF_HEADER,"visobj_ver_id %i", visobj_ver_id);
476                                  BitstreamSkip(bs, 3);   // visual_object_priority                                  BitstreamSkip(bs, 3);   // visual_object_priority
477                          } else {                          } else {
478                                  vol_ver_id = 1;                                  visobj_ver_id = 1;
479                          }                          }
480    
481                          if (BitstreamShowBits(bs, 4) != VISOBJ_TYPE_VIDEO)      // visual_object_type                          if (BitstreamShowBits(bs, 4) != VISOBJ_TYPE_VIDEO)      // visual_object_type
# Line 568  Line 571 
571                                          BitstreamSkip(bs, 15);  // latter_half_vbv_occupancy                                          BitstreamSkip(bs, 15);  // latter_half_vbv_occupancy
572                                          READ_MARKER();                                          READ_MARKER();
573                                  }                                  }
574                            }else{
575                                    dec->low_delay = dec->low_delay_default;
576                          }                          }
577    
578                          dec->shape = BitstreamGetBits(bs, 2);   // video_object_layer_shape                          dec->shape = BitstreamGetBits(bs, 2);   // video_object_layer_shape
# Line 872  Line 877 
877                                  dec->time_bp = (uint32_t)                                  dec->time_bp = (uint32_t)
878                                          (dec->time_inc_resolution + dec->last_non_b_time - dec->time)%dec->time_inc_resolution;                                          (dec->time_inc_resolution + dec->last_non_b_time - dec->time)%dec->time_inc_resolution;
879                          }                          }
880                            DPRINTF(DPRINTF_HEADER,"time_pp=%i", dec->time_pp);
881                            DPRINTF(DPRINTF_HEADER,"time_bp=%i", dec->time_bp);
882    
883                          READ_MARKER();                          READ_MARKER();
884    
# Line 1108  Line 1115 
1115                                                  const MBParam * pParam,                                                  const MBParam * pParam,
1116                                                  const FRAMEINFO * const frame)                                                  const FRAMEINFO * const frame)
1117  {  {
1118            static const unsigned int vo_id = 0;
1119            static const unsigned int vol_id = 0;
1120          int vol_ver_id=1;          int vol_ver_id=1;
1121            int profile = 0x03;     /* simple profile/level 3 */
1122    
1123          if ( (pParam->m_quarterpel) || (frame->global_flags & XVID_GMC) )          if ( pParam->m_quarterpel ||  (frame->global_flags & XVID_GMC) ||
1124                     (pParam->global & XVID_GLOBAL_REDUCED))
1125                  vol_ver_id = 2;                  vol_ver_id = 2;
1126    
1127            if ((pParam->global & XVID_GLOBAL_REDUCED))
1128                    profile = 0x93; /* advanced realtime simple profile/level 3 */
1129    
1130            if (pParam->m_quarterpel ||  (frame->global_flags & XVID_GMC))
1131                    profile = 0xf3; /* advanced simple profile/level 2 */
1132    
1133            // visual_object_sequence_start_code
1134            BitstreamPad(bs);
1135            BitstreamPutBits(bs, VISOBJSEQ_START_CODE, 32);
1136            BitstreamPutBits(bs, profile, 8);
1137    
1138            // visual_object_start_code
1139            BitstreamPad(bs);
1140            BitstreamPutBits(bs, VISOBJ_START_CODE, 32);
1141            BitstreamPutBits(bs, 0, 1);             // is_visual_object_identifier
1142            BitstreamPutBits(bs, VISOBJ_TYPE_VIDEO, 4);             // visual_object_type
1143    
1144          // video object_start_code & vo_id          // video object_start_code & vo_id
1145          BitstreamPad(bs);          BitstreamPad(bs);
1146          BitstreamPutBits(bs, VO_START_CODE, 27);          BitstreamPutBits(bs, VIDOBJ_START_CODE|(vo_id&0x5), 32);
         BitstreamPutBits(bs, 0, 5);  
1147    
1148          // video_object_layer_start_code & vol_id          // video_object_layer_start_code & vol_id
1149          BitstreamPutBits(bs, VOL_START_CODE, 28);          BitstreamPutBits(bs, VIDOBJLAY_START_CODE|(vol_id&0x4), 32);
         BitstreamPutBits(bs, 0, 4);  
1150    
1151          BitstreamPutBit(bs, 0);         // random_accessible_vol          BitstreamPutBit(bs, 0);         // random_accessible_vol
1152          BitstreamPutBits(bs, 0, 8);     // video_object_type_indication          BitstreamPutBits(bs, 0, 8);     // video_object_type_indication
# Line 1222  Line 1248 
1248          if (vol_ver_id != 1)          if (vol_ver_id != 1)
1249          {          {
1250                  BitstreamPutBit(bs, 0);         // newpred_enable                  BitstreamPutBit(bs, 0);         // newpred_enable
1251                  BitstreamPutBit(bs, 0);         // reduced_resolution_vop_enabled  
1252                    BitstreamPutBit(bs, (pParam->global & XVID_GLOBAL_REDUCED)?1:0);
1253                                                                            /* reduced_resolution_vop_enabled */
1254          }          }
1255    
1256          BitstreamPutBit(bs, 0);         // scalability          BitstreamPutBit(bs, 0);         // scalability
1257    
1258            /* fake divx5 id, to ensure compatibility with divx5 decoder */
1259    #define DIVX5_ID "DivX501b481p"
1260            if (pParam->max_bframes > 0 && (pParam->global & XVID_GLOBAL_PACKED)) {
1261                    BitstreamWriteUserData(bs, DIVX5_ID, strlen(DIVX5_ID));
1262            }
1263    
1264            /* xvid id */
1265    #define XVID_ID "XviD" XVID_BS_VERSION
1266            BitstreamWriteUserData(bs, XVID_ID, strlen(XVID_ID));
1267  }  }
1268    
1269    
# Line 1234  Line 1271 
1271    write vop header    write vop header
1272  */  */
1273  void  void
1274  BitstreamWriteVopHeader(Bitstream * const bs,  BitstreamWriteVopHeader(
1275                                                    Bitstream * const bs,
1276                                                  const MBParam * pParam,                                                  const MBParam * pParam,
1277                                                  const FRAMEINFO * const frame,                                                  const FRAMEINFO * const frame,
1278                                                  int vop_coded)                                                  int vop_coded)
# Line 1273  Line 1311 
1311          if ( (frame->coding_type == P_VOP) || (frame->coding_type == S_VOP) )          if ( (frame->coding_type == P_VOP) || (frame->coding_type == S_VOP) )
1312                  BitstreamPutBits(bs, frame->rounding_type, 1);                  BitstreamPutBits(bs, frame->rounding_type, 1);
1313    
1314            if ((pParam->global & XVID_GLOBAL_REDUCED))
1315                    BitstreamPutBit(bs, (frame->global_flags & XVID_REDUCED)?1:0);
1316    
1317          BitstreamPutBits(bs, 0, 3);     // intra_dc_vlc_threshold          BitstreamPutBits(bs, 0, 3);     // intra_dc_vlc_threshold
1318    
1319          if (frame->global_flags & XVID_INTERLACING) {          if (frame->global_flags & XVID_INTERLACING) {

Legend:
Removed from v.1.28.2.8  
changed lines
  Added in v.1.28.2.15

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