static bool task_http_retriever(retro_task_t *task, void *data) { http_transfer_info_t *info = (http_transfer_info_t*)data; /* Extract HTTP handle and return already if invalid */ http_handle_t *http = (http_handle_t *)task->state; if (!http) return false; /* Fill HTTP info link */ strlcpy(info->url, http->connection.url, sizeof(info->url)); info->progress = task_get_progress(task); return true; }
/** * task_screenshot_handler: * @task : the task being worked on * * Saves a screenshot to disk. **/ static void task_screenshot_handler(retro_task_t *task) { screenshot_task_state_t *state = (screenshot_task_state_t*)task->state; bool ret = false; if (task_get_progress(task) == 100) { task_set_finished(task, true); if (task->title) task_free_title(task); if (state->userbuf) free(state->userbuf); free(state); return; } ret = screenshot_dump_direct(state); #ifdef HAVE_IMAGEVIEWER if ( ret && !state->silence && state->history_list_enable ) command_playlist_push_write( g_defaults.image_history, state->filename, NULL, "builtin", "imageviewer", NULL, NULL); #endif task_set_progress(task, 100); if (!ret) { char *msg = strdup(msg_hash_to_str(MSG_FAILED_TO_TAKE_SCREENSHOT)); runloop_msg_queue_push(msg, 1, state->is_paused ? 1 : 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); free(msg); } if (task->title) task_free_title(task); }
/** * task_screenshot_handler: * @task : the task being worked on * * Saves a screenshot to disk. **/ static void task_screenshot_handler(retro_task_t *task) { #ifdef HAVE_RBMP enum rbmp_source_type bmp_type = RBMP_SOURCE_TYPE_DONT_CARE; #endif screenshot_task_state_t *state = (screenshot_task_state_t*)task->state; struct scaler_ctx *scaler = (struct scaler_ctx*)&state->scaler; bool ret = false; if (task_get_progress(task) == 100) { task_set_finished(task, true); if (state->userbuf) free(state->userbuf); free(state); return; } #ifdef HAVE_RBMP (void)bmp_type; #endif #if defined(_XBOX1) if (XGWriteSurfaceToFile(state->surf, state->filename) == S_OK) ret = true; state->surf->Release(); #elif defined(HAVE_RPNG) if (state->bgr24) scaler->in_fmt = SCALER_FMT_BGR24; else if (state->pixel_format_type == RETRO_PIXEL_FORMAT_XRGB8888) scaler->in_fmt = SCALER_FMT_ARGB8888; else scaler->in_fmt = SCALER_FMT_RGB565; video_frame_convert_to_bgr24( scaler, state->out_buffer, (const uint8_t*)state->frame + ((int)state->height - 1) * state->pitch, state->width, state->height, -state->pitch); scaler_ctx_gen_reset(&state->scaler); ret = rpng_save_image_bgr24( state->filename, state->out_buffer, state->width, state->height, state->width * 3 ); free(state->out_buffer); #elif defined(HAVE_RBMP) if (state->bgr24) bmp_type = RBMP_SOURCE_TYPE_BGR24; else if (state->pixel_format_type == RETRO_PIXEL_FORMAT_XRGB8888) bmp_type = RBMP_SOURCE_TYPE_XRGB888; ret = rbmp_save_image(state->filename, state->frame, state->width, state->height, state->pitch, bmp_type); #endif #ifdef HAVE_IMAGEVIEWER if (ret && !state->silence) { if ( state->history_list_enable && g_defaults.image_history && playlist_push( g_defaults.image_history, state->filename, NULL, "builtin", "imageviewer", NULL, NULL ) ) playlist_write_file(g_defaults.image_history); } #endif task_set_progress(task, 100); if (!ret) { char *msg = strdup(msg_hash_to_str(MSG_FAILED_TO_TAKE_SCREENSHOT)); runloop_msg_queue_push(msg, 1, state->is_paused ? 1 : 180, true); free(msg); } }