diff options
author | Siggi Langauf <siggi@users.sourceforge.net> | 2004-01-05 12:15:55 +0000 |
---|---|---|
committer | Siggi Langauf <siggi@users.sourceforge.net> | 2004-01-05 12:15:55 +0000 |
commit | 4905a06f1c2aab87487baf50b7919d2b05c92d6c (patch) | |
tree | f0c436ee80d0ac8d3efc434d680f78da6f06a2c5 | |
parent | ab8611e6033570aba72804a3d7d0bdb36e1730ec (diff) | |
download | xine-lib-4905a06f1c2aab87487baf50b7919d2b05c92d6c.tar.gz xine-lib-4905a06f1c2aab87487baf50b7919d2b05c92d6c.tar.bz2 |
wonder why Mike isn't complaining about C++ style comments, any more...
CVS patchset: 6003
CVS date: 2004/01/05 12:15:55
-rw-r--r-- | src/post/deinterlace/plugins/greedy2frame_template.c | 233 |
1 files changed, 120 insertions, 113 deletions
diff --git a/src/post/deinterlace/plugins/greedy2frame_template.c b/src/post/deinterlace/plugins/greedy2frame_template.c index 2380ee466..88b8c0899 100644 --- a/src/post/deinterlace/plugins/greedy2frame_template.c +++ b/src/post/deinterlace/plugins/greedy2frame_template.c @@ -1,72 +1,78 @@ -///////////////////////////////////////////////////////////////////////////// -// $Id: greedy2frame_template.c,v 1.4 2004/01/05 01:47:26 tmmm Exp $ -///////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2000 John Adcock, Tom Barry, Steve Grimm All rights reserved. -// port copyright (c) 2003 Miguel Freitas -///////////////////////////////////////////////////////////////////////////// -// -// This file is subject to the terms of the GNU General Public License as -// published by the Free Software Foundation. A copy of this license is -// included with this software distribution in the file COPYING. If you -// do not have a copy, you may obtain a copy by writing to the Free -// Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -// -// This software 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 -///////////////////////////////////////////////////////////////////////////// -// CVS Log -// -// $Log: greedy2frame_template.c,v $ -// Revision 1.4 2004/01/05 01:47:26 tmmm -// DOS/Win CRs are forbidden, verboten, interdit -// -// Revision 1.3 2004/01/02 20:53:43 miguelfreitas -// better MANGLE from ffmpeg -// -// Revision 1.2 2004/01/02 20:47:03 miguelfreitas -// my small contribution to the cygwin port ;-) -// -// Revision 1.1 2003/06/22 17:30:03 miguelfreitas -// use our own port of greedy2frame (tvtime port is currently broken) -// -// Revision 1.8 2001/11/23 17:18:54 adcockj -// Fixed silly and/or confusion -// -// Revision 1.7 2001/11/22 22:27:00 adcockj -// Bug Fixes -// -// Revision 1.6 2001/11/21 15:21:40 adcockj -// Renamed DEINTERLACE_INFO to TDeinterlaceInfo in line with standards -// Changed TDeinterlaceInfo structure to have history of pictures. -// -// Revision 1.5 2001/07/31 06:48:33 adcockj -// Fixed index bug spotted by Peter Gubanov -// -// Revision 1.4 2001/07/13 16:13:33 adcockj -// Added CVS tags and removed tabs -// -///////////////////////////////////////////////////////////////////////////// - -// This is the implementation of the Greedy 2-frame deinterlace algorithm described in -// DI_Greedy2Frame.c. It's in a separate file so we can compile variants for different -// CPU types; most of the code is the same in the different variants. - - -/////////////////////////////////////////////////////////////////////////////// -// Field 1 | Field 2 | Field 3 | Field 4 | -// T0 | | T1 | | -// | M0 | | M1 | -// B0 | | B1 | | -// - - -// debugging feature -// output the value of mm4 at this point which is pink where we will weave -// and green were we are going to bob -// uncomment next line to see this -//#define CHECK_BOBWEAVE +/***************************************************************************** +** $Id: greedy2frame_template.c,v 1.5 2004/01/05 12:15:55 siggi Exp $ +****************************************************************************** +** Copyright (c) 2000 John Adcock, Tom Barry, Steve Grimm All rights reserved. +** port copyright (c) 2003 Miguel Freitas +****************************************************************************** +** +** This file is subject to the terms of the GNU General Public License as +** published by the Free Software Foundation. A copy of this license is +** included with this software distribution in the file COPYING. If you +** do not have a copy, you may obtain a copy by writing to the Free +** Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +** +** This software 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 +****************************************************************************** +** CVS Log +** +** $Log: greedy2frame_template.c,v $ +** Revision 1.5 2004/01/05 12:15:55 siggi +** wonder why Mike isn't complaining about C++ style comments, any more... +** +** Revision 1.4 2004/01/05 01:47:26 tmmm +** DOS/Win CRs are forbidden, verboten, interdit +** +** Revision 1.3 2004/01/02 20:53:43 miguelfreitas +** better MANGLE from ffmpeg +** +** Revision 1.2 2004/01/02 20:47:03 miguelfreitas +** my small contribution to the cygwin port ;-) +** +** Revision 1.1 2003/06/22 17:30:03 miguelfreitas +** use our own port of greedy2frame (tvtime port is currently broken) +** +** Revision 1.8 2001/11/23 17:18:54 adcockj +** Fixed silly and/or confusion +** +** Revision 1.7 2001/11/22 22:27:00 adcockj +** Bug Fixes +** +** Revision 1.6 2001/11/21 15:21:40 adcockj +** Renamed DEINTERLACE_INFO to TDeinterlaceInfo in line with standards +** Changed TDeinterlaceInfo structure to have history of pictures. +** +** Revision 1.5 2001/07/31 06:48:33 adcockj +** Fixed index bug spotted by Peter Gubanov +** +** Revision 1.4 2001/07/13 16:13:33 adcockj +** Added CVS tags and removed tabs +** +*****************************************************************************/ + +/* + * This is the implementation of the Greedy 2-frame deinterlace algorithm + * described in DI_Greedy2Frame.c. It's in a separate file so we can compile + * variants for different CPU types; most of the code is the same in the + * different variants. + */ + + +/**************************************************************************** +** Field 1 | Field 2 | Field 3 | Field 4 | +** T0 | | T1 | | +** | M0 | | M1 | +** B0 | | B1 | | +*/ + + +/* debugging feature */ +/* output the value of mm4 at this point which is pink where we will weave */ +/* and green were we are going to bob */ +/* uncomment next line to see this */ +/* #define CHECK_BOBWEAVE */ #if !defined(MASKS_DEFINED) #define MASKS_DEFINED @@ -144,9 +150,10 @@ static void DeinterlaceGreedy2Frame_MMX(uint8_t *output, int outstride, for (Line = 0; Line < (height / 2) - 1; ++Line) { - // Always use the most recent data verbatim. By definition it's correct (it'd - // be shown on an interlaced display) and our job is to fill in the spaces - // between the new lines. + /* Always use the most recent data verbatim. By definition it's correct + * (it'd be shown on an interlaced display) and our job is to fill in + * the spaces between the new lines. + */ xine_fast_memcpy(Dest, T1, stride); Dest += outstride; Dest2 = Dest; @@ -154,9 +161,9 @@ static void DeinterlaceGreedy2Frame_MMX(uint8_t *output, int outstride, count = LineLength >> 3; do { asm volatile( - // Figure out what to do with the scanline above the one we just copied. - // See above for a description of the algorithm. - + /* Figure out what to do with the scanline above the one we just copied. + * See above for a description of the algorithm. + */ ".align 8 \n\t" "movq "MANGLE(Mask)", %%mm6 \n\t" @@ -170,30 +177,31 @@ static void DeinterlaceGreedy2Frame_MMX(uint8_t *output, int outstride, asm volatile( - // Figure out what to do with the scanline above the one we just copied. - // See above for a description of the algorithm. - - // Average T1 and B1 so we can do interpolated bobbing if we bob onto T1. - "movq %%mm3, %%mm7 \n\t" // mm7 = B1 + /* Figure out what to do with the scanline above the one we just copied. + * See above for a description of the algorithm. + * Average T1 and B1 so we can do interpolated bobbing if we bob onto T1 + */ + "movq %%mm3, %%mm7 \n\t" /* mm7 = B1 */ #if defined(IS_SSE) "pavgb %%mm1, %%mm7 \n\t" #elif defined(IS_3DNOW) - "pavgusb %%mm1, %%mm7 \n\t" + "pavgusb %%mm1, %%mm7 \n\t" #else - "movq %%mm1, %%mm5 \n\t" // mm5 = T1 - "psrlw $1, %%mm7 \n\t" // mm7 = B1 / 2 - "pand %%mm6, %%mm7 \n\t" // mask off lower bits - "psrlw $1, %%mm5 \n\t" // mm5 = T1 / 2 - "pand %%mm6, %%mm5 \n\t" // mask off lower bits - "paddw %%mm5, %%mm7 \n\t" // mm7 = (T1 + B1) / 2 + "movq %%mm1, %%mm5 \n\t" /* mm5 = T1 */ + "psrlw $1, %%mm7 \n\t" /* mm7 = B1 / 2 */ + "pand %%mm6, %%mm7 \n\t" /* mask off lower bits */ + "psrlw $1, %%mm5 \n\t" /* mm5 = T1 / 2 */ + "pand %%mm6, %%mm5 \n\t" /* mask off lower bits */ + "paddw %%mm5, %%mm7 \n\t" /* mm7 = (T1 + B1) / 2 */ #endif - // calculate |M1-M0| put result in mm4 need to keep mm0 intact - // if we have a good processor then make mm0 the average of M1 and M0 - // which should make weave look better when there is small amounts of - // movement + /* calculate |M1-M0| put result in mm4 need to keep mm0 intact + * if we have a good processor then make mm0 the average of M1 and M0 + * which should make weave look better when there is small amounts of + * movement + */ #if defined(IS_SSE) "movq %%mm0, %%mm4 \n\t" "movq %%mm2, %%mm5 \n\t" @@ -221,15 +229,15 @@ static void DeinterlaceGreedy2Frame_MMX(uint8_t *output, int outstride, "pand %%mm6, %%mm4 \n\t" #endif - // if |M1-M0| > Threshold we want dword worth of twos + /* if |M1-M0| > Threshold we want dword worth of twos */ "pcmpgtb "MANGLE(qwGreedyTwoFrameThreshold)", %%mm4 \n\t" - "pand "MANGLE(Mask)", %%mm4 \n\t" // get rid of any sign bit - "pcmpgtd "MANGLE(DwordOne)", %%mm4 \n\t" // do we want to bob - "pandn "MANGLE(DwordTwo)", %%mm4 \n\t" + "pand "MANGLE(Mask)", %%mm4 \n\t" /* get rid of sign bit */ + "pcmpgtd "MANGLE(DwordOne)", %%mm4 \n\t" /* do we want to bob */ + "pandn "MANGLE(DwordTwo)", %%mm4 \n\t" - "movq %1, %%mm2 \n\t" // mm2 = T0 + "movq %1, %%mm2 \n\t" /* mm2 = T0 */ - // calculate |T1-T0| put result in mm5 + /* calculate |T1-T0| put result in mm5 */ "movq %%mm2, %%mm5 \n\t" "psubusb %%mm1, %%mm5 \n\t" "psubusb %%mm2, %%mm1 \n\t" @@ -237,17 +245,17 @@ static void DeinterlaceGreedy2Frame_MMX(uint8_t *output, int outstride, "psrlw $1, %%mm5 \n\t" "pand %%mm6, %%mm5 \n\t" - // if |T1-T0| > Threshold we want dword worth of ones - "pcmpgtb "MANGLE(qwGreedyTwoFrameThreshold)", %%mm5 \n\t" - "pand %%mm6, %%mm5 \n\t" // get rid of any sign bit + /* if |T1-T0| > Threshold we want dword worth of ones */ + "pcmpgtb "MANGLE(qwGreedyTwoFrameThreshold)", %%mm5 \n\t" + "pand %%mm6, %%mm5 \n\t" /* get rid of sign bit */ - "pcmpgtd "MANGLE(DwordOne)", %%mm5 \n\t" + "pcmpgtd "MANGLE(DwordOne)", %%mm5 \n\t" "pandn "MANGLE(DwordOne)", %%mm5 \n\t" "paddd %%mm5, %%mm4 \n\t" - "movq %2, %%mm2 \n\t" // B0 + "movq %2, %%mm2 \n\t" /* B0 */ - // calculate |B1-B0| put result in mm5 + /* calculate |B1-B0| put result in mm5 */ "movq %%mm2, %%mm5 \n\t" "psubusb %%mm3, %%mm5 \n\t" "psubusb %%mm2, %%mm3 \n\t" @@ -255,18 +263,18 @@ static void DeinterlaceGreedy2Frame_MMX(uint8_t *output, int outstride, "psrlw $1, %%mm5 \n\t" "pand %%mm6, %%mm5 \n\t" - // if |B1-B0| > Threshold we want dword worth of ones - "pcmpgtb "MANGLE(qwGreedyTwoFrameThreshold)", %%mm5 \n\t" - "pand %%mm6, %%mm5 \n\t" // get rid of any sign bit + /* if |B1-B0| > Threshold we want dword worth of ones */ + "pcmpgtb "MANGLE(qwGreedyTwoFrameThreshold)", %%mm5 \n\t" + "pand %%mm6, %%mm5 \n\t" /* get rid of any sign bit */ "pcmpgtd "MANGLE(DwordOne)", %%mm5 \n\t" "pandn "MANGLE(DwordOne)", %%mm5 \n\t" "paddd %%mm5, %%mm4 \n\t" "pcmpgtd "MANGLE(DwordTwo)", %%mm4 \n\t" -// debugging feature -// output the value of mm4 at this point which is pink where we will weave -// and green were we are going to bob +/* debugging feature + * output the value of mm4 at this point which is pink where we will weave + * and green were we are going to bob */ #ifdef CHECK_BOBWEAVE #ifdef IS_SSE "movntq %%mm4, %0 \n\t" @@ -276,7 +284,7 @@ static void DeinterlaceGreedy2Frame_MMX(uint8_t *output, int outstride, #else "movq %%mm4, %%mm5 \n\t" - // mm4 now is 1 where we want to weave and 0 where we want to bob + /* mm4 now is 1 where we want to weave and 0 where we want to bob */ "pand %%mm0, %%mm4 \n\t" "pandn %%mm7, %%mm5 \n\t" "por %%mm5, %%mm4 \n\t" @@ -290,7 +298,7 @@ static void DeinterlaceGreedy2Frame_MMX(uint8_t *output, int outstride, : "=m" (*Dest2) : "m" (*T0), "m" (*B0) ); - // Advance to the next set of pixels. + /* Advance to the next set of pixels. */ T1 += 8; M1 += 8; B1 += 8; @@ -326,8 +334,7 @@ static void DeinterlaceGreedy2Frame_MMX(uint8_t *output, int outstride, xine_fast_memcpy(Dest, T1, stride); } - // clear out the MMX registers ready for doing floating point - // again + /* clear out the MMX registers ready for doing floating point again */ asm("emms\n\t"); #endif } |