diff -r 608f67c22514 -r 896e9dbc5f19 internetradio2.0/streamsourceinc/iricyflowreader.h --- a/internetradio2.0/streamsourceinc/iricyflowreader.h Tue Jul 06 14:07:20 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,342 +0,0 @@ -/* -* Copyright (c) 2006-2007 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: Reads data from opened ICY session -* -*/ - - -/* --------------------------------------------------------------------------- -* Version history: -* Template version: -* -* -* Version: 2, Tue Feb 28 18:00:00 2008 by Rohit/Kranthi -* Ref: -* Added NetworkController instance for Byte Counter Impl -* -* -* ============================================================================ -*/ - -#ifndef IR_IRICYFLOWREADER -#define IR_IRICYFLOWREADER - - -#include -#include - -class CIRMetaData; -class CIRNetworkBuffer; -class CIRStationConnection; -class MIRStationDataObserver; -class RSocket; -class TChannelInfo; -class CIRNetworkController; - -/** -* This class handles reading audio and metadata from a connected -* ICY session. It assumes that the socket is connected, the -* ICY session has been requested and initial ICY headers have been -* processed. -* -*/ -NONSHARABLE_CLASS( CIRIcyFlowReader ) : public CActive - { -public: // Constructors and destructors - - /** - * Standard Symbian two-phase construction - * - * @param aSocket Socket to be read. - * @param aOwner The owner of this CIRIcyFlowReader - * @param aDataObserver The observer wishing to receive audio/metadata. - * @param aChannelInfo Information describing the ICY session - * @return Instance of CIRIcyFlowReader - */ - static CIRIcyFlowReader* NewL( RSocket& aSocket, CIRStationConnection& aOwner, - MIRStationDataObserver& aDataObserver, - TChannelInfo& aChannelInfo ); - - /** - * Destructor - */ - ~CIRIcyFlowReader(); - -public: - - /** - * Starts the reading from the socket - */ - void Start(); - - /** - * Fills the buffer with the streamed data - * - * @param aInputBuffer Buffer into which audio data is to be copied - */ - void FillBuffer(TDes8& aInputBuffer); - -private: // Functions from base classes - - /** - * From CActive - */ - void RunL(); - - /** - * From CActive - */ - void DoCancel(); - -private: - /** - * Copies the buffer to the mediaengine sink queue - * - * @param aData Data to copy. - */ - void AddToSinkQueue( const TDesC8& aData ); - - /** - * Fills the media engine buffer with audio data upon request - * by the media engine - * - * @param aInputBuffer Buffer into which audio data is to be copied - */ - void FillMediaEngineBuffer(const TDes8& aInputBuffer); - - /** - * Fills the unfilled media engine buffers with the remaining audio data - */ - void FillRemainingBuffers(); - - /** - * C++ default constructor - */ - CIRIcyFlowReader( RSocket& aSocket, CIRStationConnection& aOwner, - MIRStationDataObserver& aDataObserver, TChannelInfo& aChannelInfo ); - - /** - * Second phase construction - */ - void ConstructL(); - -private: - - /** - * The parsing states - */ - enum TIRParsingState - { - EIRReadingAudioData, /**< Reading raw audio data. */ - EIRReadingMetaDataLength, /**< Reading the length of the meta data. */ - EIRReadingMetaData /**< Reading meta data. */ - }; - - /** - * Initiates a read from socket. - */ - void IssueRead(); - - /** - * Initializes the buffers that will be used for streaming - */ - void InitializeBuffersL(); - - /** - * Extracts the meta data from the stream - */ - void ExtractMetadataL(); - - /** - * Handles received data. - * - * Can contain any amount of audio and/or meta data mixed in with it. - * - * @param aData Data received. - */ - void HandleReceivedDataL( const TDesC8& aData ); - - /** - * Handles received audio data. - * - * Can only contain raw audio data. - * - * @param aData Data received. - */ - void HandleReceivedAudioData( const TDesC8& aData ); - - /** - * Handles received meta data. - * - * Can only contain meta data. - * - * @param aData Data received. - */ - void HandleReceivedMetaData( const TDesC8& aData ); - /** - * Recognizes if the string is UTF-8 encoded and decodes it, - * if required. - * - * @param aString The string to be decoded. - * @return The string in Unicode/ISO-8859-1 format. - */ - HBufC* DecodeMetadataStringLC( const TDesC8& aString ) const; - - /** - * Tests whether the string is UTF-8 encoded. - * - * @param aString The string to be examined - * @return ETrue, if the string is UTF-8 encoded, EFalse otherwise. - */ - TBool IsUtf8Encoded( const TDesC8& aString ) const; - -private: - - /** - * The pointer to buffer which holds the audio data. - * Owned. - */ - TUint8* iSongBuffer; - - /** - * Buffer that holds the data received over the network. - * Owned. - */ - HBufC8* iSocketBuffer; - - /** - * Buffer to contain unfinished song data. - * Owned. - */ - HBufC8* iTempSongBuffer; - - /** - * Buffer to contain unfinished meta data. - * Owned. - */ - HBufC8* iTempMetaBuffer; - - /** - * Current meta data information. - * Owned. - */ - CIRMetaData* iMetaData; - - /** - * The socket that read. - */ - RSocket& iSocket; - - /** - * The owner of this object in the whole-part relation. - */ - CIRStationConnection& iOwner; - - /** - * The observer wishing to receive audio/metadata - */ - MIRStationDataObserver& iDataObserver; - - /** - * Queue of buffer which is filled - */ - TSglQue iSourceQ; - - /** - * Queue of buffer which is empty - */ - TSglQue iSinkQ; - - /** - * Temporary holder for network buffer. - * Not owned. - */ - CIRNetworkBuffer* iTempBufferHolder; - - /** - * Pointer descriptor to the network data buffer. - */ - TPtr8 iSocketBufferPtr; - - /** - * Indicates the no. of bytes read from the socket - */ - TSockXfrLength iSocketBytesRead; - - /** - * Indicates that stream source ( network side ) buffering is happening. - */ - TBool iInitialBuffering; - - /** - * Indicates rebuffering is occurring - */ - TBool iReBuffering; - - /** - * Indicates no of chunks of buffers to be copied - */ - TInt iNoOfChunks; - - /** - * Indicates the number of chunks are remaining - */ - TInt iChunksRemaining; - - /** - * Length of the current meta data block in bytes. - */ - TInt iMetaDataLength; - - /** - * Pointer to buffer to be filled. - * Not owned. - */ - TUint8* iBufferFillPointer; - - /** - * Used to give buffer fill value to progress bar - */ - TInt iBufferCounter; - - /** - * Used to determine the metadata position - */ - TInt iAudioDataOffset; - - /** - * Indicates the data parsing state. - */ - TIRParsingState iParsingState; - - /** - * Holds the channel information - */ - TChannelInfo& iChannelInfo; - - /** - * Indicates if the channel info should be published or not - */ - TBool iPublishStationInfo; - - /** - * NetworkController singleton instance - */ - CIRNetworkController* iNetworkControllerHandle; - }; - -#endif // IR_IRICYFLOWREADER - - -