mmplugins/imagingplugins/codecs/JPEGCodec/JpegYuvDecoder.cpp
changeset 0 40261b775718
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmplugins/imagingplugins/codecs/JPEGCodec/JpegYuvDecoder.cpp	Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,111 @@
+// Copyright (c) 1997-2009 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:
+//
+
+#include "JpegYuvDecoder.h"
+
+/**
+Start decoding an image frame asynchronously. Pixels will be decoded in
+YUV format.
+
+@pre
+The destination bitmap that receives the decoded data must be created before 
+using this function. The bitmap must be large enough to hold the frame and the display
+mode must be set to EColor16M. Use CImageDecoder::FrameInfo() to determine the
+size of the frame.
+
+@post
+On completion, aRequestStatus contains an error code. If the frame was decoded successfully it
+will contain KErrNone. If frame was only partially decoded it will contain KErrUnderflow
+or another of the system-wide error codes.
+
+@param  aRequestStatus
+        The request status.
+@param  aDestination
+        A bitmap that will contain the decoded frame.
+@param  aFrameNumber
+        The frame in multi-frame image to decode (optional, in which case defaults to zero).
+*/
+EXPORT_C void CJpegYuvDecoder::ConvertYuv(TRequestStatus* aRequestStatus, CFbsBitmap& aDestination, TInt aFrameNumber)
+	{
+	ASSERT(aDestination.DisplayMode() == EColor16M);
+	
+	if(aDestination.Handle()!=0 && aDestination.ExtendedBitmapType()!=KNullUid)
+	    {
+	    TRequestStatus* status = aRequestStatus;
+	    User::RequestComplete(status,KErrNotSupported);
+	    }
+
+	TRAPD(error,CustomSyncL(EOptionYuvDecode));
+	if (error!=KErrNone)
+		{
+		TRequestStatus* status = aRequestStatus;
+		User::RequestComplete(status, error);
+		}
+
+	CImageDecoder::Convert(aRequestStatus, aDestination, aFrameNumber);
+	}
+
+/**
+Start decoding an image frame and mask asynchronously. Pixels will be decoded in
+YUV format.
+
+@pre
+The destination bitmap, aDestination must be created before the call and must be large enough
+for the frame and the display mode must be EColor16M. FrameInfo() can be used to obtain the
+size and display mode of the frame. The mask bitmap, aDestinationMask must also be created before
+the call and must be large enough for the mask. The display mode must be EGray2 or EGray256
+and must be EGray256 if the image contains alpha-blending information. This information can 
+be obtained from the iFlags property of TFrameInfo obtained from a FrameInfo() call.
+
+@param  aRequestStatus
+        The request status. On completion contains an error code.
+        KErrNone if frame was decoded successfully,
+        KErrUnderflow if the frame was partially decoded
+        otherwise another of the system-wide error codes.
+@param  aDestination
+        A bitmap that will contain the decoded frame.
+@param  aDestinationMask
+        A bitmap that will contain the decoded frame mask.
+@param  aFrameNumber
+        The frame in multi-frame image to decode (optional, in which case defaults to zero).
+
+@see    TFrameInfo
+*/
+EXPORT_C void CJpegYuvDecoder::ConvertYuv(TRequestStatus* aRequestStatus, CFbsBitmap& aDestination, CFbsBitmap& aDestinationMask, TInt aFrameNumber)
+	{
+	ASSERT(aDestination.DisplayMode() == EColor16M);
+	
+	if(aDestination.Handle()!=0 && aDestination.ExtendedBitmapType()!=KNullUid)
+	        {
+	        TRequestStatus* status = aRequestStatus;
+	        User::RequestComplete(status,KErrNotSupported);
+	        }
+	
+	if(aDestinationMask.Handle()!=0 && aDestinationMask.ExtendedBitmapType()!=KNullUid)
+	        {
+	        TRequestStatus* status = aRequestStatus;
+	        User::RequestComplete(status,KErrNotSupported);
+	        }
+
+	TRAPD(error, CustomSyncL(EOptionYuvDecode));
+	if (error!=KErrNone)
+		{
+		TRequestStatus* status = aRequestStatus;
+		User::RequestComplete(status, error);
+		}
+
+	CImageDecoder::Convert(aRequestStatus, aDestination, aDestinationMask, aFrameNumber);
+	}
+