[hxdatatype] Re: [hxfilesys] CR-Client-Resend: Issue 765 Fixes. (Fix HTTPLite crash. Add progressive download checks for MP4 files)

[hxdatatype] Re: [hxfilesys] CR-Client-Resend: Issue 765 Fixes. (Fix HTTPLite crash. Add progressive download checks for MP4 files)

Henry Ping ping at real.com
Mon Dec 8 17:04:18 PST 2003


looks good

-->Henry

At 04:49 PM 12/8/2003 -0800, Aaron Colwell wrote:
>I'll check these changes in tomorrow morning if noone objects.
>
>Aaron
>
>On Fri, 5 Dec 2003, Aaron Colwell wrote:
>
> > Revised httpfileobj.cpp diff. The CHXHTTPFileObject::Advise()
> > implementation was changed so that it returns a HXR_FAILED for any usage
> > other than HX_FILEADVISE_RANDOMACCESS. If HX_FILEADVISE_RANDOMACCESS is
> > specified then HXR_ADVISE_PREFER_LINEAR is returned. This is more in line
> > with what the full HTTP filesystem plugin does. It also fixes a bug with
> > MP4 playback over HTTP. :)
> >
> > Aaron
> >
> > Index: httpfileobj.cpp
> > ===================================================================
> > RCS file: /cvs/filesystem/httplite/httpfileobj.cpp,v
> > retrieving revision 1.5
> > diff -u -r1.5 httpfileobj.cpp
> > --- httpfileobj.cpp   14 Oct 2003 02:55:59 -0000      1.5
> > +++ httpfileobj.cpp   5 Dec 2003 22:50:16 -0000
> > @@ -190,6 +190,12 @@
> >          m_pPendingAddBlock = NULL;
> >      }
> >
> > +    if (m_ulCallbackHandle)
> > +    {
> > +     m_pScheduler->Remove(m_ulCallbackHandle);
> > +     m_ulCallbackHandle = 0;
> > +    }
> > +
> >      if (m_pContext != NULL)
> >      {
> >       m_pContext->Release();
> > @@ -566,21 +572,20 @@
> >   *  developing a caching scheme.
> >   */
> >  STDMETHODIMP
> > -CHXHTTPFileObject::Advise(UINT32  useage)
> > +CHXHTTPFileObject::Advise(UINT32  usage)
> >  {
> > -    MLOG_HTTP("CHXHTTPFileObject::Advice(%u)\n", useage);
> > +    MLOG_HTTP("CHXHTTPFileObject::Advice(%u)\n", usage);
> > +
> > +    HX_RESULT res = HXR_FAILED;
> >
> > -    // Bacase of the simple cache, only
> > +    // Because of the simple cache, only
> >      // linear useage is allowed.
> > -    if(useage != HXR_ADVISE_PREFER_LINEAR)
> > +    if(HX_FILEADVISE_RANDOMACCESS == usage)
> >      {
> > -        return HXR_ADVISE_PREFER_LINEAR;
> > -    }
> > -    else
> > -    {
> > -        return HXR_OK;
> > +     res = HXR_ADVISE_PREFER_LINEAR;
> >      }
> >
> > +    return res;
> >  } // Advise()
> >
> >
> > @@ -1585,7 +1590,7 @@
> >      }
> >
> >      // Is there any incomplete read pending?
> > -    if(m_bIncompleteReadPending)
> > +    if(m_bIncompleteReadPending && m_pCache && m_pFileResponse)
> >      {
> >          // Ask the cache if it can supply the next installment for the
> >          // incomplete read.
> > @@ -1606,7 +1611,7 @@
> >      // Is there any block which was rejected by the cache earlier because
> > it
> >      // was full? If so, let's try inserting into the cache again. Maybe,
> > the
> >      // cache has since freed some space.
> > -    if(m_bAddBlockPending)
> > +    if(m_bAddBlockPending && m_pCache)
> >      {
> >          m_bAddBlockPending = FALSE;
> >          m_pCache->AddBlock(m_pPendingAddBlock);
> >
> > On Fri, 5 Dec 2003, Aaron Colwell wrote:
> >
> > > Synopsis: Fix HTTPLite crash. Add progressive download checks for MP4 
> files
> > >
> > > Overview: - Added code in CHXHTTPFileObject::_Cleanup() to cancel the
> > >             pending callback.
> > >
> > >           - Added some pointer checks in CHXHTTPFileObject::Func()
> > >             to avoid dereferencing null pointers.
> > >
> > >           - Added code to determine if the file object prefers linear
> > >             access.
> > >
> > >           - Added a code to check for files optimized for progressive
> > >             download when m_bPreferLinearAccess is set. Progressive
> > >             download files have the moov atom at the beginning of the 
> file
> > >             and the mdat atom (media data) at the end. The code will
> > >             report an error if you try to play a file not optimized
> > >             for progressive download and m_bPreferLinearAccess is set.
> > >
> > > Files Modified:
> > > filesystem/httplite/httpfileobj.cpp
> > > datatype/mp4/fileformat/atomizer.cpp
> > > datatype/mp4/fileformat/pub/atomizer.h
> > >
> > > Files Added: none
> > >
> > > Image Size and Heap Use impact: tiny
> > >
> > > Platforms and Profiles affected: all
> > >
> > > Distribution Libraries affected: none
> > >
> > > Distribution library impact and planned action: none
> > >
> > > Platforms and Profiles Build Verified: symbian-61-emulator
> > >
> > > Platforms and Profiles Functionality verified: symbian-61-emulator
> > >
> > > Branch: HEAD
> > >
> > > QA Instructions: none
> > >
> > > Index: filesystem/httplite/httpfileobj.cpp
> > > ===================================================================
> > > RCS file: /cvs/filesystem/httplite/httpfileobj.cpp,v
> > > retrieving revision 1.5
> > > diff -u -r1.5 httpfileobj.cpp
> > > --- filesystem/httplite/httpfileobj.cpp     14 Oct 2003 02:55:59 
> -0000
> > > 1.5
> > > +++ filesystem/httplite/httpfileobj.cpp     5 Dec 2003 20:37:29 -0000
> > > @@ -190,6 +190,12 @@
> > >          m_pPendingAddBlock = NULL;
> > >      }
> > >
> > > +    if (m_ulCallbackHandle)
> > > +    {
> > > +   m_pScheduler->Remove(m_ulCallbackHandle);
> > > +   m_ulCallbackHandle = 0;
> > > +    }
> > > +
> > >      if (m_pContext != NULL)
> > >      {
> > >     m_pContext->Release();
> > > @@ -1585,7 +1591,7 @@
> > >      }
> > >
> > >      // Is there any incomplete read pending?
> > > -    if(m_bIncompleteReadPending)
> > > +    if(m_bIncompleteReadPending && m_pCache && m_pFileResponse)
> > >      {
> > >          // Ask the cache if it can supply the next installment for the
> > >          // incomplete read.
> > > @@ -1606,7 +1612,7 @@
> > >      // Is there any block which was rejected by the cache earlier 
> because
> > > it
> > >      // was full? If so, let's try inserting into the cache again. 
> Maybe,
> > > the
> > >      // cache has since freed some space.
> > > -    if(m_bAddBlockPending)
> > > +    if(m_bAddBlockPending && m_pCache)
> > >      {
> > >          m_bAddBlockPending = FALSE;
> > >          m_pCache->AddBlock(m_pPendingAddBlock);
> > > Index: datatype/mp4/fileformat/atomizer.cpp
> > > ===================================================================
> > > RCS file: /cvs/datatype/mp4/fileformat/atomizer.cpp,v
> > > retrieving revision 1.6
> > > diff -u -r1.6 atomizer.cpp
> > > --- datatype/mp4/fileformat/atomizer.cpp    1 Aug 2003 22:43:26 
> -0000
> > > 1.6
> > > +++ datatype/mp4/fileformat/atomizer.cpp    5 Dec 2003 20:37:29 -0000
> > > @@ -101,6 +101,7 @@
> > >      , m_ulTotalSize(0)
> > >      , m_State(ATMZR_Offline)
> > >      , m_bSyncAccessEnabled(FALSE)
> > > +    , m_bPreferLinearAccess(FALSE)
> > >      , m_pRecursionCallback(NULL)
> > >      , m_ulRecursionCount(0)
> > >      , m_lRefCount(0)
> > > @@ -158,6 +159,14 @@
> > >         m_bSyncAccessEnabled = TRUE;
> > >         m_pFileSwitcher->Advise(HX_FILEADVISE_ASYNCACCESS);
> > >     }
> > > +
> > > +   HX_RESULT adviseRes =
> > > +       m_pFileSwitcher->Advise(HX_FILEADVISE_RANDOMACCESS);
> > > +
> > > +   if (HXR_ADVISE_PREFER_LINEAR == adviseRes)
> > > +   {
> > > +       m_bPreferLinearAccess = TRUE;
> > > +   }
> > >      }
> > >
> > >      // Find Output Interface
> > > @@ -833,7 +842,31 @@
> > >                                             ulAtomSize -
> > >                                             ulDataLen;
> > >                         m_State = ATMZR_ProcHeader;
> > > -                       SeekDataCB(m_ulNewAtomOffset);
> > > +
> > > +                       /* Check to see if we are trying to skip
> > > +                        * an mdat atom while using a file object
> > > +                        * that prefers linear access (ie. HTTP/1.0)
> > > +                        */
> > > +                       if (m_bPreferLinearAccess && (QT_mdat ==
> > > AtomType))
> > > +                       {
> > > +                           HX_RESULT completionRes =
> > > HXR_INVALID_FILE;
> > > +
> > > +                           if ((m_pCurrentRoot) &&
> > > +
> > > (m_pCurrentRoot->FindPresentChild(QT_moov)))
> > > +                           {
> > > +                               /* We have the moov atom already so
> > > +                                * this file is likely formatted for
> > > +                                * progressive download
> > > +                                */
> > > +                               completionRes = HXR_OK;
> > > +                           }
> > > +
> > > +                           CompleteAtomization(completionRes);
> > > +                       }
> > > +                       else
> > > +                       {
> > > +                           SeekDataCB(m_ulNewAtomOffset);
> > > +                       }
> > >                         return retVal;
> > >                     }
> > >                     else
> > > Index: datatype/mp4/fileformat/pub/atomizer.h
> > > ===================================================================
> > > RCS file: /cvs/datatype/mp4/fileformat/pub/atomizer.h,v
> > > retrieving revision 1.3
> > > diff -u -r1.3 atomizer.h
> > > --- datatype/mp4/fileformat/pub/atomizer.h  14 Jul 2003 18:40:13 
> -0000
> > > 1.3
> > > +++ datatype/mp4/fileformat/pub/atomizer.h  5 Dec 2003 20:37:29 -0000
> > > @@ -274,6 +274,7 @@
> > >      IHXScheduler *m_pScheduler;
> > >
> > >      BOOL m_bSyncAccessEnabled;
> > > +    BOOL m_bPreferLinearAccess;
> > >
> > >      CQTAtom *m_pRoot;
> > >      CQTAtom *m_pCurrentRoot;
> > >
> > >
> > >
> >
> >
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: dev-unsubscribe at filesystem.helixcommunity.org
>For additional commands, e-mail: dev-help at filesystem.helixcommunity.org


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe at datatype.helixcommunity.org
For additional commands, e-mail: dev-help at datatype.helixcommunity.org




More information about the Datatype-dev mailing list
 

Site Map   |   Terms of Use   |   Privacy Policy   |   Contact Us

Copyright © 1995-2007 RealNetworks, Inc. All rights reserved. RealNetworks and Helix are trademarks of RealNetworks.
All other trademarks or registered trademarks are the property of their respective holders.