예제 #1
0
/* Multiply Quantization table with quality factor to get LQT and CQT */
void
initialize_quantization_tables(UINT32 quality_factor)
{
    UINT16 i, index;
    UINT32 value;
    UINT8 luminance_quant_table[] = {
        16, 11, 10, 16, 24, 40, 51, 61, 12, 12, 14, 19, 26, 58, 60, 55, 14, 13,
        16, 24, 40, 57, 69, 56, 14, 17, 22, 29, 51, 87, 80, 62, 18, 22, 37,
        56, 68, 109, 103, 77, 24, 35, 55, 64, 81, 104, 113, 92, 49, 64, 78,
        87, 103, 121, 120, 101, 72, 92, 95, 98, 112, 100, 103, 99
    };
    UINT8 chrominance_quant_table[] = {
        17, 18, 24, 47, 99, 99, 99, 99, 18, 21, 26, 66, 99, 99, 99, 99, 24, 26,
        56, 99, 99, 99, 99, 99, 47, 66, 99, 99, 99, 99, 99, 99, 99, 99, 99,
        99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
        99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99
    };
    for(i = 0; i < 64; i++)

    {
        index = zigzag_table[i];

        /* luminance quantization table * quality factor */
        value = luminance_quant_table[i] * quality_factor;
        value = (value + 0x200) >> 10;
        if(value == 0)
            value = 1;

        else if(value > 255)
            value = 255;
        Lqt[index] = (UINT8) value;
        ILqt[i] = DSP_Division(0x8000, value);

        /* chrominance quantization table * quality factor */
        value = chrominance_quant_table[i] * quality_factor;
        value = (value + 0x200) >> 10;
        if(value == 0)
            value = 1;

        else if(value > 255)
            value = 255;
        Cqt[index] = (UINT8) value;
        ICqt[i] = DSP_Division(0x8000, value);
    }
}
예제 #2
0
/* Will use constant Quantization tables to make it faster            */
void initialize_quantization_tables (struct JPEG_ENCODER_STRUCTURE * jpeg_encoder_structure)
{
	UINT16 i, index;
	UINT32 value;

/* comment next line to use JPEG default tables*/
#define QCAM_TABLES
	
#ifndef QCAM_TABLES
	/* JPEG default tables (good Quality) */
	static UINT8 luminance_quant_table [] =
	{
		16, 11, 10, 16,  24,  40,  51,  61,
		12, 12, 14, 19,  26,  58,  60,  55,
		14, 13, 16, 24,  40,  57,  69,  56,
		14, 17, 22, 29,  51,  87,  80,  62,
		18, 22, 37, 56,  68, 109, 103,  77,
		24, 35, 55, 64,  81, 104, 113,  92,
		49, 64, 78, 87, 103, 121, 120, 101,
		72, 92, 95, 98, 112, 100, 103,  99
		
	};

	static UINT8 chrominance_quant_table [] =
	{
		17, 18, 24, 47, 99, 99, 99, 99,
		18, 21, 26, 66, 99, 99, 99, 99,
		24, 26, 56, 99, 99, 99, 99, 99,
		47, 66, 99, 99, 99, 99, 99, 99,
		99, 99, 99, 99, 99, 99, 99, 99,
		99, 99, 99, 99, 99, 99, 99, 99,
		99, 99, 99, 99, 99, 99, 99, 99,
		99, 99, 99, 99, 99, 99, 99, 99
	};
#else	
	/* quickcam 5000pro tables (very good quality) */
	static UINT8 luminance_quant_table [] = 
	{
	 0x04, 0x02, 0x03, 0x03, 0x03, 0x02, 0x04, 0x03,
	 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x06, 0x0a,
	 0x06, 0x06, 0x05, 0x05, 0x06, 0x0c, 0x08, 0x09,
	 0x07, 0x0a, 0x0e, 0x0c, 0x0f, 0x0f, 0x0e, 0x0c,
	 0x0e, 0x0f, 0x10, 0x12, 0x17, 0x13, 0x10, 0x11,
	 0x15, 0x11, 0x0d, 0x0e, 0x14, 0x1a, 0x14, 0x15,
	 0x17, 0x18, 0x19, 0x1a, 0x19, 0x0f, 0x13, 0x1c,
	 0x1e, 0x1c, 0x19, 0x1e, 0x17, 0x19, 0x19, 0x18 
	};
	
	static UINT8 chrominance_quant_table [] =
	{
	 0x04, 0x04, 0x04, 0x06, 0x05, 0x06, 0x0b, 0x06, 
	 0x06, 0x0b, 0x18, 0x10, 0x0e, 0x10, 0x18, 0x18, 
	 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 
	 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
	 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
	 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
	 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
	 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18	
	};
#endif

/* static UINT8 qtable_jpeg_flattened[] =
 *    { 18,  23,  22,  28,  34,  44,  50,  55,
 * 	 24,  24,  26,  31,  36,  53,  54,  52,
 * 	 26,  25,  28,  34,  44,  53,  58,  52,
 * 	 26,  29,  33,  38,  50,  65,  63,  55,
 * 	 30,  33,  43,  52,  58,  73,  71,  61,
 * 	 34,  41,  52,  56,  63,  71,  74,  67,
 * 	 49,  56,  62,  65,  71,  77,  77,  70,
 * 	 59,  67,  68,  69,  74,  70,  71,  70};
 * 
 * static UINT8 qtable_semiuniform[] =
 *    { 16,  32,  64,  64,  64,  64,  64,  64,
 *      32,  64,  64,  64,  64,  64,  64,  64,
 *      64,  64,  64,  64,  64,  64,  64,  64,
 *      64,  64,  64,  64,  64,  64,  64,  64,
 *      64,  64,  64,  64,  64,  64,  64,  64,
 *      64,  64,  64,  64,  64,  64,  64,  64,
 *      64,  64,  64,  64,  64,  64,  64,  64,
 *      64,  64,  64,  64,  64,  64,  64,  64 };
 * 
 * static UINT8 qtable_uniform[] =
 *    { 100,  100,  100,  100,  100,  100,  100,  100,
 *      100,  100,  100,  100,  100,  100,  100,  100,
 *      100,  100,  100,  100,  100,  100,  100,  100,
 *      100,  100,  100,  100,  100,  100,  100,  100,
 *      100,  100,  100,  100,  100,  100,  100,  100,
 *      100,  100,  100,  100,  100,  100,  100,  100,
 *      100,  100,  100,  100,  100,  100,  100,  100,
 *      100,  100,  100,  100,  100,  100,  100,  100 };
 * 
 * static UINT8 qtable_none[] =
 *    { 1,   1,   1,   1,   1,   1,   1,   1,
 *      1,   1,   1,   1,   1,   1,   1,   1,
 *      1,   1,   1,   1,   1,   1,   1,   1,
 *      1,   1,   1,   1,   1,   1,   1,   1,
 *      1,   1,   1,   1,   1,   1,   1,   1,
 *      1,   1,   1,   1,   1,   1,   1,   1,
 *      1,   1,   1,   1,   1,   1,   1,   1,
 *      1,   1,   1,   1,   1,   1,   1,   1 };
 * 
 * static UINT8 qtable_jpeg_squashed[] = {	//4*sqrt(jpeg_flat)
 * 	18, 19, 19, 21, 23, 27, 28, 30,
 * 	20, 20, 21, 22, 24, 29, 30, 29,
 * 	21, 20, 21, 23, 27, 29, 31, 29,
 * 	21, 22, 23, 25, 28, 32, 32, 30,
 * 	22, 23, 26, 29, 31, 34, 34, 31,
 * 	23, 26, 29, 30, 32, 34, 35, 33,
 * 	28, 30, 32, 32, 34, 35, 35, 34,
 * 	31, 33, 33, 33, 35, 34, 34, 34 };
 */
	
	
	
	
	
	
	for (i=0; i<64; i++)
	{
		index = zigzag_table [i];
		
		value= luminance_quant_table [i];

		jpeg_encoder_structure->Lqt [index] = (UINT8) value;
		jpeg_encoder_structure->ILqt [i] = DSP_Division (0x8000, value);


		value = chrominance_quant_table [i];
				
		jpeg_encoder_structure->Cqt[index] = (UINT8) value;
		jpeg_encoder_structure->ICqt [i] = DSP_Division (0x8000, value);
	}
}