1 /* |
|
2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: Utility class to rotate bitmaps* |
|
15 */ |
|
16 |
|
17 |
|
18 |
|
19 // INCLUDE FILES |
|
20 #include "camsnapshotrotator.h" |
|
21 #include "CamSyncRotatorAo.h" |
|
22 #include "CamBurstCaptureArray.h" |
|
23 #include "camlogging.h" |
|
24 #include "CamAppController.h" |
|
25 |
|
26 // CONSTANTS |
|
27 |
|
28 // MACROS |
|
29 |
|
30 // LOCAL CONSTANTS AND MACROS |
|
31 |
|
32 // MODULE DATA STRUCTURES |
|
33 |
|
34 // LOCAL FUNCTION PROTOTYPES |
|
35 |
|
36 // FORWARD DECLARATIONS |
|
37 |
|
38 // ============================= LOCAL FUNCTIONS =============================== |
|
39 |
|
40 // ============================ MEMBER FUNCTIONS =============================== |
|
41 |
|
42 // ----------------------------------------------------------------------------- |
|
43 // CCamSnapShotRotator::CCamSnapShotRotator |
|
44 // C++ constructor |
|
45 // ----------------------------------------------------------------------------- |
|
46 // |
|
47 CCamSnapShotRotator::CCamSnapShotRotator( CCamAppController& aController ) |
|
48 : iController(aController), iRotatedSnapshot(NULL), iRotatorAo(NULL) |
|
49 { |
|
50 } |
|
51 |
|
52 // ----------------------------------------------------------------------------- |
|
53 // CCamSnapShotRotator::ConstructL |
|
54 // Second phase constructor. |
|
55 // ----------------------------------------------------------------------------- |
|
56 // |
|
57 void CCamSnapShotRotator::ConstructL() |
|
58 { |
|
59 |
|
60 } |
|
61 |
|
62 // ----------------------------------------------------------------------------- |
|
63 // CCamSnapShotRotator::NewL |
|
64 // Two-phased constructor. |
|
65 // ----------------------------------------------------------------------------- |
|
66 // |
|
67 CCamSnapShotRotator* CCamSnapShotRotator::NewL( CCamAppController& aController ) |
|
68 { |
|
69 CCamSnapShotRotator* self = new( ELeave ) CCamSnapShotRotator( aController ); |
|
70 CleanupStack::PushL( self ); |
|
71 self->ConstructL(); |
|
72 CleanupStack::Pop( self ); |
|
73 return self; |
|
74 } |
|
75 |
|
76 |
|
77 // ----------------------------------------------------------------------------- |
|
78 // CCamSnapShotRotator::~CCamSnapShotRotator() |
|
79 // Destructor |
|
80 // ----------------------------------------------------------------------------- |
|
81 // |
|
82 CCamSnapShotRotator::~CCamSnapShotRotator() |
|
83 { |
|
84 PRINT( _L("Camera => ~CCamSnapShotRotator") ); |
|
85 if ( iRotatorAo && iRotatorAo->IsActive() ) |
|
86 { |
|
87 iRotatorAo->Cancel(); |
|
88 } |
|
89 delete iRotatorAo; |
|
90 delete iRotatedSnapshot; |
|
91 PRINT( _L("Camera <= ~CCamSnapShotRotator") ); |
|
92 } |
|
93 |
|
94 // --------------------------------------------------------------------------- |
|
95 // CCamSnapShotRotator::RotationCompleteL |
|
96 // Notification of bitmap rotation complete events |
|
97 // --------------------------------------------------------------------------- |
|
98 // |
|
99 void CCamSnapShotRotator::RotationCompleteL( TInt aErr ) |
|
100 { |
|
101 PRINT1( _L( "Camera => CCamSnapShotRotator::RotationCompleteL aErr:%d" ), aErr ); |
|
102 // Use this snapshot, even if rotation fails. |
|
103 if ( iRotatedSnapshot ) |
|
104 { |
|
105 PRINT( _L( "Camera => CCamSnapShotRotator::RotationCompleteL - ReplaceSnapshot" ) ); |
|
106 iController.BurstCaptureArray()->ReplaceSnapshot( iRotatedSnapshot, 0 ); |
|
107 PRINT( _L( "Camera => CCamSnapShotRotator::RotationCompleteL - delete iRotatedSnapshot" ) ); |
|
108 delete iRotatedSnapshot; |
|
109 iRotatedSnapshot = NULL; |
|
110 iController.SnapshotRotationComplete(); |
|
111 } |
|
112 |
|
113 PRINT( _L( "Camera <= CCamSnapShotRotator::RotationCompleteL" ) ); |
|
114 } |
|
115 |
|
116 // --------------------------------------------------------------------------- |
|
117 // CCamSnapShotRotator::Rotate |
|
118 // --------------------------------------------------------------------------- |
|
119 // |
|
120 void CCamSnapShotRotator::RotateL( CFbsBitmap* aBitmap ) |
|
121 { |
|
122 PRINT( _L( "Camera => CCamSnapShotRotator::Rotate" ) ); |
|
123 if ( !iRotatedSnapshot ) |
|
124 { |
|
125 iRotatedSnapshot = new (ELeave)CFbsBitmap(); |
|
126 } |
|
127 iRotatedSnapshot->Create( aBitmap->SizeInPixels(), aBitmap->DisplayMode() ); |
|
128 TRect tmpRect( TPoint( 0, 0 ), aBitmap->SizeInPixels() ); |
|
129 TInt tmpLen = tmpRect.Width() * tmpRect.Height() * 4; |
|
130 //copy the snapshot data |
|
131 iRotatedSnapshot->BeginDataAccess(); |
|
132 aBitmap->BeginDataAccess(); |
|
133 Mem::Copy( iRotatedSnapshot->DataAddress(), aBitmap->DataAddress(), tmpLen ); |
|
134 iRotatedSnapshot->EndDataAccess(); |
|
135 aBitmap->EndDataAccess(); |
|
136 if ( !iRotatorAo ) |
|
137 { |
|
138 iRotatorAo = CCamSyncRotatorAo::NewL( *this ); |
|
139 } |
|
140 iRotatorAo->RotateL( iRotatedSnapshot, CBitmapRotator::ERotation180DegreesClockwise ); |
|
141 |
|
142 PRINT( _L( "Camera <= CCamSnapShotRotator::Rotate" ) ); |
|
143 } |
|
144 |
|
145 // --------------------------------------------------------------------------- |
|
146 // CCamSnapShotRotator::IsActive |
|
147 // --------------------------------------------------------------------------- |
|
148 // |
|
149 TBool CCamSnapShotRotator::IsActive() |
|
150 { |
|
151 TBool ret(EFalse); |
|
152 if ( iRotatorAo ) |
|
153 { |
|
154 ret = iRotatorAo->IsActive(); |
|
155 } |
|
156 return ret; |
|
157 } |
|
158 |
|
159 // End of File |
|