1 /*M///////////////////////////////////////////////////////////////////////////////////////
3 // INTEL CORPORATION PROPRIETARY INFORMATION
4 // This software is supplied under the terms of a license agreement or
5 // nondisclosure agreement with Intel Corporation and may not be copied
6 // or disclosed except in accordance with the terms of that agreement.
7 // Copyright (c) 1999 Intel Corporation. All Rights Reserved.
14 // Authors: Vadim Pisarevsky
24 ///////////////////// graphics_format_reader //////////////////////////
26 graphics_format_reader::graphics_format_reader()
28 m_width = m_height = -1;
36 void graphics_format_reader::set_file( const char* filename )
38 assert( filename != 0 && strlen(filename) < sizeof(m_filename) );
39 strcpy( m_filename, filename );
43 bool graphics_format_reader::check_format( const char* signature )
45 assert( signature != 0 );
46 return memcmp( m_signature, signature, m_sign_len ) == 0;
50 ///////////////////// graphics_format_reader_list //////////////////////////
52 graphics_format_readers_list::graphics_format_readers_list()
59 graphics_format_readers_list::~graphics_format_readers_list()
65 void graphics_format_readers_list::remove_all_readers()
69 for( int i = 0; i < m_cur_readers; i++ ) delete m_readers[i];
73 m_max_readers = m_cur_readers = 0;
77 void graphics_format_readers_list::add_reader( graphics_format_reader* reader )
79 assert( reader != 0 );
80 if( m_cur_readers == m_max_readers )
82 // reallocate the readers pointers storage
83 int new_max_readers = 2*m_max_readers;
84 if( new_max_readers < 16 ) new_max_readers = 16;
86 graphics_format_reader** new_readers =
87 new graphics_format_reader*[new_max_readers];
89 for( int i = 0; i < m_cur_readers; i++ ) new_readers[i] = m_readers[i];
92 m_readers = new_readers;
93 m_max_readers = new_max_readers;
96 m_readers[m_cur_readers++] = reader;
100 list_position* graphics_format_readers_list::get_first_reader_pos()
102 return (list_position*)m_readers;
106 graphics_format_reader* graphics_format_readers_list::
107 get_next_reader( list_position*& pos )
109 graphics_format_reader* reader = 0;
110 graphics_format_reader** temp = (graphics_format_reader**)pos;
112 assert( temp == 0 || (m_readers <= temp && temp < m_readers + m_cur_readers));
116 pos = (list_position*)(temp < m_readers + m_cur_readers ? temp : 0);
122 graphics_format_reader* graphics_format_readers_list::
123 find_reader( const char* filename )
126 FILE* f = fopen( filename, "rb" );
127 char signature[4096];
129 graphics_format_reader* reader = 0;
133 for( i = 0; i < m_cur_readers; i++ )
135 int temp = m_readers[i]->get_signature_length();
136 if( temp > sign_len ) sign_len = temp;
139 assert( sign_len <= sizeof(signature) );
141 sign_len = fread( signature, 1, sign_len, f );
144 for( i = 0; i < m_cur_readers; i++ )
146 int temp = m_readers[i]->get_signature_length();
147 if( temp <= sign_len && m_readers[i]->check_format(signature))
149 reader = m_readers[i];
158 int graphics_format_readers_list::get_filters_string( char* buffer, int maxlen )
165 void cvt_bgr_to_gray( byte* bgr, byte* gray, int len )
168 #define cR (int)(0.299*(1 << SCALE) + 0.5)
169 #define cG (int)(0.587*(1 << SCALE) + 0.5)
170 #define cB (int)(0.114*(1 << SCALE) + 0.5)
172 for( i = 0; i < len; i++, bgr += 3 )
174 int t = descale( bgr[0]*cB + bgr[1]*cG + bgr[2]*cR, SCALE );
175 gray[i] = saturate( t );
179 void cvt_palette_to_gray( palette_entry* palette, byte* gray_palette, int entries )
182 for( i = 0; i < entries; i++ )
184 cvt_bgr_to_gray( (byte*)(palette + i), gray_palette + i, 1 );