GUAC-240: Move JPEG optimality test into own function.
This commit is contained in:
parent
baf01d5524
commit
dd2e020351
@ -284,7 +284,7 @@ static void __guac_common_mark_dirty(guac_common_surface* surface, const guac_co
|
|||||||
* The average refresh frequency.
|
* The average refresh frequency.
|
||||||
*/
|
*/
|
||||||
static unsigned int __guac_common_surface_calculate_framerate(
|
static unsigned int __guac_common_surface_calculate_framerate(
|
||||||
guac_common_surface* surface, guac_common_rect* rect) {
|
guac_common_surface* surface, const guac_common_rect* rect) {
|
||||||
|
|
||||||
int x, y;
|
int x, y;
|
||||||
|
|
||||||
@ -335,6 +335,31 @@ static unsigned int __guac_common_surface_calculate_framerate(
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether the given rectangle would be optimally encoded as JPEG
|
||||||
|
* rather than PNG.
|
||||||
|
*
|
||||||
|
* @param surface
|
||||||
|
* The surface to be queried.
|
||||||
|
*
|
||||||
|
* @param rect
|
||||||
|
* The rectangle to check.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* Non-zero if the rectangle would be optimally encoded as JPEG, zero
|
||||||
|
* otherwise.
|
||||||
|
*/
|
||||||
|
static int __guac_common_surface_should_use_jpeg(guac_common_surface* surface,
|
||||||
|
const guac_common_rect* rect) {
|
||||||
|
|
||||||
|
/* Calculate the average framerate for the given rect */
|
||||||
|
int framerate = __guac_common_surface_calculate_framerate(surface, rect);
|
||||||
|
|
||||||
|
/* JPEG is preferred if rect is hot and smooth */
|
||||||
|
return framerate >= GUAC_COMMON_SURFACE_LOSSY_REFRESH_FREQUENCY;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Touch the heat map with this update rectangle, so that the update
|
* Touch the heat map with this update rectangle, so that the update
|
||||||
* frequency can be calculated later.
|
* frequency can be calculated later.
|
||||||
@ -1264,13 +1289,9 @@ void guac_common_surface_flush(guac_common_surface* surface) {
|
|||||||
|
|
||||||
flushed++;
|
flushed++;
|
||||||
|
|
||||||
/* Calculate the average framerate for the dirty rect */
|
/* Flush as JPEG if JPEG is preferred */
|
||||||
int framerate =
|
if (__guac_common_surface_should_use_jpeg(surface,
|
||||||
__guac_common_surface_calculate_framerate(surface,
|
&surface->dirty_rect))
|
||||||
&surface->dirty_rect);
|
|
||||||
|
|
||||||
/* If this rectangle is hot, flush as JPEG */
|
|
||||||
if (framerate >= GUAC_COMMON_SURFACE_LOSSY_REFRESH_FREQUENCY)
|
|
||||||
__guac_common_surface_flush_to_jpeg(surface);
|
__guac_common_surface_flush_to_jpeg(surface);
|
||||||
|
|
||||||
/* Otherwise, use PNG */
|
/* Otherwise, use PNG */
|
||||||
|
Loading…
Reference in New Issue
Block a user