[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.39.2.21, Wed Dec 3 02:22:30 2003 UTC revision 1.42.2.1, Sun May 2 10:33:22 2004 UTC
# Line 1016  Line 1016 
1016    
1017                          /* read xvid bitstream version */                          /* read xvid bitstream version */
1018                          if(strncmp(tmp, "XviD", 4) == 0) {                          if(strncmp(tmp, "XviD", 4) == 0) {
1019                                    if (tmp[strlen(tmp)-1] == 'C') {
1020                                            sscanf(tmp, "XviD%dC", &dec->bs_version);
1021                                            dec->cartoon_mode = 1;
1022                                    }
1023                                    else
1024                                  sscanf(tmp, "XviD%d", &dec->bs_version);                                  sscanf(tmp, "XviD%d", &dec->bs_version);
1025    
1026                                  DPRINTF(XVID_DEBUG_HEADER, "xvid bitstream version=%i", dec->bs_version);                                  DPRINTF(XVID_DEBUG_HEADER, "xvid bitstream version=%i", dec->bs_version);
1027                          }                          }
1028    
# Line 1075  Line 1081 
1081  */  */
1082  void  void
1083  BitstreamWriteVolHeader(Bitstream * const bs,  BitstreamWriteVolHeader(Bitstream * const bs,
1084                                                  const MBParam * pParam)                                                  const MBParam * pParam,
1085                                                    const FRAMEINFO * const frame)
1086  {  {
1087          static const unsigned int vo_id = 0;          static const unsigned int vo_id = 0;
1088          static const unsigned int vol_id = 0;          static const unsigned int vol_id = 0;
1089          int vol_ver_id = 1;          int vol_ver_id = 1;
1090          int vol_type_ind = VIDOBJLAY_TYPE_SIMPLE;          int vol_type_ind = VIDOBJLAY_TYPE_SIMPLE;
1091            int vol_profile = pParam->profile;
1092    
1093          if ( (pParam->vol_flags & XVID_VOL_QUARTERPEL) ||          if ( (pParam->vol_flags & XVID_VOL_QUARTERPEL) ||
1094           (pParam->vol_flags & XVID_VOL_GMC) ||           (pParam->vol_flags & XVID_VOL_GMC) ||
# Line 1106  Line 1114 
1114           * byte aligned, and that always 1-8 padding bits have been written           * byte aligned, and that always 1-8 padding bits have been written
1115           */           */
1116    
1117        if (!vol_profile) {
1118                    /* Profile was not set by client app, use the more permissive profile
1119                     * compatible with the vol_type_id */
1120                    switch(vol_type_ind) {
1121                    case VIDOBJLAY_TYPE_ASP:
1122                            vol_profile = 0xf5; /* ASP level 5 */
1123                            break;
1124                    case VIDOBJLAY_TYPE_ART_SIMPLE:
1125                            vol_profile = 0x94; /* ARTS level 4 */
1126                            break;
1127                    default:
1128                            vol_profile = 0x03; /* Simple level 3 */
1129                            break;
1130                    }
1131            }
1132    
1133            /* Write the VOS header */
1134      BitstreamPutBits(bs, VISOBJSEQ_START_CODE, 32);      BitstreamPutBits(bs, VISOBJSEQ_START_CODE, 32);
1135      BitstreamPutBits(bs, pParam->profile, 8);          BitstreamPutBits(bs, vol_profile, 8);   /* profile_and_level_indication */
1136    
1137    
1138          /* visual_object_start_code */          /* visual_object_start_code */
1139          BitstreamPad(bs);          BitstreamPad(bs);
# Line 1171  Line 1197 
1197    
1198      if (pParam->fincr>0) {      if (pParam->fincr>0) {
1199              BitstreamPutBit(bs, 1);             /* fixed_vop_rate = 1 */              BitstreamPutBit(bs, 1);             /* fixed_vop_rate = 1 */
1200              BitstreamPutBits(bs, pParam->fincr, log2bin(pParam->fbase-1));      /* fixed_vop_time_increment */                  BitstreamPutBits(bs, pParam->fincr, MAX(log2bin(pParam->fbase-1),1));   /* fixed_vop_time_increment */
1201      }else{      }else{
1202          BitstreamPutBit(bs, 0);         /* fixed_vop_rate = 0 */          BitstreamPutBit(bs, 0);         /* fixed_vop_rate = 0 */
1203      }      }
# Line 1240  Line 1266 
1266          BitstreamPadAlways(bs); /* next_start_code(); */          BitstreamPadAlways(bs); /* next_start_code(); */
1267    
1268          /* fake divx5 id, to ensure compatibility with divx5 decoder */          /* fake divx5 id, to ensure compatibility with divx5 decoder */
1269  #define DIVX5_ID "DivX000b000p"  #define DIVX5_ID "DivX999b000p"
1270          if (pParam->max_bframes > 0 && (pParam->global_flags & XVID_GLOBAL_PACKED)) {          if (pParam->max_bframes > 0 && (pParam->global_flags & XVID_GLOBAL_PACKED)) {
1271                  BitstreamWriteUserData(bs, DIVX5_ID, strlen(DIVX5_ID));                  BitstreamWriteUserData(bs, DIVX5_ID, strlen(DIVX5_ID));
1272          }          }
1273    
1274          /* xvid id */          /* xvid id */
1275  #define XVID_ID "XviD" XVID_BS_VERSION  #define XVID_ID "XviD" XVID_BS_VERSION
1276          BitstreamWriteUserData(bs, XVID_ID, strlen(XVID_ID));          {
1277                    char xvid_id_string[100];
1278    
1279                    if (frame->vop_flags & XVID_VOP_CARTOON)
1280                            sprintf(xvid_id_string, "%sC", XVID_ID);
1281                    else
1282                            sprintf(xvid_id_string, "%s", XVID_ID);
1283    
1284                    BitstreamWriteUserData(bs, xvid_id_string, strlen(xvid_id_string));
1285            }
1286  }  }
1287    
1288    
# Line 1288  Line 1323 
1323          WRITE_MARKER();          WRITE_MARKER();
1324    
1325          /* time_increment: value=nth_of_sec, nbits = log2(resolution) */          /* time_increment: value=nth_of_sec, nbits = log2(resolution) */
1326            BitstreamPutBits(bs, frame->ticks, MAX(log2bin(pParam->fbase-1), 1));
         BitstreamPutBits(bs, frame->ticks, log2bin(pParam->fbase-1));  
1327  #if 0  #if 0
1328          DPRINTF("[%i:%i] %c",          DPRINTF("[%i:%i] %c",
1329                          frame->seconds, frame->ticks,                          frame->seconds, frame->ticks,

Legend:
Removed from v.1.39.2.21  
changed lines
  Added in v.1.42.2.1

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