static UI_MENU_CALLBACK(save_screenshot_callback) { char title[20]; char *name = NULL; int width; int height; gfxoutputdrv_t *selected_driver = NULL; if (activated) { sprintf(title, "Choose %s file", (char *)param); name = sdl_ui_file_selection_dialog(title, FILEREQ_MODE_SAVE_FILE); if (name != NULL) { width = sdl_active_canvas->draw_buffer->draw_buffer_width; height = sdl_active_canvas->draw_buffer->draw_buffer_height; memcpy(sdl_active_canvas->draw_buffer->draw_buffer, sdl_ui_get_draw_buffer(), width * height); selected_driver = gfxoutput_get_driver((char *)param); util_add_extension(&name, selected_driver->default_extension); if (screenshot_save((char *)param, name, sdl_active_canvas) < 0) { ui_error("Cannot save screenshot."); } lib_free(name); } } return NULL; }
static int output_graphics_open(unsigned int prnr, output_parameter_t *output_parameter) { const char *filename; int device = 0; output_gfx[prnr].gfxoutputdrv = gfxoutput_get_driver("BMP"); if (output_gfx[prnr].gfxoutputdrv == NULL) { return -1; } switch (prnr) { case 0: resources_get_int("Printer4TextDevice", &device); break; case 1: resources_get_int("Printer5TextDevice", &device); break; case 2: resources_get_int("PrinterUserportTextDevice", &device); break; } resources_get_string_sprintf("PrinterTextDevice%d", &filename, device + 1); if (filename == NULL) { filename = "prngfx"; } output_gfx[prnr].filename = lib_malloc(strlen(filename) + 3); sprintf(output_gfx[prnr].filename, "%s00", filename); output_gfx[prnr].screenshot.width = output_parameter->maxcol; output_gfx[prnr].screenshot.height = output_parameter->maxrow; output_gfx[prnr].screenshot.dpi_x = output_parameter->dpi_x; output_gfx[prnr].screenshot.dpi_y = output_parameter->dpi_y; output_gfx[prnr].screenshot.y_offset = 0; output_gfx[prnr].screenshot.palette = output_parameter->palette; lib_free(output_gfx[prnr].line); output_gfx[prnr].line = lib_malloc(output_parameter->maxcol); memset(output_gfx[prnr].line, OUTPUT_PIXEL_WHITE, output_parameter->maxcol); output_gfx[prnr].line_pos = 0; output_gfx[prnr].line_no = 0; output_gfx[prnr].screenshot.convert_line = output_graphics_line_data; output_gfx[prnr].isopen = 0; return 0; }
int memmap_screenshot_save(const char *drvname, const char *filename, int x_size, int y_size, BYTE *gfx, BYTE *palette) { gfxoutputdrv_t *drv; if ((drv = gfxoutput_get_driver(drvname)) == NULL) { return -1; } if ((drv->savememmap)(filename, x_size, y_size, gfx, palette) < 0) { log_error(screenshot_log, "Saving failed..."); return -1; } return 0; }
void sdl_menu_ffmpeg_init(void) { int i; gfxoutputdrv_format_t *format; const char *w; ffmpeg_drv = gfxoutput_get_driver("FFMPEG"); if (!ffmpeg_drv) { #ifdef SDL_DEBUG fprintf(stderr, "%s: no driver found\n", __func__); #endif return; } format = ffmpeg_drv->formatlist; i = 0; do { format_menu[i].string = format->name; format_menu[i].type = MENU_ENTRY_RESOURCE_RADIO; format_menu[i].callback = custom_FFMPEGFormat_callback; format_menu[i].data = (ui_callback_data_t)(format->name); #ifdef SDL_DEBUG fprintf(stderr, "%s: format %i: %s\n", __func__, i, (format->name) ? format->name : "(NULL)"); #endif format++; i++; if (i == MAX_FORMATS) { #ifdef SDL_DEBUG fprintf(stderr, "%s: FIXME format %i > %i (MAX)\n", __func__, i, MAX_FORMATS); #endif break; } } while (format->name); format_menu[i].string = NULL; resources_get_string("FFMPEGFormat", &w); update_codec_menus(w); }
int screenshot_save(const char *drvname, const char *filename, struct video_canvas_s *canvas) { screenshot_t screenshot; gfxoutputdrv_t *drv; int result; if ((drv = gfxoutput_get_driver(drvname)) == NULL) { return -1; } if (recording_driver == drv) { ui_error(translate_text(IDGS_SORRY_NO_MULTI_RECORDING)); return -1; } if (machine_screenshot(&screenshot, canvas) < 0) { log_error(screenshot_log, "Retrieving screen geometry failed."); return -1; } if (drv->record != NULL) { recording_driver = drv; recording_canvas = canvas; reopen_recording_drivername = lib_stralloc(drvname); reopen_recording_canvas = canvas; reopen_filename = lib_stralloc(filename); } result = screenshot_save_core(&screenshot, drv, filename); if (result < 0) { recording_driver = NULL; recording_canvas = NULL; } return result; }