/* Calculate or load a palette, depending on configuration. */ int video_color_update_palette(struct video_canvas_s *canvas) { palette_t *palette; video_ycbcr_palette_t *ycbcr; video_resources_t *video_resources; DBG(("video_color_update_palette canvas: %p", canvas)); if (canvas == NULL) { return 0; } canvas->videoconfig->color_tables.updated = 1; DBG(("video_color_update_palette cbm palette:%d extern: %d", canvas->videoconfig->cbm_palette ? 1 : 0, canvas->videoconfig->external_palette ? 1 : 0)); if (canvas->videoconfig->cbm_palette == NULL) { return 0; } video_resources = &(canvas->videoconfig->video_resources); if (canvas->videoconfig->external_palette) { palette = video_load_palette(canvas->videoconfig->cbm_palette, canvas->videoconfig->external_palette_name); if (!palette) { return -1; } video_calc_gammatable(video_resources); ycbcr = video_ycbcr_palette_create(palette->num_entries); video_palette_to_ycbcr(palette, ycbcr); video_calc_ycbcrtable(video_resources, ycbcr, &canvas->videoconfig->color_tables); if (canvas->videoconfig->filter == VIDEO_FILTER_CRT) { palette_free(palette); palette = video_calc_palette(canvas, ycbcr); } /* additional table for odd lines */ video_palette_to_ycbcr_oddlines(palette, ycbcr); video_calc_ycbcrtable_oddlines(video_resources, ycbcr, &canvas->videoconfig->color_tables); } else { video_calc_gammatable(video_resources); ycbcr = video_ycbcr_palette_create(canvas->videoconfig->cbm_palette->num_entries); video_cbm_palette_to_ycbcr(canvas->videoconfig->cbm_palette, ycbcr); video_calc_ycbcrtable(video_resources, ycbcr, &canvas->videoconfig->color_tables); palette = video_calc_palette(canvas, ycbcr); /* additional table for odd lines */ video_cbm_palette_to_ycbcr_oddlines(video_resources, canvas->videoconfig->cbm_palette, ycbcr); video_calc_ycbcrtable_oddlines(video_resources, ycbcr, &canvas->videoconfig->color_tables); } video_ycbcr_palette_free(ycbcr); if (palette != NULL) { return video_canvas_palette_set(canvas, palette); } return -1; }
/* called by archdep code for first initial setup */ void video_render_initraw(struct video_render_config_s *videoconfig) { video_calc_gammatable(&(videoconfig->video_resources)); }
/* called by archdep code for first initial setup */ void video_render_initraw(struct video_render_config_s *videoconfig) { int video; resources_get_int("MachineVideoStandard", &video); video_calc_gammatable(&(videoconfig->video_resources), video); }
/* Calculate or load a palette, depending on configuration. */ int video_color_update_palette(struct video_canvas_s *canvas) { palette_t *palette; video_ycbcr_palette_t *ycbcr; video_resources_t *video_resources; int video; DBG(("video_color_update_palette canvas: %p", canvas)); if (canvas == NULL) { return 0; } canvas->videoconfig->color_tables.updated = 1; DBG(("video_color_update_palette cbm palette:%d extern: %d", canvas->videoconfig->cbm_palette ? 1 : 0, canvas->videoconfig->external_palette ? 1 : 0)); if (canvas->videoconfig->cbm_palette == NULL) { return 0; } /*resources_get_int("MachineVideoStandard", &video);*/ video = canvas->viewport->crt_type; video_resources = &(canvas->videoconfig->video_resources); #if 0 /* setup the palette params so we get 100% the same as in peptos calculations */ video_resources->color_saturation = 1000; video_resources->color_brightness = 1000; video_resources->color_contrast = 1000; video_resources->color_tint = 1000; canvas->videoconfig->cbm_palette->saturation = 34.0081334493f; canvas->videoconfig->cbm_palette->phase = 0; DBG(("sat:%d bri:%d con:%d tin:%d", video_resources->color_saturation, video_resources->color_brightness, video_resources->color_contrast, video_resources->color_tint )); #endif if (canvas->videoconfig->external_palette) { palette = video_load_palette(canvas->videoconfig->cbm_palette, canvas->videoconfig->external_palette_name); if (!palette) { return -1; } video_calc_gammatable(video_resources, video); ycbcr = video_ycbcr_palette_create(palette->num_entries); video_palette_to_ycbcr(palette, ycbcr, video); video_calc_ycbcrtable(video_resources, ycbcr, &canvas->videoconfig->color_tables, video); if (canvas->videoconfig->filter == VIDEO_FILTER_CRT) { palette_free(palette); palette = video_calc_palette(canvas, ycbcr, video); } /* additional table for odd lines */ video_palette_to_ycbcr_oddlines(palette, ycbcr, video); video_calc_ycbcrtable_oddlines(video_resources, ycbcr, &canvas->videoconfig->color_tables, video); } else { video_calc_gammatable(video_resources, video); ycbcr = video_ycbcr_palette_create(canvas->videoconfig->cbm_palette->num_entries); video_cbm_palette_to_ycbcr(canvas->videoconfig->cbm_palette, ycbcr, video); video_calc_ycbcrtable(video_resources, ycbcr, &canvas->videoconfig->color_tables, video); palette = video_calc_palette(canvas, ycbcr, video); /* additional table for odd lines */ video_cbm_palette_to_ycbcr_oddlines(video_resources, canvas->videoconfig->cbm_palette, ycbcr, video); video_calc_ycbcrtable_oddlines(video_resources, ycbcr, &canvas->videoconfig->color_tables, video); } video_ycbcr_palette_free(ycbcr); if (palette != NULL) { return video_canvas_palette_set(canvas, palette); } return -1; }