commit e8e7cd69e60a4464dbc77ab698bee9acfbd72d8f
parent 1cb07c131753e1343d45196407e661ef86fd22be
Author: Nihal Jere <nihal@nihaljere.xyz>
Date: Tue, 25 Oct 2022 12:39:08 -0500
fix vertical scaling on frame
Diffstat:
M | main.c | | | 30 | +++++++++++++++--------------- |
1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/main.c b/main.c
@@ -200,11 +200,8 @@ main(int argc, char *argv[])
}
// suggested bitrates: https://www.videoproc.com/media-converter/bitrate-setting-for-h264.htm
- // 720 x 480: 1800 kbps
- // 1280 x 720: 3500 kbps
- // 1920 x 1080: 8500 kbps
- c->bit_rate = 1800*1000;
- c->width = 720;
+ c->bit_rate = 2500*1000;
+ c->width = 854;
c->height = 480;
c->time_base.num = 1;
c->time_base.den = 30;
@@ -228,7 +225,7 @@ main(int argc, char *argv[])
return 1;
}
- surface = cairo_image_surface_create(CAIRO_FORMAT_RGB24, 720, 480);
+ surface = cairo_image_surface_create(CAIRO_FORMAT_RGB24, 854, 480);
cr = cairo_create(surface);
cairo_set_font_face(cr, cface);
@@ -239,31 +236,34 @@ main(int argc, char *argv[])
}
/* fill with white */
cairo_set_source_rgb(cr, 1.0, 1.0, 1.0);
- cairo_rectangle(cr, 0, 0, 720, 480);
+ cairo_rectangle(cr, 0, 0, 854, 480);
cairo_fill(cr);
if (luaL_dofile(L, "smallpond.lua")) {
fprintf(stderr, "lua error: %s\n", lua_tostring(L, -1));
return 1;
}
- unsigned char *image_data = cairo_image_surface_get_data(surface);
+ cairo_surface_flush(surface);
+ uint8_t *image_data = cairo_image_surface_get_data(surface);
+
+ cairo_surface_write_to_png(surface, "out.png");
- printf("avframe line size: %d\n", frame->linesize[0]);
for (int i = 0; i < 30; i++) {
if (av_frame_make_writable(frame) < 0) {
fprintf(stderr, "couldn't make frame writeable\n");
return 1;
}
- for (int x = 0; x < 720; x++) {
- for (int y = 0; y < 480; y++) {
- int srcoffset = cairo_format_stride_for_width(CAIRO_FORMAT_RGB24, 720) * y + x;
- uint32_t val = ((uint32_t *)image_data)[srcoffset];
+ for (int y = 0; y < 480; y++) {
+ for (int x = 0; x < 854; x++) {
+ int srcoffset = cairo_image_surface_get_stride(surface) * y + 4*x;
+ uint32_t val = *(uint32_t *)(image_data + srcoffset);
// we are assuming RGB24 here
int offset = y * frame->linesize[0] + 3*x;
- frame->data[0][offset + 2] = (val >> 16) & 0xFF;
+
+ frame->data[0][offset] = (val >> 16) & 0xFF;
frame->data[0][offset + 1] = (val >> 8) & 0xFF;
- frame->data[0][offset] = val & 0xFF;
+ frame->data[0][offset + 2] = val & 0xFF;
}
}