--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/btaudiostreamer/inc/btaudiostreamsendersbc.h Mon Jan 18 20:28:57 2010 +0200
@@ -0,0 +1,187 @@
+/*
+* Copyright (c) 2006 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: This class implements the SBC codec specific data handling.
+*
+*/
+
+
+
+
+#ifndef __BTAUDIOSTREAMSENDERSBC_H__
+#define __BTAUDIOSTREAMSENDERSBC_H__
+
+#include "btaudiostreamsender.h"
+
+/**
+ * SBC codec specific implementation of CBTAudioStreamSender base class
+ *
+ * This class wraps the handling of SBC frames and it can place the
+ * media packet header in place.
+
+ * @lib btaudiostreamer.lib
+ * @since S60 v3.1
+ */
+NONSHARABLE_CLASS(CBTAudioStreamSenderSBC) : public CBTAudioStreamSender
+ {
+ public:
+ static CBTAudioStreamSenderSBC* NewL(MBTAudioStreamSenderObserver& aObserver, RRtpSession& aSession);
+ virtual ~CBTAudioStreamSenderSBC();
+
+ private:
+ CBTAudioStreamSenderSBC(MBTAudioStreamSenderObserver& aObserver, RRtpSession& aSession);
+
+ /**
+ * From CBTAudioStreamSender.
+ * This method places to received buffer into the send packet in SBC specific way.
+ *
+ * @since S60 v3.1
+ * @param aBuffer contains the SBC frames.
+ */
+ virtual TInt AddBufferToSendPacket(const TDesC8& aBuffer);
+
+ /**
+ * From CBTAudioStreamSender.
+ * This method places the SBC codec specific media packet header in its place.
+ *
+ * @since S60 v3.1
+ * @param void.
+ * @return a Symbian OS wide error code.
+ */
+ virtual TInt AddHeaderToSendPacket(TPtr8& aPayloadDesC);
+
+ /**
+ * From CBTAudioStreamSender.
+ * This method does the cleanup work after the packet has been sent.
+ *
+ * @since S60 v3.1
+ * @param void.
+ * @return a Symbian OS wide error code.
+ */
+ virtual TInt PacketSendingCompleted(TPtr8& aPayloadDesC);
+
+ /**
+ * From CBTAudioStreamSender.
+ * This method is used for calculating the required packet length.
+ * It takes the header's into account and tries to fit as many frames
+ * to the packet that can fit to the outgoing MTU.
+ *
+ * @since S60 v3.1
+ * @param aOutboundMTUSize The MTU size for outgoing L2CAP link.
+ * @param aFrameLength The length of one SBC frame.
+ */
+ virtual TInt CalculatePacketLength(TUint aOutboundMTUSize, TUint aFrameLength);
+
+ /**
+ * From CBTAudioStreamSender.
+ * This method prepares the class for sending packets.
+ *
+ * @since S60 v3.1
+ * @param void.
+ * @return a Symbian OS wide error code.
+ */
+ virtual TInt InitSender(RRtpSendPacket& aSendPacket, TPtr8& aPayloadDesC, const TUint aTargetBitrate);
+
+ /**
+ * From CBTAudioStreamSender.
+ * This method corrects the timestamp value when incoming buffers can't fit in one sendpacket.
+ *
+ * @since S60 v5.0
+ * @param void.
+ * @return void.
+ */
+ virtual void AdjustTimestamp(TInt64 &aTimestamp);
+
+ /**
+ *
+ * This method calculates the playing time of one frame in microseconds.
+ * Information is used also internally for correcting the timestamp values.
+ *
+ * @since S60 v5.0
+ * @param void.
+ * @return a duration of one frame.
+ */
+ virtual TUint CalculateFrameDuration(const TUint aFrameLength, const TUint aTargetBitrate);
+
+ /**
+ * This method returns the maximum number of frames in one outgoing packet.
+ *
+ * @since S60 Timebox 9.2
+ * @return number of frames in one send packet.
+ */
+ virtual TUint MaxFramesPerPacket();
+
+
+ private:
+
+ /**
+ * Stores the corrected timestamp value.
+ */
+ TInt64 iTimestampOfFirstFrameInSendPacket;
+
+ /**
+ * Stores the length of one SBC frame.
+ */
+ TInt iFrameLength;
+
+ /**
+ * Stores the length of one SBC frame. Used when the frame length changes.
+ */
+ TInt iNewFrameLength;
+
+ /**
+ * Stores the duration of one SBC frame in microseconds. Used for correcting the timestamps in long buffers.
+ */
+ TInt iDurationOfFrame;
+
+ /**
+ * Used for calculating how many frames can fit in one SendPacket.
+ */
+ TInt iSpaceNeededForBuffer;
+
+ /**
+ * Stores the number of frames we have moved from buffer to packet so far.
+ * This variable is needed when the whole buffer can't fit in the current packet.
+ */
+ TInt iNumOfFramesAlreadyMoved;
+
+ /**
+ * Stores the maximum number of frames that we can place in one packet.
+ */
+ TInt iMaxNumOfFrames;
+
+ /**
+ * This stores the number of frames in send packet.
+ * This information is needed for A2DP media packet header.
+ */
+ TInt iNumOfFramesInSendPacket;
+
+ /**
+ * This stores the end position of the SendPacket's payload.
+ */
+ const TUint8 *iPtrEndOfPayload;
+
+ /**
+ * This stores the number of frames that haven't been sent yet. It's needed if
+ * there's more incoming frames than can fit in single SendPacket.
+ */
+ TInt iNumOfFramesLeftInBuffer;
+
+ /**
+ * This tells if it is time to start using the passed in timestamp as reference.
+ */
+ TBool iTimestampChangeFlag;
+
+ };
+
+#endif // __BTAUDIOSTREAMSENDERSBC_H__