[prev in list] [next in list] [prev in thread] [next in thread]
List: helix-protocol-dev
Subject: [Protocol-dev] FW: ou1cimx1#514330: Fusion: System error occurs
From: <ext-debashis.2.panigrahi () nokia ! com>
Date: 2010-08-16 5:51:08
Message-ID: 20D73E2631F7914F868646E119DEC1CE284FCB5F8D () NOK-EUMSG-02 ! mgdnok ! nokia ! com
[Download RAW message or body]
"Nokia submits this code under the terms of a commercial contribution agreement with \
Real Networks, and I am authorized to contribute this code under said agreement."
Modified by: ext-debashis.2.panigrahi@nokia.com
Reviewed by: Junhong.Liu@nokia.com
RC Id: ou1cimx1#514330
Date: 08/16/2010
Project: SymbianMmf_wm
Synopsis: Fusion: System error occurs when streaming a wmv excerpt link.
Overview:
The content here is a dynamic link, which causes seek to be called before play has \
started. Whereas there is no provision to handle such as state/ condition in wm \
protocol. Therefore when HXMSG_WMNET_BEGIN_SELECT_STREAMS message is issued, it fails \
with HXR_UNEXPECTED and this systematically gets propagated as "System Error"
Fix:
To handle such a condition a new state has been introduced here \
"kThreadStateEndSelectStreamsPendingFromSeeked". So when \
ThreadHandleBeginSelectStreams(.) is called after SeekDone, this new state captures \
the state transition. Then causes the Play to defer till \
ThreadHandleEndSelectStreams(.) is called, thereby causing the playback to start from \
the seeked position.
Files modified & changes:
wmcode-protocol/rtsp/fileformat/asf_file_format_net.cpp
wmcode-protocol/rtsp/fileformat/pub/asf_file_format_net.h
Image Size and Heap Use impact: No major impact
Module Release testing (STIF) : Passed
Test case(s) Added : No
Memory leak check performed : Passed, No additional leaks introduced.
Platforms and Profiles Build Verified: helix-client-s60-52-mmf-mdf-dsp
Platforms and Profiles Functionality verified: armv5, winscw
Branch: 210CayS, 420Bizo and HEAD
CVS Diff on 210CayS: <Attached>
["diff.txt" (text/plain)]
Index: asf_file_format_net.cpp
===================================================================
RCS file: /cvsroot/wmcode-protocol/rtsp/fileformat/asf_file_format_net.cpp,v
retrieving revision 1.15.10.22
diff -u -w -r1.15.10.22 asf_file_format_net.cpp
--- asf_file_format_net.cpp 13 Mar 2010 09:45:29 -0000 1.15.10.22
+++ asf_file_format_net.cpp 9 Aug 2010 10:38:49 -0000
@@ -4962,8 +4962,10 @@
HX_ASSERT(m_pNetClient && pMsg);
if (m_pNetClient && pMsg)
{
- HX_ASSERT(m_ulThreadState == kThreadStateHeadersSent || m_ulThreadState == \
kThreadStatePlaying);
- if (m_ulThreadState == kThreadStateHeadersSent || m_ulThreadState == \
kThreadStatePlaying) + HX_ASSERT(m_ulThreadState == kThreadStateHeadersSent || \
m_ulThreadState == kThreadStatePlaying || + m_ulThreadState == \
kThreadStateSeeked); + if (m_ulThreadState == kThreadStateHeadersSent || \
m_ulThreadState == kThreadStatePlaying || + m_ulThreadState == \
kThreadStateSeeked) {
HRESULT hr = S_OK;
if (!m_pStreamSwitchInfo)
@@ -5122,9 +5124,18 @@
if (m_pNetStreamSwitchArray->Size() > 0)
{
// Set the thread state
- m_ulThreadState = (m_ulThreadState == \
kThreadStateHeadersSent ?
- \
kThreadStateEndSelectStreamsPendingFromHeadersSent :
- \
kThreadStateEndSelectStreamsPendingFromPlaying); + if \
(m_ulThreadState == kThreadStateHeadersSent) + {
+ m_ulThreadState = \
kThreadStateEndSelectStreamsPendingFromHeadersSent; + }
+ else if (m_ulThreadState == kThreadStateSeeked)
+ {
+ m_ulThreadState = \
kThreadStateEndSelectStreamsPendingFromSeeked; + }
+ else
+ {
+ m_ulThreadState = \
kThreadStateEndSelectStreamsPendingFromPlaying; + }
// Call CRTSPClient::BeginSelectStreams. When this is \
complete,
// we will get a callback to \
CASFFileFormatNet::OnSelectStreams()
hr = \
m_pNetClient->BeginSelectStreams(m_pNetStreamSwitchArray->P(), @@ -5164,16 +5175,19 \
@@ if (pMsg)
{
HX_ASSERT(m_ulThreadState == \
kThreadStateEndSelectStreamsPendingFromHeadersSent ||
- m_ulThreadState == \
kThreadStateEndSelectStreamsPendingFromPlaying); + m_ulThreadState \
== kThreadStateEndSelectStreamsPendingFromPlaying || + \
m_ulThreadState == kThreadStateEndSelectStreamsPendingFromSeeked);
if (m_ulThreadState == kThreadStateEndSelectStreamsPendingFromHeadersSent ||
- m_ulThreadState == kThreadStateEndSelectStreamsPendingFromPlaying)
+ m_ulThreadState == kThreadStateEndSelectStreamsPendingFromPlaying ||
+ m_ulThreadState == kThreadStateEndSelectStreamsPendingFromSeeked)
{
// Get the return value of EndSelectStreams
HRESULT hr = (HRESULT) pMsg->m_pParam1;
if (SUCCEEDED(hr))
{
// Set the thread state
- m_ulThreadState = (m_ulThreadState == \
kThreadStateEndSelectStreamsPendingFromHeadersSent ? + m_ulThreadState \
= ((m_ulThreadState == kThreadStateEndSelectStreamsPendingFromHeadersSent || + \
m_ulThreadState == kThreadStateEndSelectStreamsPendingFromSeeked) ?
kThreadStateStreamsSelected : \
kThreadStatePlaying); // Did we have to defer the call to BeginPlay()?
if (m_bDeferredBeginPlay)
@@ -5240,11 +5254,13 @@
m_ulThreadState == kThreadStateStreamsSelected ||
m_ulThreadState == kThreadStateSeeked ||
m_ulThreadState == \
kThreadStateEndSelectStreamsPendingFromHeadersSent || + \
m_ulThreadState == kThreadStateEndSelectStreamsPendingFromSeeked || m_ulThreadState \
== kThreadStateEndPausePending); if (m_ulThreadState == kThreadStatePaused \
|| m_ulThreadState == kThreadStateStreamsSelected ||
m_ulThreadState == kThreadStateSeeked ||
m_ulThreadState == kThreadStateEndSelectStreamsPendingFromHeadersSent ||
+ m_ulThreadState == kThreadStateEndSelectStreamsPendingFromSeeked ||
m_ulThreadState == kThreadStateEndPausePending)
{
// Clear the deferred BeginPlay flag
@@ -5291,6 +5307,7 @@
m_ulThreadState = \
kThreadStateEndPlayPendingFromSeeked; break;
case kThreadStateEndSelectStreamsPendingFromHeadersSent:
+ case kThreadStateEndSelectStreamsPendingFromSeeked:
// The command to begin playing came from the main app
// thread before the SETUP response arrived from the server
// via the EndSelectStreams message. Therefore, we need to
cvs diff: Diffing pub
Index: pub/asf_file_format_net.h
===================================================================
RCS file: /cvsroot/wmcode-protocol/rtsp/fileformat/pub/asf_file_format_net.h,v
retrieving revision 1.7.10.7
diff -u -w -r1.7.10.7 asf_file_format_net.h
--- pub/asf_file_format_net.h 29 Apr 2009 22:14:46 -0000 1.7.10.7
+++ pub/asf_file_format_net.h 9 Aug 2010 10:38:50 -0000
@@ -237,6 +237,7 @@
kThreadStateHeadersSent,
kThreadStateEndSelectStreamsPendingFromHeadersSent,
kThreadStateEndSelectStreamsPendingFromPlaying,
+ kThreadStateEndSelectStreamsPendingFromSeeked,
kThreadStateStreamsSelected,
kThreadStateEndPlayPendingFromPaused,
kThreadStateEndPlayPendingFromStreamsSelected,
_______________________________________________
Protocol-dev mailing list
Protocol-dev@helixcommunity.org
http://lists.helixcommunity.org/mailman/listinfo/protocol-dev
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic