summaryrefslogtreecommitdiff
authoralwin <alwin>2005-04-12 18:01:08 (UTC)
committer alwin <alwin>2005-04-12 18:01:08 (UTC)
commitbe565a8eb0c602e5173b71cf71ba510a7a7f4520 (patch) (side-by-side diff)
tree2091e68446c071a5ce7a6d375db0afab695c46bd
parent4fd936e4096ba9c732bde17a48489bfbb94b19ba (diff)
downloadopie-be565a8eb0c602e5173b71cf71ba510a7a7f4520.zip
opie-be565a8eb0c602e5173b71cf71ba510a7a7f4520.tar.gz
opie-be565a8eb0c602e5173b71cf71ba510a7a7f4520.tar.bz2
buildfix
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/multimedia/opieplayer2/yuv2rgb_arm2.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/noncore/multimedia/opieplayer2/yuv2rgb_arm2.c b/noncore/multimedia/opieplayer2/yuv2rgb_arm2.c
index cbd32e8..91cd0b1 100644
--- a/noncore/multimedia/opieplayer2/yuv2rgb_arm2.c
+++ b/noncore/multimedia/opieplayer2/yuv2rgb_arm2.c
@@ -7,128 +7,129 @@
*
* you can redistribute this file and/or modify
* it under the terms of the GNU General Public License (version 2)
* as published by the Free Software Foundation.
*
* This file is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*
* The function defined in this file, are derived from work done in the xine
* project.
* In order to improve performance, by strongly reducing memory bandwidth
* needed, the scaling functions are merged with the yuv2rgb function.
*/
#ifdef __arm__
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <inttypes.h>
#include "yuv2rgb.h"
#include <xine/xineutils.h>
/* Prototypes of the "local" functions available here: */
/* first prototype, function called when no scaling is needed: */
static void arm_rgb16_noscale(yuv2rgb_t*, uint8_t*, uint8_t*, uint8_t*, uint8_t*);
/* second prototype, function called when no horizontal scaling is needed: */
static void arm_rgb16_step_dx_32768(yuv2rgb_t*, uint8_t*, uint8_t*, uint8_t*, uint8_t*);
/* third prototype, function called when scaling is needed for zooming in: */
static void arm_rgb16_step_dx_inf_32768(yuv2rgb_t*, uint8_t*, uint8_t*, uint8_t*, uint8_t*);
/* fourth prototype, function called when scaling is needed for zooming out (between 1x and 2x): */
static void arm_rgb16_step_dx_bet_32768_65536(yuv2rgb_t*, uint8_t*, uint8_t*, uint8_t*, uint8_t*);
/* fifth prototype, function called when scaling is needed for zooming out (greater than 2x): */
static void arm_rgb16_step_dx_sup_65536(yuv2rgb_t*, uint8_t*, uint8_t*, uint8_t*, uint8_t*);
/* sixth prototype, function where the decision of the scaling function to use is made.*/
static void arm_rgb16_2 (yuv2rgb_t*, uint8_t*, uint8_t*, uint8_t*, uint8_t*);
/* extern function: */
/* Function: */
void yuv2rgb_init_arm (yuv2rgb_factory_t *this)
/* This function initialise the member yuv2rgb_fun, if everything is right
the function optimised for the arm target should be used.*/
{
if (this->swapped)
return; /*no swapped pixel output upto now*/
switch (this->mode)
{
case MODE_16_RGB:
this->yuv2rgb_fun = arm_rgb16_2;
break;
default:
+ break;
}
}
/* local functions: */
/* Function: */
static void arm_rgb16_2 (yuv2rgb_t *this, uint8_t * _dst, uint8_t * _py, uint8_t * _pu, uint8_t * _pv)
/* This function takes care of applying the right scaling conversion
(yuv2rgb is included in each scaling function!)*/
{
if (!this->do_scale)
{
arm_rgb16_noscale(this, _dst, _py, _pu, _pv);
return;
}
if (this->step_dx<32768)
{
arm_rgb16_step_dx_inf_32768(this, _dst, _py, _pu, _pv);
return;
}
if (this->step_dx==32768)
{
arm_rgb16_step_dx_32768(this, _dst, _py, _pu, _pv);
return;
}
if (this->step_dx<65536)
{
arm_rgb16_step_dx_bet_32768_65536(this, _dst, _py, _pu, _pv);
return;
}
arm_rgb16_step_dx_sup_65536(this, _dst, _py, _pu, _pv);
return;
}
/* Function: */
static void arm_rgb16_noscale(yuv2rgb_t *this, uint8_t * _dst, uint8_t * _py, uint8_t * _pu, uint8_t * _pv)
/* This function is called when the source and the destination pictures have the same size.
In this case, scaling part is not needed.
(This code is probably far from being optimised, in particular, the asm
generated is not the most efficient, a pure asm version will probably
emerge sooner or later). But at least, this version is faster than what
was used before.*/
{
int height;
height=this->dest_height;
while (height>0)
{
uint16_t *r, *g, *b;
uint8_t *py, *py2, *pu, *pv;
uint16_t *dst, *dst2;
int width;
register uint8_t p1y, p1u, p1v;
height-=2;
width=this->dest_width;
dst = _dst;
dst2 = _dst + this->rgb_stride;
py = _py;
py2 = _py + this->y_stride;