[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.19, Wed Nov 19 15:42:38 2003 UTC revision 1.39.2.23, Sat Dec 20 11:54:33 2003 UTC
# Line 662  Line 662 
662                                                  DPRINTF(XVID_DEBUG_HEADER, "load_intra_quant_mat\n");                                                  DPRINTF(XVID_DEBUG_HEADER, "load_intra_quant_mat\n");
663    
664                                                  bs_get_matrix(bs, matrix);                                                  bs_get_matrix(bs, matrix);
665                                                  set_intra_matrix(matrix);                                                  set_intra_matrix(dec->mpeg_quant_matrices, matrix);
666                                          } else                                          } else
667                                                  set_intra_matrix(get_default_intra_matrix());                                                  set_intra_matrix(dec->mpeg_quant_matrices, get_default_intra_matrix());
668    
669                                          if (BitstreamGetBit(bs))        /* load_inter_quant_mat */                                          if (BitstreamGetBit(bs))        /* load_inter_quant_mat */
670                                          {                                          {
# Line 673  Line 673 
673                                                  DPRINTF(XVID_DEBUG_HEADER, "load_inter_quant_mat\n");                                                  DPRINTF(XVID_DEBUG_HEADER, "load_inter_quant_mat\n");
674    
675                                                  bs_get_matrix(bs, matrix);                                                  bs_get_matrix(bs, matrix);
676                                                  set_inter_matrix(matrix);                                                  set_inter_matrix(dec->mpeg_quant_matrices, matrix);
677                                          } else                                          } else
678                                                  set_inter_matrix(get_default_inter_matrix());                                                  set_inter_matrix(dec->mpeg_quant_matrices, get_default_inter_matrix());
679    
680                                          if (dec->shape == VIDOBJLAY_SHAPE_GRAYSCALE) {                                          if (dec->shape == VIDOBJLAY_SHAPE_GRAYSCALE) {
681                                                  DPRINTF(XVID_DEBUG_ERROR, "greyscale matrix not supported\n");                                                  DPRINTF(XVID_DEBUG_ERROR, "greyscale matrix not supported\n");
# 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 1053  Line 1059 
1059    
1060  static void  static void
1061  bs_put_matrix(Bitstream * bs,  bs_put_matrix(Bitstream * bs,
1062                            const int16_t * matrix)                            const uint16_t * matrix)
1063  {  {
1064          int i, j;          int i, j;
1065          const int last = matrix[scan_tables[0][63]];          const int last = matrix[scan_tables[0][63]];
# 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 1211  Line 1235 
1235          BitstreamPutBit(bs, pParam->vol_flags & XVID_VOL_MPEGQUANT);          BitstreamPutBit(bs, pParam->vol_flags & XVID_VOL_MPEGQUANT);
1236    
1237          if ((pParam->vol_flags & XVID_VOL_MPEGQUANT)) {          if ((pParam->vol_flags & XVID_VOL_MPEGQUANT)) {
1238                  BitstreamPutBit(bs, get_intra_matrix_status()); /* load_intra_quant_mat */                  BitstreamPutBit(bs, is_custom_intra_matrix(pParam->mpeg_quant_matrices));       /* load_intra_quant_mat */
1239                  if (get_intra_matrix_status()) {                  if(is_custom_intra_matrix(pParam->mpeg_quant_matrices))
1240                          bs_put_matrix(bs, get_intra_matrix());                          bs_put_matrix(bs, get_intra_matrix(pParam->mpeg_quant_matrices));
1241                  }  
1242                    BitstreamPutBit(bs, is_custom_inter_matrix(pParam->mpeg_quant_matrices));       /* load_inter_quant_mat */
1243                  BitstreamPutBit(bs, get_inter_matrix_status()); /* load_inter_quant_mat */                  if(is_custom_inter_matrix(pParam->mpeg_quant_matrices))
1244                  if (get_inter_matrix_status()) {                          bs_put_matrix(bs, get_inter_matrix(pParam->mpeg_quant_matrices));
                         bs_put_matrix(bs, get_inter_matrix());  
                 }  
   
1245          }          }
1246    
1247          if (vol_ver_id != 1) {          if (vol_ver_id != 1) {
# Line 1252  Line 1273 
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.19  
changed lines
  Added in v.1.39.2.23

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