// Copyright (c) 2002-2010 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 <mediaclientvideodisplay.h>
#include "mediaclientvideodisplaybody.h"
/**
Constructs and initialises a new instance of the client video data to display image
on window or graphics surface.
The function leaves if the video display object cannot be created.
@param aDisplayId
A display ID.
@return A pointer to the new video display object.
*/
EXPORT_C CMediaClientVideoDisplay* CMediaClientVideoDisplay::NewL(TInt aDisplayId)
{
CMediaClientVideoDisplay* self = new (ELeave) CMediaClientVideoDisplay();
CleanupStack::PushL(self);
self->ConstructL(aDisplayId);
CleanupStack::Pop(self);
return self;
}
/**
Constructs and initialises a new instance of the client video data to display image
on window or graphics surface.
The function leaves if the video display object cannot be created.
@param aDisplayId
A display ID.
@param aSurfaceId
The surface that has been created.
@param aCropRect
The dimensions of the crop rectangle, relative to the video image.
@param aAspectRatio
The pixel aspect ratio to display video picture.
@return A pointer to the new video display object.
*/
EXPORT_C CMediaClientVideoDisplay* CMediaClientVideoDisplay::NewL(TInt aDisplayId, const TSurfaceId& aSurfaceId, const TRect& aCropRect, TVideoAspectRatio aAspectRatio)
{
CMediaClientVideoDisplay* self = new (ELeave) CMediaClientVideoDisplay();
CleanupStack::PushL(self);
self->ConstructL(aDisplayId, aSurfaceId, aCropRect, aAspectRatio);
CleanupStack::Pop(self);
return self;
}
CMediaClientVideoDisplay::CMediaClientVideoDisplay()
{
}
void CMediaClientVideoDisplay::ConstructL(TInt aDisplayId)
{
iBody = CMediaClientVideoDisplayBody::NewL(aDisplayId, ETrue);
}
void CMediaClientVideoDisplay::ConstructL(TInt aDisplayId, const TSurfaceId& aSurfaceId, const TRect& aCropRect, TVideoAspectRatio aAspectRatio)
{
iBody = CMediaClientVideoDisplayBody::NewL(aDisplayId, aSurfaceId, aCropRect, aAspectRatio, ETrue);
}
/**
Destructor.
Releases resources owned by the object prior to its destruction.
*/
EXPORT_C CMediaClientVideoDisplay::~CMediaClientVideoDisplay()
{
delete iBody;
}
/**
Adds a new window for displaying the video picture.
@param aWindow
The display window.
@param aClipRect
Window clipping rectangle, relative to the window. The clipping rectangle specifies
the part of the window used for video display. The rectangle must be contained
completely within the window.
@param aCropRegion
The dimensions of the crop region, relative to the video image.
@param aVideoExtent
Video extent on the screen, relative to the window. Video picture position within
the extent depends on the scaled picture and content alignment or offset. The video
extent can be partially or completely outside the window.
@param aScaleWidth
Scaling the width of the video frame.
@param aScaleHeight
Scaling the height of the video frame.
@param aRotation
The desired rotation to apply in 90 degree increments.
@param aAutoScaleType
Automatic scaling type.
@param aHorizPos
Video picture horizontal position, relative to the video window. The value can be either
a pixel offset (positive or negative) from the top left corner of the window to the top left
corner of the picture, or an alignment constant from enum THorizontalAlign.
@param aVertPos
Video picture vertical position, relative to the video window. The value can be either a pixel
offset (positive or negative) from the top left corner of the window to the top left corner of
the picture, or an alignment constant from enum TVerticalAlign.
@param aWindow2
The display window, aWindow2 is used when using CVideoPlayerUtility2. This is used to avoid
casting iWindow from RWindowBase* to RWindow*.
*/
EXPORT_C void CMediaClientVideoDisplay::AddDisplayWindowL(const RWindowBase* aWindow, const TRect& aClipRect, const TRect& aCropRegion, const TRect& aVideoExtent,
TReal32 aScaleWidth, TReal32 aScaleHeight, TVideoRotation aRotation,
TAutoScaleType aAutoScaleType, TInt aHorizPos, TInt aVertPos, RWindow* aWindow2)
{
iBody->AddDisplayWindowL(aWindow, aClipRect, aCropRegion, aVideoExtent, aScaleWidth, aScaleHeight, aRotation,aAutoScaleType, aHorizPos, aVertPos, aWindow2);
}
/**
Removes a window that is currently being used to display the video picture. The window must
have previously been added with AddDisplayWindowL().
Note removing the last window on a display will deregister the display
@param aWindow
The display window.
@return The window position that has been removed.
*/
EXPORT_C TInt CMediaClientVideoDisplay::RemoveDisplayWindow(const RWindowBase& aWindow)
{
return iBody->RemoveDisplayWindow(aWindow);
}
/**
Must be called when a Surface has been Created.
@param aSurfaceId
The surface that has been created.
@param aCropRect
The dimensions of the crop rectangle, relative to the video image.
@param aAspectRatio
The pixel aspect ratio to display video picture.
@param aCropRegion
The dimensions of the crop region, relative to the video image.
@return KErrNone is succesfully created, otherwise returns system wide error.
*/
EXPORT_C TInt CMediaClientVideoDisplay::SurfaceCreated(const TSurfaceId& aSurfaceId, const TRect& aCropRect, TVideoAspectRatio aAspectRatio, const TRect& aCropRegion)
{
return iBody->SurfaceCreated(aSurfaceId, aCropRect, aAspectRatio, aCropRegion);
}
/**
Must be called when the current surface is no longer being used.
*/
EXPORT_C void CMediaClientVideoDisplay::RemoveSurface()
{
iBody->RemoveSurface(ETrue);
}
/**
Must be called when the video surface parameters have been changed.
@param aSurfaceId
The surface to be created for composition.
@param aCropRect
The dimensions of the crop rectangle, relative to the video image.
@param aAspectRatio
The pixel aspect ratio to display video picture.
@return KErrNone is succesfully created, otherwise returns KErrInUse if surface is not created.
*/
EXPORT_C TInt CMediaClientVideoDisplay::SurfaceParametersChanged(const TSurfaceId& aSurfaceId, const TRect& aCropRect, TVideoAspectRatio aAspectRatio)
{
return iBody->SurfaceParametersChanged(aSurfaceId, aCropRect, aAspectRatio);
}
/**
Redraw all the windows with new crop region.
@param aCropRegion
The dimensions of the crop region, relative to the video image.
@return KErrNone is succesfully created, otherwise returns system wide error.
*/
EXPORT_C TInt CMediaClientVideoDisplay::RedrawWindows(const TRect& aCropRegion)
{
return iBody->RedrawWindows(aCropRegion);
}
/**
Set video automatic scaling. When automatic scaling is active, the
video picture is scaled automatically to match the video window,
based on the scaling type, and positioned according to the
parameters.
Not all video controller support automatic scaling.
This function quits or exits leaving any of the system wide error codes.
Common error codes are listed below.
@param aWindow
The display window
@param aAutoScaleType
Automatic scaling type
@param aHorizPos
Video picture horizontal position, relative to the video window.
@param aVertPos
Video picture vertical position, relative to the video window.
@param aCropRegion
The dimensions of the crop region, relative to the video image.
@leave Leaves with system wide error code.
*/
EXPORT_C void CMediaClientVideoDisplay::SetAutoScaleL(const RWindowBase& aWindow, TAutoScaleType aScaleType, TInt aHorizPos, TInt aVertPos, const TRect& aCropRegion)
{
iBody->SetAutoScaleL(aWindow, aScaleType, aHorizPos, aVertPos, aCropRegion);
}
/**
Rotates the video image within the window. This is the preferred method to use with CVideoPlayerUtility2.
The rotation will replace any rotation set with CVideoPlayerUtility::SetRotationL.
Likewise with setting the rotation with CVideoPlayerUtility::SetRotationL after a call to CVideoPlayerUtility2::SetRotationL has been
made, then the rotation specified will replace any rotation set with CVideoPlayerUtility2::SetRotationL.
@param aWindow
Window to set rotation for.
@param aRotation
The video rotation to use for aWindow.
@param aCropRegion
The dimensions of the crop region, relative to the video image.
*/
EXPORT_C void CMediaClientVideoDisplay::SetRotationL(const RWindowBase& aWindow, TVideoRotation aRotation, const TRect& aCropRegion)
{
iBody->SetRotationL(aWindow, aRotation, aCropRegion);
}
/**
Rotates the video image within the window. This is the preferred method to use with CVideoPlayerUtility2.
The rotation will replace any rotation set with CVideoPlayerUtility::SetRotationL.
Likewise with setting the rotation with CVideoPlayerUtility::SetRotationL after a call to CVideoPlayerUtility2::SetRotationL has been
made, then the rotation specified will replace any rotation set with CVideoPlayerUtility2::SetRotationL.
@param aRotation
The video rotation to use for aWindow.
@param aCropRegion
The dimensions of the crop region, relative to the video image.
*/
EXPORT_C void CMediaClientVideoDisplay::SetRotationL(TVideoRotation aRotation, const TRect& aCropRegion)
{
iBody->SetRotationL(aRotation, aCropRegion);
}
/**
Retrieves the video rotation set for a window. This is the preferred method to use with CVideoPlayerUtility2.
@param aWindow
Window to retrieve rotation for.
@return The video rotation.
*/
EXPORT_C TVideoRotation CMediaClientVideoDisplay::RotationL(const RWindowBase& aWindow)
{
return iBody->RotationL(aWindow);
}
/**
Scales the video image to a specified percentage of its original size within the window.
@param aWindow
Window to set scale factor for.
@param aWidthPercentage
The percentage (100 = original size) to be used to scale the width of the video image
@param aHeightPercentage
The percentage (100 = original size) to be used to scale the height of the video image.
If this is not equal to aWidthPercentage then the image may be distorted.
@param aCropRegion
The dimensions of the crop region, relative to the video image.
@see CVideoPlayerUtility2::SetScaleFactorL
*/
EXPORT_C void CMediaClientVideoDisplay::SetScaleFactorL(const RWindowBase& aWindow, TReal32 aWidthPercentage, TReal32 aHeightPercentage, const TRect& aCropRegion)
{
iBody->SetScaleFactorL(aWindow, aWidthPercentage, aHeightPercentage, aCropRegion);
}
/**
Scales the video image to a specified percentage of its original size within the window.
@param aWidthPercentage
The percentage (100 = original size) to be used to scale the width of the video image
@param aHeightPercentage
The percentage (100 = original size) to be used to scale the height of the video image.
If this is not equal to aWidthPercentage then the image may be distorted.
@param aCropRegion
The dimensions of the crop region, relative to the video image.
@see CVideoPlayerUtility2::SetScaleFactorL
*/
EXPORT_C void CMediaClientVideoDisplay::SetScaleFactorL(TReal32 aWidthPercentage, TReal32 aHeightPercentage, const TRect& aCropRegion)
{
iBody->SetScaleFactorL(aWidthPercentage, aHeightPercentage, aCropRegion);
}
/**
Retrieves the scale factor currently set for a window. This is the preferred method to use with CVideoPlayerUtility2.
@param aWindow
Window to retrieve scale factor for.
@param aWidthPercentage
On function return, contains the current scaling percentage applied to the width of the
video image (100 = original size).
@param aHeightPercentage
On function return, contains the current scaling percentage applied to the height
of the video image (100 = original size).
@see CVideoPlayerUtility2::GetScaleFactorL
*/
EXPORT_C void CMediaClientVideoDisplay::GetScaleFactorL(const RWindowBase& aWindow, TReal32& aWidthPercentage, TReal32& aHeightPercentage)
{
iBody->GetScaleFactorL(aWindow, aWidthPercentage, aHeightPercentage);
}
/**
Set video automatic scaling.
@param aHorizPos
Video picture horizontal position, relative to the video window.
@param aVertPos
Video picture vertical position, relative to the video window.
@param aCropRegion
The dimensions of the crop region, relative to the video image.
@see CVideoPlayerUtility2::SetAutoScaleL
*/
EXPORT_C void CMediaClientVideoDisplay::SetAutoScaleL(TAutoScaleType aScaleType, TInt aHorizPos, TInt aVertPos, const TRect& aCropRegion)
{
iBody->SetAutoScaleL(aScaleType, aHorizPos, aVertPos, aCropRegion);
}
/**
Sets the window clipping rectangle, relative to the window.
@param aWindow
Window to set clipping rectangle for.
@param aWindowClipRect
The window server session for this window.
@param aCropRegion
The dimensions of the crop region, relative to the video image.
@see CVideoPlayerUtility2::SetWindowClipRectL
*/
EXPORT_C void CMediaClientVideoDisplay::SetWindowClipRectL(const RWindowBase& aWindow, const TRect& aWindowClipRect, const TRect& aCropRegion)
{
iBody->SetWindowClipRectL(aWindow, aWindowClipRect, aCropRegion);
}
/**
Sets the video extent on the screen, relative to the window.
@param aWindow
Window to set video extent for.
@param aVideoExtent
The new video extent, relative to the video window.
@param aCropRegion
The dimensions of the crop region, relative to the video image.
@see CVideoPlayerUtility2::SetWindowClipRectL
*/
EXPORT_C void CMediaClientVideoDisplay::SetVideoExtentL(const RWindowBase& aWindow, const TRect& aVideoExtent, const TRect& aCropRegion)
{
iBody->SetVideoExtentL(aWindow, aVideoExtent, aCropRegion);
}
/**
Enables automatic switching of surface to/from external display when it is connected/disconnected from the device.
To use this function the client thread must have an Active Scheduler installed otherwise it will leave with KErrNotReady.
@param aEnable
ETrue to enable. EFalse to disable.
@leave KErrNotSupported Device does not support external displays
@leave KErrNotReady CActiveScheduler is not installed
*/
EXPORT_C void CMediaClientVideoDisplay::SetExternalDisplaySwitchingL(TBool aControl)
{
iBody->SetExternalDisplaySwitchingL(aControl);
}