static int xvid_gbl_init(xvid_gbl_init_t * init) { unsigned int cpu_flags; if (XVID_VERSION_MAJOR(init->version) != 1) /* v1.x.x */ return XVID_ERR_VERSION; cpu_flags = (init->cpu_flags & XVID_CPU_FORCE) ? init->cpu_flags : detect_cpu_flags(); #ifdef JZC_SYS if(init_mbcoding_data()) return XVID_ERR_MEMORY; #endif /* Initialize the function pointers */ #ifdef JZC_MXU_OPT #else idct_int32_init(); #endif init_vlc_tables(); /* Fixed Point Forward/Inverse DCT transformations */ #ifdef JZC_MXU_OPT idct = jz_idct_c; #else idct = idct_int32; #endif emms = emms_c; /* Qpel stuff */ xvid_QP_Funcs = &xvid_QP_Funcs_C; xvid_QP_Add_Funcs = &xvid_QP_Add_Funcs_C; xvid_Init_QP(); /* DQuantization functions */ #ifdef JZC_MXU_OPT dequant_h263_intra = dequant_h263_intra_mxu; #else dequant_h263_intra = dequant_h263_intra_c; #endif// dequant_h263_inter = dequant_h263_inter_c; #ifdef JZC_MXU_OPT dequant_mpeg_intra = dequant_mpeg_intra_mxu; #else dequant_mpeg_intra = dequant_mpeg_intra_c; #endif dequant_mpeg_inter = dequant_mpeg_inter_c; /* Block transfer related functions */ transfer_8to16copy = transfer_8to16copy_c; transfer_16to8copy = transfer_16to8copy_c; transfer_8to16sub = transfer_8to16sub_c; transfer_8to16subro = transfer_8to16subro_c; transfer_8to16sub2 = transfer_8to16sub2_c; transfer_8to16sub2ro = transfer_8to16sub2ro_c; transfer_16to8add = transfer_16to8add_c; transfer8x8_copy = transfer8x8_copy_c; transfer8x4_copy = transfer8x4_copy_c; /* Interlacing functions */ // MBFieldTest = MBFieldTest_c; ??? /* Image interpolation related functions */ interpolate8x8_halfpel_h = interpolate8x8_halfpel_h_c; interpolate8x8_halfpel_v = interpolate8x8_halfpel_v_c; interpolate8x8_halfpel_hv = interpolate8x8_halfpel_hv_c; interpolate8x4_halfpel_h = interpolate8x4_halfpel_h_c; interpolate8x4_halfpel_v = interpolate8x4_halfpel_v_c; interpolate8x4_halfpel_hv = interpolate8x4_halfpel_hv_c; interpolate8x8_halfpel_add = interpolate8x8_halfpel_add_c; interpolate8x8_halfpel_h_add = interpolate8x8_halfpel_h_add_c; interpolate8x8_halfpel_v_add = interpolate8x8_halfpel_v_add_c; interpolate8x8_halfpel_hv_add = interpolate8x8_halfpel_hv_add_c; interpolate16x16_lowpass_h = interpolate16x16_lowpass_h_c; interpolate16x16_lowpass_v = interpolate16x16_lowpass_v_c; interpolate16x16_lowpass_hv = interpolate16x16_lowpass_hv_c; interpolate8x8_lowpass_h = interpolate8x8_lowpass_h_c; interpolate8x8_lowpass_v = interpolate8x8_lowpass_v_c; interpolate8x8_lowpass_hv = interpolate8x8_lowpass_hv_c; interpolate8x8_6tap_lowpass_h = interpolate8x8_6tap_lowpass_h_c; interpolate8x8_6tap_lowpass_v = interpolate8x8_6tap_lowpass_v_c; interpolate8x8_avg2 = interpolate8x8_avg2_c; interpolate8x8_avg4 = interpolate8x8_avg4_c; /* postprocessing */ image_brightness = image_brightness_c; /* Initialize internal colorspace transformation tables */ colorspace_init(); /* All colorspace transformation functions User Format->YV12 */ yv12_to_yv12 = yv12_to_yv12_c; rgb555_to_yv12 = rgb555_to_yv12_c; rgb565_to_yv12 = rgb565_to_yv12_c; bgr_to_yv12 = bgr_to_yv12_c; bgra_to_yv12 = bgra_to_yv12_c; abgr_to_yv12 = abgr_to_yv12_c; rgba_to_yv12 = rgba_to_yv12_c; argb_to_yv12 = argb_to_yv12_c; yuyv_to_yv12 = yuyv_to_yv12_c; uyvy_to_yv12 = uyvy_to_yv12_c; rgb555i_to_yv12 = rgb555i_to_yv12_c; rgb565i_to_yv12 = rgb565i_to_yv12_c; bgri_to_yv12 = bgri_to_yv12_c; bgrai_to_yv12 = bgrai_to_yv12_c; abgri_to_yv12 = abgri_to_yv12_c; rgbai_to_yv12 = rgbai_to_yv12_c; argbi_to_yv12 = argbi_to_yv12_c; yuyvi_to_yv12 = yuyvi_to_yv12_c; uyvyi_to_yv12 = uyvyi_to_yv12_c; /* All colorspace transformation functions YV12->User format */ yv12_to_rgb555 = yv12_to_rgb555_c; yv12_to_rgb565 = yv12_to_rgb565_c; yv12_to_bgr = yv12_to_bgr_c; yv12_to_bgra = yv12_to_bgra_c; yv12_to_abgr = yv12_to_abgr_c; yv12_to_rgba = yv12_to_rgba_c; yv12_to_argb = yv12_to_argb_c; yv12_to_yuyv = yv12_to_yuyv_c; yv12_to_uyvy = yv12_to_uyvy_c; yv12_to_rgb555i = yv12_to_rgb555i_c; yv12_to_rgb565i = yv12_to_rgb565i_c; yv12_to_bgri = yv12_to_bgri_c; yv12_to_bgrai = yv12_to_bgrai_c; yv12_to_abgri = yv12_to_abgri_c; yv12_to_rgbai = yv12_to_rgbai_c; yv12_to_argbi = yv12_to_argbi_c; yv12_to_yuyvi = yv12_to_yuyvi_c; yv12_to_uyvyi = yv12_to_uyvyi_c; /* Functions used in motion estimation algorithms */ calc_cbp = calc_cbp_c; #if defined(_DEBUG) xvid_debug = init->debug; #endif return(0); }
xint m4v_init_decoder(DEC_CTRL * param, uint8 * video_header, xint header_size) { DECODER *dec; dec = xvid_malloc(sizeof(DECODER), CACHE_LINE); if (dec == NULL) { return XVID_ERR_MEMORY; } param->handle = dec; /* decode video header for frame width & height */ m4v_decode_header(dec, video_header, header_size); param->width = dec->width; param->height = dec->height; dec->mb_width = (dec->width + 15) / 16; dec->mb_height = (dec->height + 15) / 16; dec->num_mb = dec->mb_height * dec->mb_width; dec->nbits_mba = log2bin(dec->num_mb - 1); dec->edged_width = 16 * dec->mb_width + 2 * EDGE_SIZE; dec->edged_height = 16 * dec->mb_height + 2 * EDGE_SIZE; dec->decoder_clock = 0; dec->slice = xvid_malloc(sizeof(xint) * (dec->mb_width + 1) * (dec->mb_height + 1), CACHE_LINE); if (dec->slice == NULL) return XVID_ERR_MEMORY; if (image_create(&dec->cur, dec->edged_width, dec->edged_height)) { xvid_free(dec); return XVID_ERR_MEMORY; } if (image_create(&dec->refn, dec->edged_width, dec->edged_height)) { image_destroy(&dec->cur, dec->edged_width, dec->edged_height); xvid_free(dec); return XVID_ERR_MEMORY; } dec->mbs = xvid_malloc(sizeof(MACROBLOCK) * dec->mb_width * dec->mb_height, CACHE_LINE); if (dec->mbs == NULL) { image_destroy(&dec->refn, dec->edged_width, dec->edged_height); image_destroy(&dec->cur, dec->edged_width, dec->edged_height); xvid_free(dec); return XVID_ERR_MEMORY; } init_timer(); init_vlc_tables(); return XVID_ERR_OK; }