- Visual C++源码
- Visual Basic源码
- C++ Builder源码
- Java源码
- Delphi源码
- C/C++源码
- PHP源码
- Perl源码
- Python源码
- Asm源码
- Pascal源码
- Borland C++源码
- Others源码
- SQL源码
- VBScript源码
- JavaScript源码
- ASP/ASPX源码
- C#源码
- Flash/ActionScript源码
- matlab源码
- PowerBuilder源码
- LabView源码
- Flex源码
- MathCAD源码
- VBA源码
- IDL源码
- Lisp/Scheme源码
- VHDL源码
- Objective-C源码
- Fortran源码
- tcl/tk源码
- QT源码
block_mx1.c
资源名称:tcpmp.rar [点击查看]
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:3k
源码类别:
Windows CE
开发平台:
C/C++
- /*****************************************************************************
- *
- * This program is free software ; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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
- *
- * $Id: block_mx1.c 271 2005-08-09 08:31:35Z picard $
- *
- * The Core Pocket Media Player
- * Copyright (c) 2004-2005 Gabor Kovacs
- *
- ****************************************************************************/
- #include "../common.h"
- #include "softidct.h"
- #ifdef FREESCALE_MX1
- void MX1PopNone(struct softidct* p)
- {
- }
- static void MX1Pop(struct softidct* p)
- {
- int x0,x1,x2,x3,x4,x5,x6,x7;
- uint8_t *DstEnd;
- uint8_t *Dst = p->MX1Dst;
- int Pitch = p->MX1Pitch;
- volatile int* MX1 = p->MX1;
- while (!(MX1[-61] & 0x20));
- DstEnd = Dst + Pitch*8;
- do
- {
- x0 = *MX1; x1 = x0 >> (16+7); x0 <<= 16; x0 >>= (16+7);
- x2 = *MX1; x3 = x2 >> (16+7); x2 <<= 16; x2 >>= (16+7);
- x4 = *MX1; x5 = x4 >> (16+7); x4 <<= 16; x4 >>= (16+7);
- x6 = *MX1; x7 = x6 >> (16+7); x6 <<= 16; x6 >>= (16+7);
- if ((x0|x1|x2|x3|x4|x5|x6|x7)>>8)
- {
- SAT(x0)
- SAT(x1)
- SAT(x2)
- SAT(x3)
- SAT(x4)
- SAT(x5)
- SAT(x6)
- SAT(x7)
- }
- Dst[0] = (uint8_t)x0;
- Dst[1] = (uint8_t)x1;
- Dst[2] = (uint8_t)x2;
- Dst[3] = (uint8_t)x3;
- Dst[4] = (uint8_t)x4;
- Dst[5] = (uint8_t)x5;
- Dst[6] = (uint8_t)x6;
- Dst[7] = (uint8_t)x7;
- Dst += Pitch;
- } while (Dst != DstEnd);
- }
- static void MX1PopAdd(struct softidct* p)
- {
- int x0,x1,x2,x3,x4,x5,x6,x7;
- uint8_t *DstEnd;
- uint8_t *Dst = p->MX1Dst;
- uint8_t *Src = p->Tmp;
- int Pitch = p->MX1Pitch;
- volatile int* MX1 = p->MX1;
- while (!(MX1[-61] & 0x20));
- DstEnd = Dst + Pitch*8;
- do
- {
- x0 = *MX1; x1 = x0 >> (16+7); x0 <<= 16; x0 >>= (16+7);
- x2 = *MX1; x3 = x2 >> (16+7); x2 <<= 16; x2 >>= (16+7);
- x4 = *MX1; x5 = x4 >> (16+7); x4 <<= 16; x4 >>= (16+7);
- x6 = *MX1; x7 = x6 >> (16+7); x6 <<= 16; x6 >>= (16+7);
- x0 += Src[0];
- x1 += Src[1];
- x2 += Src[2];
- x3 += Src[3];
- x4 += Src[4];
- x5 += Src[5];
- x6 += Src[6];
- x7 += Src[7];
- Src += 8;
- if ((x0|x1|x2|x3|x4|x5|x6|x7)>>8)
- {
- SAT(x0)
- SAT(x1)
- SAT(x2)
- SAT(x3)
- SAT(x4)
- SAT(x5)
- SAT(x6)
- SAT(x7)
- }
- Dst[0] = (uint8_t)x0;
- Dst[1] = (uint8_t)x1;
- Dst[2] = (uint8_t)x2;
- Dst[3] = (uint8_t)x3;
- Dst[4] = (uint8_t)x4;
- Dst[5] = (uint8_t)x5;
- Dst[6] = (uint8_t)x6;
- Dst[7] = (uint8_t)x7;
- Dst += Pitch;
- } while (Dst != DstEnd);
- }
- #define Intra8x8 MX1Intra8x8
- #define Inter8x8Back MX1Inter8x8Back
- #define Inter8x8BackFwd MX1Inter8x8BackFwd
- #include "block_mx1.h"
- #undef Intra8x8
- #undef Inter8x8Back
- #undef Inter8x8BackFwd
- #ifdef CONFIG_IDCT_SWAP
- #define SWAPXY
- #define SWAP8X4
- #define Intra8x8 MX1Intra8x8Swap
- #define Inter8x8Back MX1Inter8x8BackSwap
- #define Inter8x8BackFwd MX1Inter8x8BackFwdSwap
- #include "block_mx1.h"
- #endif
- #endif