framebuffer.c revision 8b23a6c7e1aee255004dd19098d4c2462b61b849
18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Copyright (C) 2007-2008 The Android Open Source Project 28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** 38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** This software is licensed under the terms of the GNU General Public 48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** License version 2, as published by the Free Software Foundation, and 58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** may be copied, distributed, and modified under those terms. 68b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** 78b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** This program is distributed in the hope that it will be useful, 88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** but WITHOUT ANY WARRANTY; without even the implied warranty of 98b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** GNU General Public License for more details. 118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project*/ 128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "framebuffer.h" 138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include <memory.h> 148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include <stdlib.h> 158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct { 178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project /* client fields, these correspond to code that waits for updates before displaying them */ 188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project /* at the moment, only one client is supported */ 198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project void* fb_opaque; 208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project QFrameBufferUpdateFunc fb_update; 218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project QFrameBufferRotateFunc fb_rotate; 228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project QFrameBufferDoneFunc fb_done; 238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project void* pr_opaque; 258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project QFrameBufferCheckUpdateFunc pr_check; 268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project QFrameBufferInvalidateFunc pr_invalidate; 278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project QFrameBufferDetachFunc pr_detach; 288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} QFrameBufferExtra; 308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic int 338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project_get_pitch( int width, QFrameBufferFormat format ) 348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project switch (format) { 378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project case QFRAME_BUFFER_RGB565: 388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project return width*2; 398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project default: 408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project return -1; 418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint 468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectqframebuffer_init( QFrameBuffer* qfbuff, 478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int width, 488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int height, 498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int rotation, 508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project QFrameBufferFormat format ) 518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int pitch; 538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project rotation &= 3; 558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (!qfbuff || width < 0 || height < 0) 578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project return -1; 588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project pitch = _get_pitch( width, format ); 608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (pitch < 0) 618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project return -1; 628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project memset( qfbuff, 0, sizeof(*qfbuff) ); 648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project qfbuff->extra = calloc( 1, sizeof(QFrameBufferExtra) ); 668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (qfbuff->extra == NULL) 678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project return -1; 688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project qfbuff->pixels = calloc( pitch, height ); 708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (qfbuff->pixels == NULL && (height > 0 && pitch > 0)) { 718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project free( qfbuff->extra ); 728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project return -1; 738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project qfbuff->width = width; 768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project qfbuff->height = height; 778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project qfbuff->pitch = pitch; 788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project qfbuff->format = format; 798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project qframebuffer_set_dpi( qfbuff, DEFAULT_FRAMEBUFFER_DPI, DEFAULT_FRAMEBUFFER_DPI ); 818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project return 0; 828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid 868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectqframebuffer_set_dpi( QFrameBuffer* qfbuff, 878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int x_dpi, 888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int y_dpi ) 898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project /* dpi = dots / inch 918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project ** inch = dots / dpi 928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project ** mm / 25.4 = dots / dpi 938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project ** mm = (dots * 25.4)/dpi 948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project */ 958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project qfbuff->phys_width_mm = (int)(0.5 + 25.4 * qfbuff->width / x_dpi); 968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project qfbuff->phys_height_mm = (int)(0.5 + 25.4 * qfbuff->height / y_dpi); 978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* alternative to qframebuffer_set_dpi where one can set the physical dimensions directly */ 1008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* in millimeters. for the record 1 inch = 25.4 mm */ 1018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid 1028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectqframebuffer_set_mm( QFrameBuffer* qfbuff, 1038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int width_mm, 1048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int height_mm ) 1058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project qfbuff->phys_width_mm = width_mm; 1078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project qfbuff->phys_height_mm = height_mm; 1088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 1098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid 1118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectqframebuffer_update( QFrameBuffer* qfbuff, int x, int y, int w, int h ) 1128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project QFrameBufferExtra* extra = qfbuff->extra; 1148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (extra->fb_update) 1168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project extra->fb_update( extra->fb_opaque, x, y, w, h ); 1178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 1188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid 1218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectqframebuffer_add_client( QFrameBuffer* qfbuff, 1228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project void* fb_opaque, 1238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project QFrameBufferUpdateFunc fb_update, 1248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project QFrameBufferRotateFunc fb_rotate, 1258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project QFrameBufferDoneFunc fb_done ) 1268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project QFrameBufferExtra* extra = qfbuff->extra; 1288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project extra->fb_opaque = fb_opaque; 1308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project extra->fb_update = fb_update; 1318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project extra->fb_rotate = fb_rotate; 1328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project extra->fb_done = fb_done; 1338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 1348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid 1368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectqframebuffer_set_producer( QFrameBuffer* qfbuff, 1378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project void* opaque, 1388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project QFrameBufferCheckUpdateFunc pr_check, 1398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project QFrameBufferInvalidateFunc pr_invalidate, 1408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project QFrameBufferDetachFunc pr_detach ) 1418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project QFrameBufferExtra* extra = qfbuff->extra; 1438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project extra->pr_opaque = opaque; 1458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project extra->pr_check = pr_check; 1468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project extra->pr_invalidate = pr_invalidate; 1478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project extra->pr_detach = pr_detach; 1488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 1498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid 1528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectqframebuffer_rotate( QFrameBuffer* qfbuff, int rotation ) 1538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project QFrameBufferExtra* extra = qfbuff->extra; 1558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if ((rotation ^ qfbuff->rotation) & 1) { 1578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project /* swap width and height if new rotation requires it */ 1588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int temp = qfbuff->width; 1598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project qfbuff->width = qfbuff->height; 1608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project qfbuff->height = temp; 1618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project qfbuff->pitch = _get_pitch( qfbuff->width, qfbuff->format ); 1628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project temp = qfbuff->phys_width_mm; 1648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project qfbuff->phys_width_mm = qfbuff->phys_height_mm; 1658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project qfbuff->phys_height_mm = temp; 1668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 1678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project qfbuff->rotation = rotation; 1688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (extra->fb_rotate) 1708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project extra->fb_rotate( extra->fb_opaque, rotation ); 1718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 1728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void 1758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectqframebuffer_done( QFrameBuffer* qfbuff ) 1768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project QFrameBufferExtra* extra = qfbuff->extra; 1788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (extra) { 1808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (extra->pr_detach) 1818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project extra->pr_detach( extra->pr_opaque ); 1828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (extra->fb_done) 1848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project extra->fb_done( extra->fb_opaque ); 1858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 1868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project free( qfbuff->pixels ); 1888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project free( qfbuff->extra ); 1898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project memset( qfbuff, 0, sizeof(*qfbuff) ); 1908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 1918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define MAX_FRAME_BUFFERS 8 1948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic QFrameBuffer* framebuffer_fifo[ MAX_FRAME_BUFFERS ]; 1968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic int framebuffer_fifo_rpos; 1978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic int framebuffer_fifo_count; 1988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid 2008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectqframebuffer_fifo_add( QFrameBuffer* qfbuff ) 2018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 2028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (framebuffer_fifo_count >= MAX_FRAME_BUFFERS) 2038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project return; 2048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 2058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project framebuffer_fifo[ framebuffer_fifo_count++ ] = qfbuff; 2068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 2078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 2088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 2098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source ProjectQFrameBuffer* 2108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectqframebuffer_fifo_get( void ) 2118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 2128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (framebuffer_fifo_rpos >= framebuffer_fifo_count) 2138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project return NULL; 2148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 2158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project return framebuffer_fifo[ framebuffer_fifo_rpos++ ]; 2168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 2178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 2188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 2198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid 2208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectqframebuffer_check_updates( void ) 2218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 2228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int nn; 2238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project for (nn = 0; nn < framebuffer_fifo_count; nn++) { 2248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project QFrameBuffer* q = framebuffer_fifo[nn]; 2258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project QFrameBufferExtra* extra = q->extra; 2268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 2278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (extra->pr_check) 2288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project extra->pr_check( extra->pr_opaque ); 2298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 2308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 2318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 2328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid 2338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectqframebuffer_invalidate_all( void ) 2348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 2358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int nn; 2368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project for (nn = 0; nn < framebuffer_fifo_count; nn++) { 2378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project QFrameBuffer* q = framebuffer_fifo[nn]; 2388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project QFrameBufferExtra* extra = q->extra; 2398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 2408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (extra->pr_invalidate) 2418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project extra->pr_invalidate( extra->pr_opaque ); 2428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 2438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 244