Crop out padding on preview processing (MR 13)

This commit is contained in:
Yassine Oudjana
2022-02-24 12:40:13 +04:00
committed by Martijn Braam
parent f107a2ff3f
commit 81859e54e7
3 changed files with 21 additions and 5 deletions

View File

@@ -6,6 +6,7 @@ uniform sampler2D texture;
uniform mat3 color_matrix;
#ifdef BITS_10
uniform float row_length;
uniform float padding_ratio;
#endif
varying vec2 top_left_uv;
@@ -22,6 +23,9 @@ skip_5th_pixel(vec2 uv)
new_uv.x *= 0.8;
new_uv.x += floor(uv.x * row_length / 5.0) / row_length;
// Crop out padding
new_uv.x *= padding_ratio;
return new_uv;
}
#endif

View File

@@ -14,6 +14,7 @@ struct _GLES2Debayer {
GLuint program;
GLuint uniform_transform;
GLuint uniform_pixel_size;
GLuint uniform_padding_ratio;
GLuint uniform_texture;
GLuint uniform_color_matrix;
GLuint uniform_row_length;
@@ -68,6 +69,8 @@ gles2_debayer_new(MPPixelFormat format)
self->uniform_transform = glGetUniformLocation(self->program, "transform");
self->uniform_pixel_size = glGetUniformLocation(self->program, "pixel_size");
self->uniform_padding_ratio =
glGetUniformLocation(self->program, "padding_ratio");
self->uniform_texture = glGetUniformLocation(self->program, "texture");
self->uniform_color_matrix =
glGetUniformLocation(self->program, "color_matrix");
@@ -156,12 +159,17 @@ gles2_debayer_configure(GLES2Debayer *self,
}
check_gl();
GLuint row_length = mp_pixel_format_width_to_bytes(self->format, src_width);
if (mp_pixel_format_bits_per_pixel(self->format) == 10) {
assert(src_width % 4 == 0);
glUniform1f(self->uniform_row_length,
mp_pixel_format_width_to_bytes(self->format, src_width));
glUniform1f(self->uniform_row_length, row_length);
check_gl();
}
GLuint padding_bytes =
mp_pixel_format_width_to_padding(self->format, src_width);
GLfloat padding_ratio = (float)row_length / (row_length + padding_bytes);
glUniform1f(self->uniform_padding_ratio, padding_ratio);
}
void

View File

@@ -327,7 +327,9 @@ process_image_for_preview(const uint8_t *image)
glTexImage2D(GL_TEXTURE_2D,
0,
GL_LUMINANCE,
mp_pixel_format_width_to_bytes(mode.pixel_format, mode.width),
mp_pixel_format_width_to_bytes(mode.pixel_format, mode.width) +
mp_pixel_format_width_to_padding(mode.pixel_format,
mode.width),
mode.height,
0,
GL_LUMINANCE,
@@ -681,7 +683,9 @@ process_image(MPPipeline *pipeline, const MPBuffer *buffer)
clock_t t1 = clock();
#endif
size_t size = mp_pixel_format_width_to_bytes(mode.pixel_format, mode.width) *
size_t size =
(mp_pixel_format_width_to_bytes(mode.pixel_format, mode.width) +
mp_pixel_format_width_to_padding(mode.pixel_format, mode.width)) *
mode.height;
uint8_t *image = malloc(size);
memcpy(image, buffer->data, size);