List Info

Thread: CR: Symbian Fix to avoid replay of audio during pause/resume.




CR: Symbian Fix to avoid replay of audio during pause/resume.
user name
2007-10-18 12:43:07


    "Nokia submits this code under the terms of a commercial contribution agreement with RealNetworks, and I am authorized to contribute this code under said agreement."

      Modified by:  rajesh.rathinasamynokia.com

      Reviewed by:

      Date: 16-Oct-2007

      Project: SymbianMmf_rel

          ErrorId: EOVL-6XRV6P

                 ;
      Synopsis:  CR: Symbian Fix to avoid replay of audio during pause/resume.

      DevSound does not have support for pause, so we issue Stop during pause. To avoid loss of data we have introduced resupplying of unplayed data. Resupplying of unplayed data is based on the samples played count from devsound. Samples played count was not updated after stop which resulted in replaying a small amount of audio data.

      Added code to update the samples statistics after stop is issued. Also moved the unplayed sample retrieval to InitplayPending instead of InitPausedState. Some version of DevSound could still send SamplesPlayed count zero after stop. The CR handles that case too.

      NOTE: The replay of audio data is dependent on the accuracy of samples played from devsound.

       
      Root Cause of the problem: Implementation.
       
      Files Modified:
      Audio/device/platform/symbian/common/CHXBaseAudioSession.cpp

      Image Size and Heap Use impact: no impact

      Module Release testing (STIF) :  Passed.

      Test case(s) Added ; :  No. Requires user observation to detect the problem.

      Memory leak check performed : Yes.  No new leaks introduced.

      Platforms and Profiles Build Verified: helix-client-s60-32-mmf-mdf-arm

      Platforms and Profiles Functionality verified: armv5,winscw

          Branch: Head & 210CayS

    Index: platform/symbian/common/CHXBaseAudioSession.cpp
    ===================================================================
    RCS file: /cvsroot/audio/device/platform/symbian/common/CHXBaseAudioSession.cpp,
    v
    retrieving revision 1.1.2.2
    diff -w -u -b -r1.1.2.2 CHXBaseAudioSession.cpp
    --- platform/symbian/common/CHXBaseAudioSession.cpp     2 May 2007 16:06:46 -000
    0       1.1.2.2
    +++ platform/symbian/common/CHXBaseAudioSession.cpp     18 Oct 2007 17:41:33 -00
    00
    -425,6 +425,10
               ;  // The device resets on pause.
               ;  // Unplayed samples played count are claimed to be played.
               ;  m_pStream->Stop();
    +#ifdef HELIX_CONFIG_SYMBIAN_SAMPLESPLAYED
    +         ;   // updates latest samples stat
    +         ;   UpdateTimeSampleStats();
    +#endif
             }
             else
             {
    -727,6 +731,10
     void CHXBaseAudioSession::InitPlayInitPendingState()
     {
         m_lastPlayError = KErrNone;
    +#ifdef HELIX_CONFIG_SYMBIAN_SAMPLESPLAYED
    +        RetrieveUnplayedSamplesFromPastQueue();
    +        m_resetTriggerUnplayedCount = m_unplayedSampleCount;
    +#endif
     }


    -736,10 +744,6
         if (m_deviceResetsOnPause)
         {
             PrepareForDeviceReset();
    -#ifdef HELIX_CONFIG_SYMBIAN_SAMPLESPLAYED
    -        RetrieveUnplayedSamplesFromPastQueue();
    -        m_resetTriggerUnplayedCount = m_unplayedSampleCount;
    -#endif
         }

     }
    -1267,12 +1271,15

     void CHXBaseAudioSession::UpdateTimeSampleStats()
     {
    -    if (PLAYING != m_state)
    +    if((PLAYING != m_state) && (PAUSED != m_state))
         {
             // in case samples written increased since last check
             UpdateUnplayedSampleCount();

             // sample count is only reliable in PLAYING state; don't do anything el
    se at this time
    +        // However some DevSound versions might be able to report samples playe
    d during PAUSED state.
    +        // Hence relying on samplecount reset pending for PAUSED state handling
    .
    +
             HXLOGL4(HXLOG_ADEV, "CHXBaseAudioSession::UpdateUnplayedSampleCount():
    state = %s (no update)", StringifyState(m_state));
             return;
         }

CR: Symbian Fix to avoid replay of audio during pause/resume.
country flaguser name
United States
2007-10-18 15:35:51
Looks good.
--greg.


rajesh.rathinasamynokia.com wrote:
> 
>> "Nokia submits this code under the terms of a
commercial contribution
>> agreement with RealNetworks, and I am authorized to
contribute this
>> code under said agreement."
>>
>> 	Modified by:  rajesh.rathinasamynokia.com
>>
>> 	Reviewed by: 
>>
>> 	Date: 16-Oct-2007
>>
>> 	Project: SymbianMmf_rel
>>
>>       ErrorId: EOVL-6XRV6P
>> 	            
>> 	Synopsis:  CR: Symbian Fix to avoid replay of
audio during
>> pause/resume.
>>
>> 	DevSound does not have support for pause, so we
issue Stop
>> during pause. To avoid loss of data we have
introduced resupplying of
>> unplayed data. Resupplying of unplayed data is
based on the samples
>> played count from devsound. Samples played count
was not updated after
>> stop which resulted in replaying a small amount of
audio data.
>>
>> 	Added code to update the samples statistics after
stop is
>> issued. Also moved the unplayed sample retrieval to
InitplayPending
>> instead of InitPausedState. Some version of
DevSound could still send
>> SamplesPlayed count zero after stop. The CR handles
that case too.
>>
>> 	NOTE: The replay of audio data is dependent on the
accuracy of
>> samples played from devsound.
>>
>> 	  
>> 	Root Cause of the problem: Implementation. 
>> 	 
>> 	Files Modified:
>>
	Audio/device/platform/symbian/common/CHXBaseAudioSession.cp
p
>>
>> 	Image Size and Heap Use impact: no impact
>>
>> 	Module Release testing (STIF) :  Passed.
>>
>> 	Test case(s) Added  :  No. Requires user
observation to detect
>> the problem.
>>
>> 	Memory leak check performed : Yes.  No new leaks
introduced. 
>>
>> 	Platforms and Profiles Build Verified:
>> helix-client-s60-32-mmf-mdf-arm
>>
>> 	Platforms and Profiles Functionality verified:
armv5,winscw
>>
>>       Branch: Head & 210CayS
>>
> 	Index:
platform/symbian/common/CHXBaseAudioSession.cpp
> 	
>
============================================================
=======
> 	RCS file:
>
/cvsroot/audio/device/platform/symbian/common/CHXBaseAudioSe
ssion.cpp,
> 	v
> 	retrieving revision 1.1.2.2
> 	diff -w -u -b -r1.1.2.2 CHXBaseAudioSession.cpp
> 	--- platform/symbian/common/CHXBaseAudioSession.cpp   
 2 May
> 2007 16:06:46 -000
> 	0       1.1.2.2
> 	+++ platform/symbian/common/CHXBaseAudioSession.cpp   
 18 Oct
> 2007 17:41:33 -00
> 	00
> 	 -425,6 +425,10 
> 	             // The device resets on pause.
> 	             // Unplayed samples played count are
claimed to be
> played.
> 	             m_pStream->Stop();
> 	+#ifdef HELIX_CONFIG_SYMBIAN_SAMPLESPLAYED
> 	+            // updates latest samples stat
> 	+            UpdateTimeSampleStats();
> 	+#endif
> 	         }
> 	         else
> 	         {
> 	 -727,6 +731,10 
> 	 void CHXBaseAudioSession::InitPlayInitPendingState()
> 	 {
> 	     m_lastPlayError = KErrNone;
> 	+#ifdef HELIX_CONFIG_SYMBIAN_SAMPLESPLAYED
> 	+        RetrieveUnplayedSamplesFromPastQueue();
> 	+        m_resetTriggerUnplayedCount =
m_unplayedSampleCount;
> 	+#endif
> 	 }
> 
> 
> 	 -736,10 +744,6 
> 	     if (m_deviceResetsOnPause)
> 	     {
> 	         PrepareForDeviceReset();
> 	-#ifdef HELIX_CONFIG_SYMBIAN_SAMPLESPLAYED
> 	-        RetrieveUnplayedSamplesFromPastQueue();
> 	-        m_resetTriggerUnplayedCount =
m_unplayedSampleCount;
> 	-#endif
> 	     }
> 
> 	 }
> 	 -1267,12 +1271,15 
> 
> 	 void CHXBaseAudioSession::UpdateTimeSampleStats()
> 	 {
> 	-    if (PLAYING != m_state)
> 	+    if((PLAYING != m_state) && (PAUSED !=
m_state))
> 	     {
> 	         // in case samples written increased since
last check
> 	         UpdateUnplayedSampleCount();
> 
> 	         // sample count is only reliable in PLAYING
state;
> don't do anything el
> 	se at this time
> 	+        // However some DevSound versions might be
able to
> report samples playe
> 	d during PAUSED state.
> 	+        // Hence relying on samplecount reset pending
for
> PAUSED state handling
> 	.
> 	+
> 	         HXLOGL4(HXLOG_ADEV,
>
"CHXBaseAudioSession::UpdateUnplayedSampleCount():
> 	state = %s (no update)",
StringifyState(m_state));
> 	         return;
> 	     }
> 
> 
> 
>
------------------------------------------------------------
------------
> 
> _______________________________________________
> Porting-symbian mailing list
> Porting-symbianhelixcommunity.org
> http://lists.helixcommunity.org/mailman/listinfo
/porting-symbian


_______________________________________________
Audio-dev mailing list
Audio-devhelixcommunity.org
http://lists.helixcommunity.org/mailman/listinfo/audio
-dev

CN: Symbian Fix to avoid replay of audio during pause/resume.
user name
2007-10-18 18:37:45
Thanks Greg !

The changes have been committed to HEAD and 210CayS.

- Rajesh.
 

>-----Original Message-----
>From: ext Greg Wright [mailto:gwrightreal.com]

>Sent: Thursday, October 18, 2007 3:36 PM
>To: Rathinasamy Rajesh (Nokia-TP-MSW/Dallas)
>Cc: audio-devhelixcommunity.org; porting-symbianhelixcommunity.org
>Subject: Re: [Porting-symbian] CR: Symbian Fix to avoid
replay 
>of audio during pause/resume.
>
>Looks good.
>--greg.
>
>
>rajesh.rathinasamynokia.com wrote:
>> 
>>> "Nokia submits this code under the terms
of a commercial 
>contribution 
>>> agreement with RealNetworks, and I am
authorized to contribute this 
>>> code under said agreement."
>>>
>>> 	Modified by:  rajesh.rathinasamynokia.com
>>>
>>> 	Reviewed by: 
>>>
>>> 	Date: 16-Oct-2007
>>>
>>> 	Project: SymbianMmf_rel
>>>
>>>       ErrorId: EOVL-6XRV6P
>>> 	            
>>> 	Synopsis:  CR: Symbian Fix to avoid replay of
audio during 
>>> pause/resume.
>>>
>>> 	DevSound does not have support for pause, so
we issue 
>Stop during 
>>> pause. To avoid loss of data we have introduced
resupplying of 
>>> unplayed data. Resupplying of unplayed data is
based on the samples 
>>> played count from devsound. Samples played
count was not updated 
>>> after stop which resulted in replaying a small
amount of audio data.
>>>
>>> 	Added code to update the samples statistics
after stop 
>is issued. 
>>> Also moved the unplayed sample retrieval to
InitplayPending instead 
>>> of InitPausedState. Some version of DevSound
could still send 
>>> SamplesPlayed count zero after stop. The CR
handles that case too.
>>>
>>> 	NOTE: The replay of audio data is dependent on
the accuracy of 
>>> samples played from devsound.
>>>
>>> 	  
>>> 	Root Cause of the problem: Implementation. 
>>> 	 
>>> 	Files Modified:
>>>
	Audio/device/platform/symbian/common/CHXBaseAudioSession.cp
p
>>>
>>> 	Image Size and Heap Use impact: no impact
>>>
>>> 	Module Release testing (STIF) :  Passed.
>>>
>>> 	Test case(s) Added  :  No. Requires user
observation to 
>detect the 
>>> problem.
>>>
>>> 	Memory leak check performed : Yes.  No new
leaks introduced. 
>>>
>>> 	Platforms and Profiles Build Verified:
>>> helix-client-s60-32-mmf-mdf-arm
>>>
>>> 	Platforms and Profiles Functionality verified:
armv5,winscw
>>>
>>>       Branch: Head & 210CayS
>>>
>> 	Index:
platform/symbian/common/CHXBaseAudioSession.cpp
>> 	
>>
============================================================
=======
>> 	RCS file:
>> 
>/cvsroot/audio/device/platform/symbian/common/CHXBaseAud
ioSession.cpp,
>> 	v
>> 	retrieving revision 1.1.2.2
>> 	diff -w -u -b -r1.1.2.2 CHXBaseAudioSession.cpp
>> 	---
platform/symbian/common/CHXBaseAudioSession.cpp     2 May
>> 2007 16:06:46 -000
>> 	0       1.1.2.2
>> 	+++
platform/symbian/common/CHXBaseAudioSession.cpp     18 Oct
>> 2007 17:41:33 -00
>> 	00
>> 	 -425,6 +425,10 
>> 	             // The device resets on pause.
>> 	             // Unplayed samples played count are
claimed to be 
>> played.
>> 	             m_pStream->Stop();
>> 	+#ifdef HELIX_CONFIG_SYMBIAN_SAMPLESPLAYED
>> 	+            // updates latest samples stat
>> 	+            UpdateTimeSampleStats();
>> 	+#endif
>> 	         }
>> 	         else
>> 	         {
>> 	 -727,6 +731,10 
>> 	 void
CHXBaseAudioSession::InitPlayInitPendingState()
>> 	 {
>> 	     m_lastPlayError = KErrNone;
>> 	+#ifdef HELIX_CONFIG_SYMBIAN_SAMPLESPLAYED
>> 	+        RetrieveUnplayedSamplesFromPastQueue();
>> 	+        m_resetTriggerUnplayedCount =
m_unplayedSampleCount;
>> 	+#endif
>> 	 }
>> 
>> 
>> 	 -736,10 +744,6 
>> 	     if (m_deviceResetsOnPause)
>> 	     {
>> 	         PrepareForDeviceReset();
>> 	-#ifdef HELIX_CONFIG_SYMBIAN_SAMPLESPLAYED
>> 	-        RetrieveUnplayedSamplesFromPastQueue();
>> 	-        m_resetTriggerUnplayedCount =
m_unplayedSampleCount;
>> 	-#endif
>> 	     }
>> 
>> 	 }
>> 	 -1267,12 +1271,15 
>> 
>> 	 void
CHXBaseAudioSession::UpdateTimeSampleStats()
>> 	 {
>> 	-    if (PLAYING != m_state)
>> 	+    if((PLAYING != m_state) && (PAUSED !=
m_state))
>> 	     {
>> 	         // in case samples written increased
since last check
>> 	         UpdateUnplayedSampleCount();
>> 
>> 	         // sample count is only reliable in
PLAYING 
>state; don't do 
>> anything el
>> 	se at this time
>> 	+        // However some DevSound versions might
be able to
>> report samples playe
>> 	d during PAUSED state.
>> 	+        // Hence relying on samplecount reset
pending for
>> PAUSED state handling
>> 	.
>> 	+
>> 	         HXLOGL4(HXLOG_ADEV,
>>
"CHXBaseAudioSession::UpdateUnplayedSampleCount():
>> 	state = %s (no update)",
StringifyState(m_state));
>> 	         return;
>> 	     }
>> 
>> 
>> 
>> 
>--------------------------------------------------------
--------------
>> --
>> 
>> _______________________________________________
>> Porting-symbian mailing list
>> Porting-symbianhelixcommunity.org
>> http://lists.helixcommunity.org/mailman/listinfo
/porting-symbian
>
>

_______________________________________________
Audio-dev mailing list
Audio-devhelixcommunity.org
http://lists.helixcommunity.org/mailman/listinfo/audio
-dev

[1-3]

about | contact  Other archives ( Real Estate discussion Medical topics )