Lines Matching refs:data

122 grub_png_get_dword (struct grub_png_data *data)
127 grub_file_read (data->file, &r, sizeof (grub_uint32_t));
133 grub_png_get_byte (struct grub_png_data *data)
137 if ((data->inside_idat) && (data->idat_remain == 0))
144 grub_png_get_dword (data);
146 if (data->file->offset != data->next_offset)
153 len = grub_png_get_dword (data);
154 type = grub_png_get_dword (data);
158 "png: unexpected end of data");
162 data->next_offset = data->file->offset + len + 4;
165 data->idat_remain = len;
169 grub_file_read (data->file, &r, 1);
171 if (data->inside_idat)
172 data->idat_remain--;
178 grub_png_get_bits (struct grub_png_data *data, int num)
182 if (data->bit_count == 0)
184 data->bit_save = grub_png_get_byte (data);
185 data->bit_count = 8;
194 n = data->bit_count;
198 code += (int) (data->bit_save & ((1 << n) - 1)) << shift;
202 data->bit_count -= n;
203 data->bit_save >>= n;
209 data->bit_save = grub_png_get_byte (data);
210 data->bit_count = 8;
217 grub_png_decode_image_header (struct grub_png_data *data)
222 data->image_width = grub_png_get_dword (data);
223 data->image_height = grub_png_get_dword (data);
225 if ((!data->image_height) || (!data->image_width))
228 color_bits = grub_png_get_byte (data);
232 data->is_16bit = (color_bits == 16);
234 color_type = grub_png_get_byte (data);
237 if (grub_video_bitmap_create (data->bitmap, data->image_width,
238 data->image_height,
241 data->bpp = 3;
245 if (grub_video_bitmap_create (data->bitmap, data->image_width,
246 data->image_height,
249 data->bpp = 4;
255 if (data->is_16bit)
257 data->bpp <<= 1;
259 data->image_data = grub_malloc (data->image_height *
260 data->image_width * data->bpp);
264 data->cur_rgb = data->image_data;
268 data->image_data = 0;
269 data->cur_rgb = (*data->bitmap)->data;
272 data->raw_bytes = data->image_height * (data->image_width + 1) * data->bpp;
274 data->cur_column = 0;
275 data->first_line = 1;
277 if (grub_png_get_byte (data) != PNG_COMPRESSION_BASE)
281 if (grub_png_get_byte (data) != PNG_FILTER_TYPE_BASE)
285 if (grub_png_get_byte (data) != PNG_INTERLACE_NONE)
290 grub_png_get_dword (data);
384 grub_png_get_huff_code (struct grub_png_data *data, struct huff_table *ht)
391 code = (code << 1) + grub_png_get_bits (data, 1);
399 grub_png_init_fixed_block (struct grub_png_data *data)
403 grub_png_init_huff_table (&data->code_table, DEFLATE_HUFF_LEN,
404 data->code_values, data->code_maxval,
405 data->code_offset);
408 grub_png_insert_huff_item (&data->code_table, i, 8);
411 grub_png_insert_huff_item (&data->code_table, i, 9);
414 grub_png_insert_huff_item (&data->code_table, i, 7);
417 grub_png_insert_huff_item (&data->code_table, i, 8);
419 grub_png_build_huff_table (&data->code_table);
421 grub_png_init_huff_table (&data->dist_table, DEFLATE_HUFF_LEN,
422 data->dist_values, data->dist_maxval,
423 data->dist_offset);
426 grub_png_insert_huff_item (&data->dist_table, i, 5);
428 grub_png_build_huff_table (&data->dist_table);
434 grub_png_init_dynamic_block (struct grub_png_data *data)
443 nl = DEFLATE_HLIT_BASE + grub_png_get_bits (data, 5);
444 nd = DEFLATE_HDIST_BASE + grub_png_get_bits (data, 5);
445 nb = DEFLATE_HCLEN_BASE + grub_png_get_bits (data, 4);
449 return grub_error (GRUB_ERR_BAD_FILE_TYPE, "png: too much data");
454 lens[bitorder[i]] = grub_png_get_bits (data, 3);
464 grub_png_init_huff_table (&data->code_table, DEFLATE_HUFF_LEN,
465 data->code_values, data->code_maxval,
466 data->code_offset);
468 grub_png_init_huff_table (&data->dist_table, DEFLATE_HUFF_LEN,
469 data->dist_values, data->dist_maxval,
470 data->dist_offset);
483 ht = &data->code_table;
488 ht = &data->dist_table;
492 n = grub_png_get_huff_code (data, &cl);
502 c = 3 + grub_png_get_bits (data, 2);
512 i += 3 + grub_png_get_bits (data, 3) - 1;
514 i += 11 + grub_png_get_bits (data, 7) - 1;
517 grub_png_build_huff_table (&data->code_table);
518 grub_png_build_huff_table (&data->dist_table);
524 grub_png_output_byte (struct grub_png_data *data, grub_uint8_t n)
528 if (--data->raw_bytes < 0)
531 if (data->cur_column == 0)
536 data->cur_filter = n;
539 *(data->cur_rgb++) = n;
541 data->cur_column++;
542 row_bytes = data->image_width * data->bpp;
543 if (data->cur_column == row_bytes + 1)
546 grub_uint8_t *cur = data->cur_rgb - row_bytes;
550 if (data->first_line)
561 switch (data->cur_filter)
567 cur += data->bpp;
568 for (i = data->bpp; i < row_bytes; i++, cur++, left++)
586 for (i = 0; i < data->bpp; i++, cur++, up++)
599 for (i = 0; i < data->bpp; i++, cur++, up++)
630 data->cur_column = 0;
631 data->first_line = 0;
638 grub_png_read_dynamic_block (struct grub_png_data *data)
644 n = grub_png_get_huff_code (data, &data->code_table);
647 data->slide[data->wp] = n;
648 grub_png_output_byte (data, n);
650 data->wp++;
651 if (data->wp >= WSIZE)
652 data->wp = 0;
663 len += grub_png_get_bits (data, cplext[n]);
665 n = grub_png_get_huff_code (data, &data->dist_table);
668 dist += grub_png_get_bits (data, cpdext[n]);
670 pos = data->wp - dist;
676 data->slide[data->wp] = data->slide[pos];
677 grub_png_output_byte (data, data->slide[data->wp]);
679 data->wp++;
680 if (data->wp >= WSIZE)
681 data->wp = 0;
696 grub_png_decode_image_data (struct grub_png_data *data)
701 cmf = grub_png_get_byte (data);
702 flg = grub_png_get_byte (data);
716 final = grub_png_get_bits (data, 1);
717 block_type = grub_png_get_bits (data, 2);
725 data->bit_count = 0;
726 len = grub_png_get_byte (data);
727 len += ((grub_uint16_t) grub_png_get_byte (data)) << 8;
730 grub_png_get_byte (data);
731 grub_png_get_byte (data);
734 grub_png_output_byte (data, grub_png_get_byte (data));
740 grub_png_init_fixed_block (data);
741 grub_png_read_dynamic_block (data);
745 grub_png_init_dynamic_block (data);
746 grub_png_read_dynamic_block (data);
757 grub_png_get_dword (data);
760 grub_png_get_dword (data);
769 grub_png_convert_image (struct grub_png_data *data)
774 d1 = (*data->bitmap)->data;
775 d2 = data->image_data + 1;
778 for (i = 0; i < (data->image_width * data->image_height * data->bpp >> 1);
784 grub_png_decode_png (struct grub_png_data *data)
788 if (grub_file_read (data->file, &magic[0], 8) != 8)
798 len = grub_png_get_dword (data);
799 type = grub_png_get_dword (data);
800 data->next_offset = data->file->offset + len + 4;
805 grub_png_decode_image_header (data);
809 data->inside_idat = 1;
810 data->idat_remain = len;
811 data->bit_count = 0;
813 grub_png_decode_image_data (data);
815 data->inside_idat = 0;
819 if (data->is_16bit)
820 grub_png_convert_image (data);
825 grub_file_seek (data->file, data->file->offset + len + 4);
831 if (data->file->offset != data->next_offset)
844 struct grub_png_data *data;
850 data = grub_zalloc (sizeof (*data));
851 if (data != NULL)
853 data->file = file;
854 data->bitmap = bitmap;
856 grub_png_decode_png (data);
858 grub_free (data->image_data);
859 grub_free (data);