[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.20, Sun Nov 30 16:13:15 2003 UTC revision 1.39.2.24, Fri Jan 30 13:12:40 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 (pParam->profile) {      if (!vol_profile) {
1118              BitstreamPutBits(bs, VISOBJSEQ_START_CODE, 32);                  /* Profile was not set by client app, use the more permissive profile
1119              BitstreamPutBits(bs, pParam->profile, 8);                   * 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);
1135            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);
1140          BitstreamPutBits(bs, VISOBJ_START_CODE, 32);          BitstreamPutBits(bs, VISOBJ_START_CODE, 32);
# Line 1242  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    

Legend:
Removed from v.1.39.2.20  
changed lines
  Added in v.1.39.2.24

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