00001 #include "graphics.h" 00002 00003 #include <string.h> 00004 00005 /* Graphics acceleration routines */ 00006 00007 void quicktime_init_yuv(quicktime_yuv_t *yuv_table) 00008 { 00009 int i; 00010 for(i = 0; i < 256; i++) 00011 { 00012 /* compression */ 00013 yuv_table->rtoy_tab[i] = (long)( 0.2990 * 65536 * i); 00014 yuv_table->rtou_tab[i] = (long)(-0.1687 * 65536 * i); 00015 yuv_table->rtov_tab[i] = (long)( 0.5000 * 65536 * i); 00016 00017 yuv_table->gtoy_tab[i] = (long)( 0.5870 * 65536 * i); 00018 yuv_table->gtou_tab[i] = (long)(-0.3320 * 65536 * i); 00019 yuv_table->gtov_tab[i] = (long)(-0.4187 * 65536 * i); 00020 00021 yuv_table->btoy_tab[i] = (long)( 0.1140 * 65536 * i); 00022 yuv_table->btou_tab[i] = (long)( 0.5000 * 65536 * i); 00023 yuv_table->btov_tab[i] = (long)(-0.0813 * 65536 * i); 00024 } 00025 00026 yuv_table->vtor = &(yuv_table->vtor_tab[128]); 00027 yuv_table->vtog = &(yuv_table->vtog_tab[128]); 00028 yuv_table->utog = &(yuv_table->utog_tab[128]); 00029 yuv_table->utob = &(yuv_table->utob_tab[128]); 00030 for(i = -128; i < 128; i++) 00031 { 00032 /* decompression */ 00033 yuv_table->vtor[i] = (long)( 1.4020 * 65536 * i); 00034 yuv_table->vtog[i] = (long)(-0.7141 * 65536 * i); 00035 00036 yuv_table->utog[i] = (long)(-0.3441 * 65536 * i); 00037 yuv_table->utob[i] = (long)( 1.7720 * 65536 * i); 00038 } 00039 } 00040 00041 void quicktime_delete_yuv(quicktime_yuv_t *yuv_table) 00042 { 00043 } 00044 00045 00046 quicktime_scaletable_t* quicktime_new_scaletable(int input_w, int input_h, int output_w, int output_h) 00047 { 00048 quicktime_scaletable_t *result = (quicktime_scaletable_t*)malloc(sizeof(quicktime_scaletable_t)); 00049 float i; 00050 float scalex = (float)input_w / output_w, scaley = (float)input_h / output_h; 00051 00052 result->input_x = (int*)malloc(sizeof(int) * output_w); 00053 result->input_y = (int*)malloc(sizeof(int) * output_h); 00054 00055 for(i = 0; i < output_w; i++) 00056 { 00057 result->input_x[(int)i] = (int)(scalex * i); 00058 } 00059 00060 for(i = 0; i < output_h; i++) 00061 { 00062 result->input_y[(int)i] = (int)(scaley * i); 00063 } 00064 00065 result->in_w = input_w; 00066 result->in_h = input_h; 00067 result->out_w = output_w; 00068 result->out_h = output_h; 00069 return result; 00070 } 00071 00072 void quicktime_delete_scaletable(quicktime_scaletable_t *scaletable) 00073 { 00074 free(scaletable->input_x); 00075 free(scaletable->input_y); 00076 free(scaletable); 00077 } 00078 00079 /* Return 1 if dimensions are different from scaletable */ 00080 int quicktime_compare_scaletable(quicktime_scaletable_t *scaletable, 00081 int in_w, 00082 int in_h, 00083 int out_w, 00084 int out_h) 00085 { 00086 if(scaletable->in_w != in_w || 00087 scaletable->in_h != in_h || 00088 scaletable->out_w != out_w || 00089 scaletable->out_h != out_h) 00090 return 1; 00091 else 00092 return 0; 00093 } 00094 00095 /* Return 1 if the scaletable is 1:1 */ 00096 int quicktime_identity_scaletable(quicktime_scaletable_t *scaletable) 00097 { 00098 if(scaletable->in_w == scaletable->out_w && 00099 scaletable->in_h == scaletable->out_h) 00100 return 1; 00101 else 00102 return 0; 00103 }
1.5.5