/*===========================================================================* * * Tune_Init * * Do any setup needed before coding stream * * RETURNS: nothing * * SIDE EFFECTS: varies * *===========================================================================*/ void Tune_Init() { int i; /* Just check for each, and do whats needed */ if (collect_quant) { if (!pureDCT) { pureDCT = TRUE; init_idctref(); init_fdct(); } fprintf(collect_quant_fp, "# %s\n", outputFileName); fprintf(collect_quant_fp, "#"); for (i=0; i<64; i++) fprintf(collect_quant_fp, " %d", qtable[i]); fprintf(collect_quant_fp, "\n#"); for (i=0; i<64; i++) fprintf(collect_quant_fp, " %d", niqtable[i]); fprintf(collect_quant_fp, "\n# %d %d %d\n\n", GetIQScale(), GetPQScale(), GetBQScale()); } if (DoLaplace) { if (!pureDCT) { pureDCT = TRUE; init_idctref(); init_fdct(); } decodeRefFrames = TRUE; printSNR = TRUE; } }
/** * Initialize decoder * * */ void initdecoder() { int i, cc, size; /* clip table */ if (!(clp=(unsigned char *)malloc(1024))) error("malloc failed\n"); clp += 384; for (i=-384; i<640; i++) clp[i] = (i<0) ? 0 : ((i>255) ? 255 : i); /* MPEG-1 = TMN parameters */ matrix_coefficients = 5; switch (source_format) { case (SF_SQCIF): horizontal_size = 128; vertical_size = 96; break; case (SF_QCIF): horizontal_size = 176; vertical_size = 144; break; case (SF_CIF): horizontal_size = 352; vertical_size = 288; break; case (SF_4CIF): horizontal_size = 704; vertical_size = 576; break; case (SF_16CIF): horizontal_size = 1408; vertical_size = 1152; break; default: if(trace) fputs("ERROR: Illegal input format\n",dlog); return; break; } mb_width = horizontal_size/16; mb_height = vertical_size/16; coded_picture_width = horizontal_size; coded_picture_height = vertical_size; chrom_width = coded_picture_width>>1; chrom_height = coded_picture_height>>1; blk_cnt = 6; for (cc=0; cc<3; cc++) { // Find out size... if (cc==0) size = coded_picture_width*coded_picture_height; else size = chrom_width*chrom_height; // Allocate memory if (!(refframe[cc] = (unsigned char *)malloc(size))) error("malloc failed\n"); if (!(oldrefframe[cc] = (unsigned char *)malloc(size))) error("malloc failed\n"); if (!(bframe[cc] = (unsigned char *)malloc(size))) error("malloc failed\n"); } for (cc=0; cc<3; cc++) { if (cc==0) { size = (coded_picture_width+64)*(coded_picture_height+64); if (!(edgeframeorig[cc] = (unsigned char *)malloc(size))) error("malloc failed\n"); edgeframe[cc] = edgeframeorig[cc] + (coded_picture_width+64) * 32 + 32; } else { size = (chrom_width+32)*(chrom_height+32); if (!(edgeframeorig[cc] = (unsigned char *)malloc(size))) error("malloc failed\n"); edgeframe[cc] = edgeframeorig[cc] + (chrom_width+32) * 16 + 16; } } /* IDCT */ if (refidct) init_idctref(); else init_idct(); }
*/ void initdecoder() { int i, cc, size; /* clip table */ if (!(clp=(unsigned char *)malloc(1024))) error((char*)"malloc failed\n"); clp += 384; for (i=-384; i<640; i++) clp[i] = (i<0) ? 0 : ((i>255) ? 255 : i); /* MPEG-1 = TMN parameters */ matrix_coefficients = 5; switch (source_format) { case (SF_SQCIF): horizontal_size = 128; vertical_size = 96; break; case (SF_QCIF): horizontal_size = 176; vertical_size = 144; break; case (SF_CIF): horizontal_size = 352; vertical_size = 288; break; case (SF_4CIF): horizontal_size = 704; vertical_size = 576; break; case (SF_16CIF): horizontal_size = 1408; vertical_size = 1152; break; default: myLog.WriteLog((char*)"initdecoder",(char*)"ERROR: Illegal input format"); return; break; } char slog[128]; sprintf(slog, "H.Size:%d V.Size:%d", horizontal_size, vertical_size); myLog.WriteLog((char*)"initdecoder",slog); mb_width = horizontal_size/16; mb_height = vertical_size/16; coded_picture_width = horizontal_size; coded_picture_height = vertical_size; chrom_width = coded_picture_width>>1; chrom_height = coded_picture_height>>1; blk_cnt = 6; int iSize1, iSize2; size = coded_picture_width*coded_picture_height; iSize1 = size; iSize2 = chrom_width*chrom_height; size += (iSize2*2); if (!(refframe[0] = (unsigned char *)malloc(size))) error((char*)"malloc failed\n"); else{ unsigned char *p = refframe[0]; refframe[1] = p+iSize1; refframe[2] = p+iSize1+iSize2; } if (!(oldrefframe[0] = (unsigned char *)malloc(size))) error((char*)"malloc failed\n"); else{ unsigned char *p = oldrefframe[0]; oldrefframe[1] = p+iSize1; oldrefframe[2] = p+iSize1+iSize2; } if (!(bframe[0] = (unsigned char *)malloc(size))) error((char*)"malloc failed\n"); else{ unsigned char *p = bframe[0]; bframe[1] = p+iSize1; bframe[2] = p+iSize1+iSize2; } /* for (cc=0; cc<3; cc++) { // Find out size... if (cc==0) size = coded_picture_width*coded_picture_height; else size = chrom_width*chrom_height; // Allocate memory if (!(refframe[cc] = (unsigned char *)malloc(size))) error((char*)"malloc failed\n"); if (!(oldrefframe[cc] = (unsigned char *)malloc(size))) error((char*)"malloc failed\n"); if (!(bframe[cc] = (unsigned char *)malloc(size))) error((char*)"malloc failed\n"); } */ for (cc=0; cc<3; cc++) { if (cc==0) { size = (coded_picture_width+64)*(coded_picture_height+64); if (!(edgeframeorig[cc] = (unsigned char *)malloc(size))) error((char*)"malloc failed\n"); edgeframe[cc] = edgeframeorig[cc] + (coded_picture_width+64) * 32 + 32; } else { size = (chrom_width+32)*(chrom_height+32); if (!(edgeframeorig[cc] = (unsigned char *)malloc(size))) error((char*)"malloc failed\n"); edgeframe[cc] = edgeframeorig[cc] + (chrom_width+32) * 16 + 16; } } /* IDCT */ if (refidct) init_idctref(); else init_idct();
int InitH263Encoder(CParam *params) { Global.pic = (Pict *)malloc(sizeof(Pict)); if(!Global.pic) { return -1; } Global.pic->unrestricted_mv_mode = DEF_UMV_MODE; Global.pic->use_gobsync = DEF_INSERT_SYNC; Global.pic->PB = 0; Global.pic->TR = 0; Global.pic->QP_mean = 0.0; if(params->format == CPARAM_QCIF) { Global.pels = QCIF_YWIDTH; Global.lines = QCIF_YHEIGHT; Global.cpels = QCIF_YWIDTH/2; Global.pic->source_format = SF_QCIF; } else if (params->format == CPARAM_CIF) { Global.pels = CIF_YWIDTH; Global.lines = CIF_YHEIGHT; Global.cpels = CIF_YWIDTH/2; Global.pic->source_format = SF_CIF; } else if (params->format == CPARAM_SQCIF) { Global.pels = SQCIF_YWIDTH; Global.lines = SQCIF_YHEIGHT; Global.cpels = SQCIF_YWIDTH/2; Global.pic->source_format = SF_SQCIF; } else if (params->format == CPARAM_4CIF) { Global.pels = CIF4_YWIDTH; Global.lines = CIF4_YHEIGHT; Global.cpels = CIF4_YWIDTH/2; Global.pic->source_format = SF_4CIF; } else if (params->format == CPARAM_16CIF) { Global.pels = CIF16_YWIDTH; Global.lines = CIF16_YHEIGHT; Global.cpels = CIF16_YWIDTH/2; Global.pic->source_format = SF_16CIF; } else { Global.pels = params->pels; Global.lines = params->lines; Global.cpels = params->pels / 2; Global.pic->source_format = 0; /* ILLEGAL H.263! Use it only for testing */ } Global.mbr = Global.lines / MB_SIZE; Global.mbc = Global.pels / MB_SIZE; Global.uskip = Global.lines*Global.pels; Global.vskip = Global.uskip + Global.lines*Global.pels/4; Global.sizeof_frame = (Global.vskip + Global.lines*Global.pels/4)*sizeof(int); Global.headerlength = DEF_HEADERLENGTH; /* Initalize VLC_tables */ InitHuff(); mwinit(); /* Init motion detection */ init_motion_detection(); #ifdef VERYFASTIDCT init_idct(); /* Do this in case of VERYFASTIDCT */ #elif STANDARDIDCT init_idctref(); /* Do this in case of standard IDCT */ #endif /* Do nothing for FASTIDCT */ /* Set internal variables */ Global.advanced = DEF_ADV_MODE; Global.mv_outside_frame = DEF_UMV_MODE || DEF_ADV_MODE; Global.long_vectors = DEF_UMV_MODE; Global.pb_frames = DEF_PBF_MODE; Global.search_p_frames = DEF_SPIRAL_SEARCH; Global.trace = DEF_WRITE_TRACE; params->half_pixel_searchwindow = CPARAM_DEFAULT_SEARCHWINDOW; params->inter = CPARAM_DEFAULT_INTER; params->search_method = CPARAM_DEFAULT_SEARCH_METHOD; params->advanced_method = CPARAM_DEFAULT_ADVANCED_METHOD; params->Q_inter = CPARAM_DEFAULT_INTER_Q; params->Q_intra = CPARAM_DEFAULT_INTRA_Q; params->interpolated_lum = (unsigned int*)malloc(Global.pels*Global.lines*4*sizeof(int)); if(!params->interpolated_lum) return -1; params->recon =(unsigned int*) malloc(Global.sizeof_frame); if(!params->recon) { free(params->interpolated_lum); free(Global.pic); return -1; } return 0; }