vtprotocolplugins/DisplaySink/src/CVtImageRotatorImplMirrorFlip.cpp
changeset 18 d9b6a8729acd
parent 4 6dc066157ed4
child 23 c378a0498b84
child 27 dcbddbbaf8fd
--- a/vtprotocolplugins/DisplaySink/src/CVtImageRotatorImplMirrorFlip.cpp	Tue Jan 26 12:01:21 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,589 +0,0 @@
-/*
-* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Image Transforms subsystem.
-*
-*/
-
-
-// INCLUDE FILES
-
-#include <e32svr.h>
-#include <fbs.h>
-
-#include "CVtImageRotatorImplMirrorFlip.h"
-#include "cvtimage.h"
-#include "CVtImageIYUV.h"
-
-// MACROS
-
-#ifdef _DEBUG
-#    define __IF_DEBUG(t) {RDebug::t;}
-#else
-#    define __IF_DEBUG(t)
-#endif
-
-// LOCAL CONSTANTS AND MACROS
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// ======================= CVtImageRotatorImplMirrorFlip =======================
-
-// -----------------------------------------------------------------------------
-// CVtImageRotatorImplMirrorFlip::CVtImageRotatorImplMirrorFlip(
-//  const CVtImageRotator::TRotationAngle& aAngle )
-// -----------------------------------------------------------------------------
-CVtImageRotatorImplMirrorFlip::CVtImageRotatorImplMirrorFlip(
-    const CVtImageRotator::TRotationAngle& aAngle ) : CVtImageRotatorImpl( aAngle )
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CVtImageRotatorImplMirrorFlip::Rotate( TBool& aContinue )
-// -----------------------------------------------------------------------------
-TInt CVtImageRotatorImplMirrorFlip::Rotate( TBool& aContinue )
-    {
-    __IF_DEBUG( Print( _L( "ImageRotator [%d]: CVtImageRotatorImplMirrorFlip::Rotate() >>" ), RThread().Id().operator TUint() ) );
-
-    TInt result( KErrNone );
-
-    aContinue = EFalse;
-
-    TBool isSameBitmap( iSource->DataAddress() == iTarget->DataAddress() );
-
-    if( iAngle == CVtImageRotator::EFlipVerticalAxis )
-        {
-        // Are source and target referencing same bitmap?
-        if( isSameBitmap  )
-            {
-            // YES: Flip inside bitmap
-            Flip( *iTarget );
-            }
-        else
-            {
-            // NO: Use flipping from source to target
-            Flip();
-            }
-        }
-    else if( iAngle == CVtImageRotator::EMirrorHorizontalAxis )
-        {
-        // Are source and target referencing same bitmap?
-        if( isSameBitmap )
-            {
-            // YES: Mirror inside bitmap
-            Mirror( *iTarget );
-            }
-        else
-            {
-            // NO: Mirror from source to target
-            Mirror();
-            }
-        }
-    else if( iAngle == CVtImageRotator::E180DegreesClockwise )
-        {
-        // Are source and target referencing same bitmap?
-        if( isSameBitmap )
-            {
-            // YES: Mirror inside bitmap
-            Mirror( *iTarget );
-            }
-        else
-            {
-            // NO: Mirror from source to target
-            Mirror();
-            }
-        Flip( *iTarget );
-        }
-
-    __IF_DEBUG( Print( _L( "ImageRotator [%d]: CVtImageRotatorImplMirrorFlip::Rotate() <<" ), RThread().Id().operator TUint() ) );
-
-    return result;
-    }
-
-// -----------------------------------------------------------------------------
-// CVtImageRotatorImplMirrorFlip::ValidateSourceTargetL(
-//  const CVtImage& aSource, CVtImage& aTarget )
-// -----------------------------------------------------------------------------
-void CVtImageRotatorImplMirrorFlip::ValidateSourceTargetL(
-    const CVtImage& aSource,
-    CVtImage& aTarget )
-    {
-
-
-    // Sizes must match
-    if( aSource.Size() != aTarget.Size() )
-        {
-        User::Leave( KErrNotSupported );
-        }
-
-    // Displaymodes must match
-    if( aSource.DisplayMode() != aTarget.DisplayMode() )
-        {
-        User::Leave( KErrNotSupported );
-        }
-
-    // Check that displaymode is one of the supported
-    switch( aSource.DisplayMode() )
-        {
-        case CVtImage::EVtColor4K:
-        case CVtImage::EVtColor64K:
-        case CVtImage::EVtColor16M:
-        case CVtImage::EVtColor16MU:
-        case CVtImage::EVtColor16MA:
-        case CVtImage::EVtColorIYUV:
-            break;
-
-        default:
-            User::Leave( KErrNotSupported );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CVtImageRotatorImplMirrorFlip::ValidateSourceTargetL(
-//  const CVtImage& aSource, CVtImage& aTarget )
-// -----------------------------------------------------------------------------
-TBool CVtImageRotatorImplMirrorFlip::SupportsRotationAngle(
-    const CVtImageRotator::TRotationAngle& aAngle )
-    {
-    TBool result( EFalse );
-
-    if( ( aAngle == CVtImageRotator::EMirrorHorizontalAxis ) ||
-        ( aAngle == CVtImageRotator::EFlipVerticalAxis ) ||
-        ( aAngle == CVtImageRotator::E180DegreesClockwise ) )
-        {
-        result = ETrue;
-        }
-
-    return result;
-    }
-
-// -----------------------------------------------------------------------------
-// CVtImageRotatorImplMirrorFlip::Mirror()
-// -----------------------------------------------------------------------------
-void CVtImageRotatorImplMirrorFlip::Mirror()
-    {
-    TInt bytesPerRow( iSource->BytesPerRow() );
-
-    TInt height( iSource->Size().iHeight );
-
-    TInt width( iSource->Size().iWidth );
-
-    switch( iSource->DisplayMode() )
-        {
-        // DisplayMode: 4K and 64K
-        case CVtImage::EVtColor4K:
-        case CVtImage::EVtColor64K:
-            {
-            const TUint8* s = reinterpret_cast< const TUint8* >( iSource->DataAddress() );
-
-            TUint8* d = reinterpret_cast< TUint8* >( iTarget->DataAddress() );
-
-            d += bytesPerRow;
-
-            if( width & 1 )
-                {
-                d -= 2;
-                }
-
-            for( TInt y = height - 1; y >= 0; y-- )
-                {
-                register const TUint16* tempS = reinterpret_cast< const TUint16* >( s );
-
-                register TUint16* tempD = reinterpret_cast< TUint16* >( d );
-
-                for( register TInt x = width - 1; x >= 0; x-- )
-                    {
-                    *--tempD = *tempS++;
-                    }
-
-                s += bytesPerRow;
-
-                d += bytesPerRow;
-                }
-            }
-            break;
-
-        // DisplayMode: 16M
-        case CVtImage::EVtColor16M:
-            {
-            const TUint8* s = reinterpret_cast< const TUint8* >( iSource->DataAddress() );
-
-            TUint8* d = reinterpret_cast< TUint8* >( iTarget->DataAddress() );
-
-            d += width * 3;
-
-            for( TInt y = height - 1; y >= 0; y-- )
-                {
-                const TUint8* tempS = s;
-
-                TUint8* tempD = d - 3;
-
-                for( TInt x = width - 1; x >= 0; x-- )
-                    {
-                    tempD[ 0 ] = *tempS++;
-                    tempD[ 1 ] = *tempS++;
-                    tempD[ 2 ] = *tempS++;
-                    tempD -= 3;
-                    }
-
-                s += bytesPerRow;
-
-                d += bytesPerRow;
-                }
-            }
-            break;
-
-        // DisplayMode: 16MU and 16MA
-        case CVtImage::EVtColor16MU:
-        case CVtImage::EVtColor16MA:
-            {
-            const TUint8* s = reinterpret_cast< const TUint8* >( iSource->DataAddress() );
-
-            TUint8* d = reinterpret_cast< TUint8* >( iTarget->DataAddress() );
-
-            d += bytesPerRow;
-
-            for( TInt y = height - 1; y >= 0; y-- )
-                {
-                register const TUint32* tempS = reinterpret_cast< const TUint32* >( s );
-                register TUint32* tempD = reinterpret_cast< TUint32* >( d );
-
-                for( TInt x = width - 1; x >= 0; x-- )
-                    {
-                    *--tempD = *tempS++;
-                    }
-
-                s += bytesPerRow;
-
-                d += bytesPerRow;
-                }
-            }
-            break;
-
-        // IYUV
-        case CVtImage::EVtColorIYUV:
-            MirrorIYUV( reinterpret_cast< const CVtImageIYUV& >( *iSource ), reinterpret_cast< CVtImageIYUV& >( *iTarget ) );
-            break;
-
-        default:
-            break;
-
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CVtImageRotatorImplMirrorFlip::Mirror( CVtImage& aTarget )
-// -----------------------------------------------------------------------------
-void CVtImageRotatorImplMirrorFlip::Mirror( CVtImage& aTarget )
-    {
-    TInt bytesPerRow( aTarget.BytesPerRow() );
-
-    TInt height( aTarget.Size().iHeight );
-
-    TInt width( aTarget.Size().iWidth );
-
-    switch( aTarget.DisplayMode() )
-        {
-        // DisplayMode: 4K and 64K
-        case CVtImage::EVtColor4K:
-        case CVtImage::EVtColor64K:
-            {
-            TUint8* d = reinterpret_cast< TUint8* >( aTarget.DataAddress() );
-
-            TUint8* s = reinterpret_cast< TUint8* >( d );
-
-            d += bytesPerRow;
-
-            if( width & 1 )
-                {
-                d -= 2;
-                }
-
-            for( TInt y = height - 1; y >= 0; y-- )
-                {
-                register TUint16* tempS = reinterpret_cast< TUint16* >( s );
-
-                register TUint16* tempD = reinterpret_cast< TUint16* >( d );
-
-                for( register TInt x = width/2 - 1; x >= 0; x-- )
-                    {
-                    TUint16 p = *tempS;
-                    *tempS++ = *--tempD;
-                    *tempD = p;
-                    }
-
-                s += bytesPerRow;
-
-                d += bytesPerRow;
-                }
-            }
-            break;
-
-        // DisplayMode: 16M
-        case CVtImage::EVtColor16M:
-            {
-            TUint8* d = reinterpret_cast< TUint8* >( aTarget.DataAddress() );
-
-            TUint8* s = reinterpret_cast< TUint8* >( d );
-
-            d += width * 3;
-
-            for( TInt y = height - 1; y >= 0; y-- )
-                {
-                TUint8* tempS = s;
-
-                TUint8* tempD = d - 3;
-
-                for( TInt x = width/2 - 1; x >= 0; x-- )
-                    {
-                    TUint8 s = *tempS;
-                    TUint8 t = *tempD;
-                    *tempD++ = s;
-                    *tempS++ = t;
-
-                    s = *tempS;
-                    t = *tempD;
-                    *tempD++ = s;
-                    *tempS++ = t;
-
-                    s = *tempS;
-                    t = *tempD;
-                    *tempD++ = s;
-                    *tempS++ = t;
-
-                    tempD -= 6;
-                    }
-
-                s += bytesPerRow;
-
-                d += bytesPerRow;
-                }
-            }
-            break;
-
-        // DisplayMode: 16MU and 16MA
-        case CVtImage::EVtColor16MU:
-        case CVtImage::EVtColor16MA:
-            {
-            TUint8* d = reinterpret_cast< TUint8* >( aTarget.DataAddress() );
-
-            TUint8* s = reinterpret_cast< TUint8* >( d );
-
-            d += bytesPerRow;
-
-            for( TInt y = height - 1; y >= 0; y-- )
-                {
-                register TUint32* tempS = reinterpret_cast< TUint32* >( s );
-                register TUint32* tempD = reinterpret_cast< TUint32* >( d );
-
-                for( TInt x = width/2 - 1; x >= 0; x-- )
-                    {
-                    TUint32 p = *tempS;
-                    *tempS++ = *--tempD;
-                    *tempD = p;
-                    }
-
-                s += bytesPerRow;
-
-                d += bytesPerRow;
-                }
-            }
-            break;
-
-        // IYUV
-        case CVtImage::EVtColorIYUV:
-            MirrorIYUV( reinterpret_cast< const CVtImageIYUV& >( aTarget ), reinterpret_cast< CVtImageIYUV& >( aTarget ) );
-            break;
-
-        default:
-            break;
-
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CVtImageRotatorImplMirrorFlip::MirrorIYUV( const CVtImageIYUV& aSource,
-//  CVtImageIYUV& aTarget )
-// -----------------------------------------------------------------------------
-void CVtImageRotatorImplMirrorFlip::MirrorIYUV( const CVtImageIYUV& aSource,
-    CVtImageIYUV& aTarget )
-    {
-    MirrorPlane( aSource.Y(), aTarget.Y(), aSource.Size().iWidth,
-        aSource.Size().iHeight, aSource.BytesPerRow() );
-    MirrorPlane( aSource.U(), aTarget.U(), aSource.UVPlaneWidth(),
-        aSource.UVPlaneHeight(), aSource.UVPlaneWidth() );
-    MirrorPlane( aSource.V(), aTarget.V(), aSource.UVPlaneWidth(),
-        aSource.UVPlaneHeight(), aSource.UVPlaneWidth() );
-    }
-
-// -----------------------------------------------------------------------------
-// CVtImageRotatorImplMirrorFlip::MirrorPlane( TUint8* aSource, TUint8* aTarget,
-//  TInt aWidth, TInt aHeight, TInt aBytesPerRow )
-// -----------------------------------------------------------------------------
-void CVtImageRotatorImplMirrorFlip::MirrorPlane( TUint8* aSource,
-    TUint8* aTarget, TInt aWidth, TInt aHeight, TInt aBytesPerRow )
-    {
-    if( aSource != aTarget )
-        {
-        aTarget += aBytesPerRow;
-        for( TInt y = aHeight - 1; y >= 0; y-- )
-            {
-            register const TUint8* tempS = aSource;
-            register TUint8* tempD = aTarget;
-            for( TInt x = aWidth - 1; x >= 0; x-- )
-                {
-                *--tempD = *tempS++;
-                }
-            aSource += aBytesPerRow;
-            aTarget += aBytesPerRow;
-            }
-        }
-    else
-        {
-        aTarget += aBytesPerRow;
-        for( TInt y = aHeight - 1; y >= 0; y-- )
-            {
-            register TUint8* tempS = aSource;
-            register TUint8* tempD = aTarget;
-            for( TInt x = aWidth/2 - 1; x >= 0; x-- )
-                {
-                TUint8 p = *tempS;
-                *tempS++ = *--tempD;
-                *tempD = p;
-                }
-            aSource += aBytesPerRow;
-            aTarget += aBytesPerRow;
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CVtImageRotatorImplMirrorFlip::Flip()
-// -----------------------------------------------------------------------------
-void CVtImageRotatorImplMirrorFlip::Flip()
-    {
-    if( iSource->DisplayMode() == CVtImage::EVtColorIYUV )
-        {
-        FlipIYUV
-            (
-            reinterpret_cast< const CVtImageIYUV& >( *iSource ),
-            reinterpret_cast< CVtImageIYUV& >( *iTarget )
-            );
-        }
-    else
-        {
-        TInt bytesPerRow( iSource->BytesPerRow() );
-
-        TInt height( iSource->Size().iHeight );
-
-        const TUint8* s = reinterpret_cast< const TUint8* >( iSource->DataAddress() );
-
-        TUint8* d = reinterpret_cast< TUint8* >( iTarget->DataAddress() );
-
-        d += ( height - 1 ) * bytesPerRow;
-
-        for( TInt y = height - 1; y >= 0; y-- )
-            {
-            Mem::Copy( d, s, bytesPerRow );
-            s += bytesPerRow;
-            d -= bytesPerRow;
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CVtImageRotatorImplMirrorFlip::FlipIYUV()
-// -----------------------------------------------------------------------------
-void CVtImageRotatorImplMirrorFlip::FlipIYUV
-    (
-    const CVtImageIYUV& aSource,
-    CVtImageIYUV& aTarget
-    )
-    {
-    FlipPlane( aSource.Y(), aTarget.Y(), aSource.Size().iHeight, aSource.BytesPerRow() );
-    FlipPlane( aSource.U(), aTarget.U(), aSource.UVPlaneHeight(), aSource.UVPlaneWidth() );
-    FlipPlane( aSource.V(), aTarget.V(), aSource.UVPlaneHeight(), aSource.UVPlaneWidth() );
-    }
-
-// -----------------------------------------------------------------------------
-// CVtImageRotatorImplMirrorFlip::FlipPlane()
-// -----------------------------------------------------------------------------
-void CVtImageRotatorImplMirrorFlip::FlipPlane
-    (
-    TUint8* aSource,
-    TUint8* aTarget,
-    TInt aHeight,
-    TInt aBytesPerRow
-    )
-    {
-    TBool doSwap = ( aSource == aTarget );
-
-    aTarget += ( aHeight - 1 ) * aBytesPerRow;
-
-    if( doSwap )
-        {
-        for( TInt y = aHeight / 2 - 1; y >= 0; y-- )
-            {
-            Mem::Swap( aTarget, aSource, aBytesPerRow );
-            aSource += aBytesPerRow;
-            aTarget -= aBytesPerRow;
-            }
-        }
-    else
-        {
-        for( TInt y = aHeight - 1; y >= 0; y-- )
-            {
-            Mem::Copy( aTarget, aSource, aBytesPerRow );
-            aSource += aBytesPerRow;
-            aTarget -= aBytesPerRow;
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CVtImageRotatorImplMirrorFlip::Flip( CVtImage& aTarget )
-// -----------------------------------------------------------------------------
-void CVtImageRotatorImplMirrorFlip::Flip( CVtImage& aTarget )
-    {
-    if( iSource->DisplayMode() == CVtImage::EVtColorIYUV )
-        {
-        FlipIYUV
-            (
-            reinterpret_cast< const CVtImageIYUV& >( aTarget ),
-            reinterpret_cast< CVtImageIYUV& >( aTarget )
-            );
-        }
-    else
-        {
-        TInt bytesPerRow( aTarget.BytesPerRow() );
-
-        TInt height( aTarget.Size().iHeight );
-
-        TUint8* s = reinterpret_cast< TUint8* >( aTarget.DataAddress() );
-
-        TUint8* d = s;
-
-        d += ( height - 1 ) * bytesPerRow;
-
-        for( TInt y = height / 2 - 1; y >= 0; y-- )
-            {
-            Mem::Swap( d, s, bytesPerRow );
-            s += bytesPerRow;
-            d -= bytesPerRow;
-            }
-        }
-    }
-
-// End of File
-
-