Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
475
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 5.87 KB | None | 0 0
  1. === modified file 'ChangeLog'
  2. --- ChangeLog   2010-11-12 07:45:16 +0000
  3. +++ ChangeLog   2010-11-13 01:56:20 +0000
  4. @@ -1,3 +1,19 @@
  5. +2010-11-13  Szymon Janc <szymon@janc.net.pl>
  6. +
  7. +   Add support for DRI and RSTn markers in JPEG files.
  8. +
  9. +   * grub-core/video/readers/jpeg.c (JPEG_MARKER_DRI): New define.
  10. +   * grub-core/video/readers/jpeg.c (JPEG_MARKER_RST*): New defines.
  11. +   * grub-core/video/readers/jpeg.c (grub_jpeg_data): New fields dri, r1
  12. +   and bitmap_ptr.
  13. +   * grub-core/video/readers/jpeg.c (grub_jpeg_decode_dri): New function.
  14. +   * grub-core/video/readers/jpeg.c (grub_jpeg_decode_sos): Move image data
  15. +   related part into grub_jpeg_decode_data.
  16. +   * grub-core/video/readers/jpeg.c (grub_jpeg_decode_data): New function.
  17. +   * grub-core/video/readers/jpeg.c (grub_jpeg_reset): New function.
  18. +   * grub-core/video/readers/jpeg.c (grub_jpeg_decode_jpeg): Handle new
  19. +   markers.
  20. +
  21.  2010-11-12  Vladimir Serbinenko  <phcoder@gmail.com>
  22.  
  23.     * grub-core/kern/i386/pc/startup.S (multiboot_trampoline): Add missing
  24.  
  25. === modified file 'grub-core/video/readers/jpeg.c'
  26. --- grub-core/video/readers/jpeg.c  2010-05-05 19:19:55 +0000
  27. +++ grub-core/video/readers/jpeg.c  2010-11-13 13:50:13 +0000
  28. @@ -37,6 +37,15 @@
  29.  #define JPEG_MARKER_DQT        0xdb
  30.  #define JPEG_MARKER_SOF0   0xc0
  31.  #define JPEG_MARKER_SOS        0xda
  32. +#define JPEG_MARKER_DRI        0xdd
  33. +#define JPEG_MARKER_RST0   0xd0
  34. +#define JPEG_MARKER_RST1   0xd1
  35. +#define JPEG_MARKER_RST2   0xd2
  36. +#define JPEG_MARKER_RST3   0xd3
  37. +#define JPEG_MARKER_RST4   0xd4
  38. +#define JPEG_MARKER_RST5   0xd5
  39. +#define JPEG_MARKER_RST6   0xd6
  40. +#define JPEG_MARKER_RST7   0xd7
  41.  
  42.  #define SHIFT_BITS     8
  43.  #define CONST(x)       ((int) ((x) * (1L << SHIFT_BITS) + 0.5))
  44. @@ -64,6 +73,7 @@ struct grub_jpeg_data
  45.  {
  46.    grub_file_t file;
  47.    struct grub_video_bitmap **bitmap;
  48. +  grub_uint8_t *bitmap_ptr;
  49.  
  50.    int image_width;
  51.    int image_height;
  52. @@ -80,6 +90,8 @@ struct grub_jpeg_data
  53.    jpeg_data_unit_t cbdu;
  54.  
  55.    int vs, hs;
  56. +  int dri;
  57. +  int r1;
  58.  
  59.    int dc_value[3];
  60.  
  61. @@ -313,6 +325,18 @@ grub_jpeg_decode_sof (struct grub_jpeg_d
  62.    return grub_errno;
  63.  }
  64.  
  65. +static grub_err_t
  66. +grub_jpeg_decode_dri (struct grub_jpeg_data *data)
  67. +{
  68. +  if (grub_jpeg_get_word (data) != 4)
  69. +    return grub_error (GRUB_ERR_BAD_FILE_TYPE,
  70. +   "jpeg: DRI marker length must be 4");
  71. +
  72. +  data->dri = grub_jpeg_get_word (data);
  73. +
  74. +  return grub_errno;
  75. +}
  76. +
  77.  static void
  78.  grub_jpeg_idct_transform (jpeg_data_unit_t du)
  79.  {
  80. @@ -524,8 +548,7 @@ grub_jpeg_ycrcb_to_rgb (int yy, int cr,
  81.  static grub_err_t
  82.  grub_jpeg_decode_sos (struct grub_jpeg_data *data)
  83.  {
  84. -  int i, cc, r1, c1, nr1, nc1, vb, hb;
  85. -  grub_uint8_t *ptr1;
  86. +  int i, cc;
  87.    grub_uint32_t data_offset;
  88.  
  89.    data_offset = data->file->offset;
  90. @@ -556,22 +579,28 @@ grub_jpeg_decode_sos (struct grub_jpeg_d
  91.    if (data->file->offset != data_offset)
  92.      return grub_error (GRUB_ERR_BAD_FILE_TYPE, "jpeg: extra byte in sos");
  93.  
  94. -  if (grub_video_bitmap_create (data->bitmap, data->image_width,
  95. -               data->image_height,
  96. -               GRUB_VIDEO_BLIT_FORMAT_RGB_888))
  97. -    return grub_errno;
  98. +  grub_video_bitmap_create (data->bitmap, data->image_width, data->image_height,
  99. +      GRUB_VIDEO_BLIT_FORMAT_RGB_888);
  100.  
  101. -  data->bit_mask = 0x0;
  102. +  data->bitmap_ptr = (*data->bitmap)->data;
  103. +  return grub_errno;
  104. +}
  105. +
  106. +static grub_err_t
  107. +grub_jpeg_decode_data (struct grub_jpeg_data *data)
  108. +{
  109. +  int c1, vb, hb, nr1, nc1;
  110. +  int rst = data->dri;
  111.  
  112.    vb = data->vs * 8;
  113.    hb = data->hs * 8;
  114.    nr1 = (data->image_height + vb - 1) / vb;
  115.    nc1 = (data->image_width + hb - 1) / hb;
  116.  
  117. -  ptr1 = (*data->bitmap)->data;
  118. -  for (r1 = 0; r1 < nr1;
  119. -       r1++, ptr1 += (vb * data->image_width - hb * nc1) * 3)
  120. -    for (c1 = 0; c1 < nc1; c1++, ptr1 += hb * 3)
  121. +  for (; data->r1 < nr1 && (!data->dri || rst);
  122. +       data->r1++, data->bitmap_ptr += (vb * data->image_width - hb * nc1) * 3)
  123. +    for (c1 = 0;  c1 < nc1 && (!data->dri || rst);
  124. +   c1++, rst--, data->bitmap_ptr += hb * 3)
  125.        {
  126.     int r2, c2, nr2, nc2;
  127.     grub_uint8_t *ptr2;
  128. @@ -586,10 +615,10 @@ grub_jpeg_decode_sos (struct grub_jpeg_d
  129.     if (grub_errno)
  130.       return grub_errno;
  131.  
  132. -   nr2 = (r1 == nr1 - 1) ? (data->image_height - r1 * vb) : vb;
  133. +   nr2 = (data->r1 == nr1 - 1) ? (data->image_height - data->r1 * vb) : vb;
  134.     nc2 = (c1 == nc1 - 1) ? (data->image_width - c1 * hb) : hb;
  135.  
  136. -   ptr2 = ptr1;
  137. +   ptr2 = data->bitmap_ptr;
  138.     for (r2 = 0; r2 < nr2; r2++, ptr2 += (data->image_width - nc2) * 3)
  139.       for (c2 = 0; c2 < nc2; c2++, ptr2 += 3)
  140.         {
  141. @@ -598,8 +627,7 @@ grub_jpeg_decode_sos (struct grub_jpeg_d
  142.           i0 = (r2 / data->vs) * 8 + (c2 / data->hs);
  143.           cr = data->crdu[i0];
  144.           cb = data->cbdu[i0];
  145. -         yy =
  146. -       data->ydu[(r2 / 8) * 2 + (c2 / 8)][(r2 % 8) * 8 + (c2 % 8)];
  147. +         yy = data->ydu[(r2 / 8) * 2 + (c2 / 8)][(r2 % 8) * 8 + (c2 % 8)];
  148.  
  149.           grub_jpeg_ycrcb_to_rgb (yy, cr, cb, ptr2);
  150.         }
  151. @@ -608,6 +636,16 @@ grub_jpeg_decode_sos (struct grub_jpeg_d
  152.    return grub_errno;
  153.  }
  154.  
  155. +static void
  156. +grub_jpeg_reset (struct grub_jpeg_data *data)
  157. +{
  158. +  data->bit_mask = 0x0;
  159. +
  160. +  data->dc_value[0] = 0;
  161. +  data->dc_value[1] = 0;
  162. +  data->dc_value[2] = 0;
  163. +}
  164. +
  165.  static grub_uint8_t
  166.  grub_jpeg_get_marker (struct grub_jpeg_data *data)
  167.  {
  168. @@ -653,8 +691,21 @@ grub_jpeg_decode_jpeg (struct grub_jpeg_
  169.     case JPEG_MARKER_SOF0:  /* Start Of Frame 0.  */
  170.       grub_jpeg_decode_sof (data);
  171.       break;
  172. +   case JPEG_MARKER_DRI:   /* Define Restart Interval.  */
  173. +     grub_jpeg_decode_dri (data);
  174. +     break;
  175.     case JPEG_MARKER_SOS:   /* Start Of Scan.  */
  176.       grub_jpeg_decode_sos (data);
  177. +   case JPEG_MARKER_RST0:  /* Restart.  */
  178. +   case JPEG_MARKER_RST1:
  179. +   case JPEG_MARKER_RST2:
  180. +   case JPEG_MARKER_RST3:
  181. +   case JPEG_MARKER_RST4:
  182. +   case JPEG_MARKER_RST5:
  183. +   case JPEG_MARKER_RST6:
  184. +   case JPEG_MARKER_RST7:
  185. +     grub_jpeg_decode_data (data);
  186. +     grub_jpeg_reset (data);
  187.       break;
  188.     case JPEG_MARKER_EOI:   /* End Of Image.  */
  189.       return grub_errno;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement