[Helix-client-dev] Re: TimeStamp issue with Real Format SDK

[Helix-client-dev] Re: TimeStamp issue with Real Format SDK

Lovish Dhawan ldhawan at real.com
Thu Sep 27 17:50:01 PDT 2007


Hi Eric,

Please if you could tell if you got any information on this.

Thanks & Regards,
Lovish

----- Original Message ----- 
From: "Eric Hyche" <ehyche at real.com>
To: "'Lovish Dhawan'" <ldhawan at real.com>
Cc: <helix-client-dev at helixcommunity.org>; "'Karl Lillevold'" 
<klillevold at real.com>; <ngokhale at real.com>
Sent: Tuesday, September 25, 2007 9:55 PM
Subject: RE: [Helix-client-dev] Re: TimeStamp issue with Real Format SDK


>
> Lovish,
>
> This is inside the codec team's code, so I'll have
> to defer to them on what the proper fix for this.
> I've exchanged an email yesterday with Karl and
> am waiting to hear back from him.
>
> Eric
>
> =============================================
> Eric Hyche (ehyche at real.com)
> Technical Lead
> RealNetworks, Inc.
>
>> -----Original Message-----
>> From: Lovish Dhawan [mailto:ldhawan at real.com]
>> Sent: Tuesday, September 25, 2007 6:34 AM
>> To: Lovish Dhawan; ehyche at real.com
>> Cc: helix-client-dev at helixcommunity.org; 'Karl Lillevold';
>> ngokhale at real.com
>> Subject: Re: [Helix-client-dev] Re: TimeStamp issue with Real
>> Format SDK
>>
>> Hi Eric,
>>
>> I have found that in the file Decoder.c
>> (src/codecs/video/rv89combo/cdeclib) , there is a function
>>
>> Decoder_prepareDecodeBuffers()
>>
>> Here there is some code as
>>
>> pPreviousTail = t->m_referenceFrames.m_pTail;
>>
>> if (!t->m_isLatencyEnabled || !pPreviousTail)
>>     t->m_pDisplayFrame = t->m_pCurrentFrame;
>>
>> For the first frame we have pPreviousTail as NULL so when it
>> comes here it sets t->m_pDisplayFrame as t->m_pCurrentFrame
>> and it is added in the list using
>>
>> DecodedFrameList_append(&t->m_referenceFrames, pFrame);
>>
>> and for further frames we have frames in the list
>> t->m_referenceFrames and so pPreviousTail is *not* NULL.
>>
>> Therefore it does not set t->m_pDisplayFrame.
>>
>> Now t->m_pDisplayFrame is checked in
>>
>> if (ps != RV_S_OK || (flags & RV_DDF_DONT_DRAW)
>> || (!t->m_pDisplayFrame && !wasFrameDisplayedBeforeDecode)
>> )
>> {
>> *notes |= RV_DDN_DONT_DRAW;
>> t->m_pDisplayFrame = 0;
>> }
>>
>> later in the same function and so this flag is set for the frame.
>>
>> I have tried setting
>> if (!t->m_isLatencyEnabled || !pPreviousTail)
>>  t->m_pDisplayFrame = t->m_pCurrentFrame;
>> else
>>  t->m_pDisplayFrame = t->m_pCurrentFrame;
>>
>> basically removing the if condition. We can remove this if
>> altogether and can always set the value for
>>
>> t->m_pDisplayFrame.
>>
>> After this change the value of sequence_numbers are correctly
>> coming when we print it in
>> in the function _RV40toYUV420Transform()
>>
>> using
>>
>> pRV20Out->timestamp = dst.sequence_number + temporal_offset;
>> at the end of the function.
>>
>> Please provide some pointers in this regards.
>>
>> Thanks & Regards,
>> Lovish
>>
>> ----- Original Message ----- 
>> From: Lovish Dhawan <mailto:ldhawan at real.com>
>> To: ehyche at real.com
>> Cc: helix-client-dev at helixcommunity.org ; 'Karl
>> Lillevold' <mailto:klillevold at real.com>
>> Sent: Monday, September 24, 2007 5:34 PM
>> Subject: [Helix-client-dev] Re: TimeStamp issue with
>> Real Format SDK
>>
>> Hi Eric,
>>
>> I have got the test clip from the client. Sending you
>> the FTP details in a separate mail.
>> They have checked this issue with rm2yuv sample app and
>> it is happening there as well.
>>
>> pRV20Out->timestamp : 0 dst.sequence_number : 0
>> src.sequence_number : 0 temporal_offset : 0
>> pRV20Out->timestamp : 119 dst.sequence_number : 119
>> src.sequence_number : 119 temporal_offset : 0
>> !rv_decode_frame_valid
>> pRV20Out->timestamp : 119 dst.sequence_number : 119
>> src.sequence_number : 239 temporal_offset : 0
>> pRV20Out->timestamp : 239 dst.sequence_number : 239
>> src.sequence_number : 359 temporal_offset : 0
>> pRV20Out->timestamp : 359 dst.sequence_number : 359
>> src.sequence_number : 479 temporal_offset : 0
>> pRV20Out->timestamp : 479 dst.sequence_number : 479
>> src.sequence_number : 599 temporal_offset : 0
>> pRV20Out->timestamp : 599 dst.sequence_number : 599
>> src.sequence_number : 719 temporal_offset : 0
>> pRV20Out->timestamp : 719 dst.sequence_number : 719
>> src.sequence_number : 839 temporal_offset : 0
>>
>> Also it is with local playback only (no network
>> playback is done).
>>
>> Thanks & Regards,
>> Lovish
>>
>> ----- Original Message ----- 
>> From: "Eric Hyche" <ehyche at real.com <mailto:ehyche at real.com> >
>> To: "'Lovish Dhawan'" <ldhawan at real.com
>> <mailto:ldhawan at real.com> >
>> Cc: <helix-client-dev at helixcommunity.org
>> <mailto:helix-client-dev at helixcommunity.org> >; "'Karl
>> Lillevold'" <klillevold at real.com <mailto:klillevold at real.com>
>> >; <ngokhale at real.com <mailto:ngokhale at real.com> >
>> Sent: Tuesday, September 18, 2007 7:24 PM
>> Subject: RE: TimeStamp issue with Real Format SDK
>>
>>
>> >
>> >> -----Original Message-----
>> >> From: Lovish Dhawan [mailto:ldhawan at real.com]
>> >> Sent: Tuesday, September 18, 2007 7:24 AM
>> >> To: ehyche at real.com <mailto:ehyche at real.com>
>> >> Cc: helix-client-dev at helixcommunity.org
>> <mailto:helix-client-dev at helixcommunity.org> ; Karl Lillevold;
>> >> ngokhale at real.com <mailto:ngokhale at real.com>
>> >> Subject: Fw: TimeStamp issue with Real Format SDK
>> >>
>> >> Hi,
>> >> Seems this missed your attention
>> >> Sending again.
>> >>
>> >> Thanks & Regards,
>> >> Lovish
>> >> ----- Original Message ----- 
>> >> From: "Lovish Dhawan" <ldhawan at real.com
>> <mailto:ldhawan at real.com> >
>> >> To: <ehyche at real.com <mailto:ehyche at real.com> >
>> >> Cc: <helix-client-dev at helixcommunity.org
>> <mailto:helix-client-dev at helixcommunity.org> >; "Karl Lillevold"
>> >> <klillevold at real.com <mailto:klillevold at real.com> >;
>> "Neelesh Gokhale" <ngokhale at real.com <mailto:ngokhale at real.com> >
>> >> Sent: Friday, September 14, 2007 7:58 PM
>> >> Subject: Re: TimeStamp issue with Real Format SDK
>> >>
>> >>
>> >> > Hi Eric,
>> >> >
>> >> > I am not very sure as to why the decoder is failing for
>> >> second frame.
>> >> >
>> >> > Even if the second frame failed to get decoded, shouldn't
>> >> > the third frame and consequent frames would have come
>> >> > and played at their time and not at the time of
>> the previous frame.
>> >> >
>> >> > In case 2nd frame decode is failing, do we need to render
>> >> > the 3rd sample at 119ms or 239ms? If we need to
>> render it at 239ms, then
>> >> > decoder should take care of updating the timestamp
>> value in case of the failure?
>> >> >
>> >
>> > Yes, the 3rd sample should still have a decoded timestamp
>> > of 239ms. I don't know without looking at the code whether:
>> >
>> > a) decoder properly tells the RealFormat SDK code
>> that decoding
>> >   of the 2nd sample failed, and the RealFormat SDK is not
>> >   properly flushing that frame; or
>> > b) decoder is not telling RealFormat SDK code that decoding
>> >   of the 2nd sample failed.
>> >
>> > I'll try and take a look in the RealFormat SDK code to
>> > see which it is.
>> >
>> > Can you get a copy of the clip for which this occurs?
>> > Does this repro using the rm2yuv sample app?
>> >
>> > In practice, decoding failure should be extremely rare,
>> > and should probably only happen on: a) corrupted files; or
>> > b) network playback if there's a bug in their
>> loss-handling code.
>> >
>> > Eric
>> >
>> >> > For a 10 FPS clip, timestamps are as below from
>> the real parser.
>> >> > 0, 119, 239, 359, 479, 599, 719, 839, 959, 1079, 1199, 1319
>> >> >
>> >> > Timestamps from the decoder are as below.
>> >> > 0, FAILURE, 119, 239, 359, 479, 599, 719, 839,
>> 959, 1079, 1199
>> >> >
>> >> >
>> >> > It seems that dst.sequence_number is updated
>> properly, but the time
>> >> > rv_decode_frame_valid() method fails, decoder is not
>> >> flushing the frame
>> >> > and in the next call to rv_decode_stream_decode method, it
>> >> is giving the
>> >> > prev frame and thus, from there onwards,
>> >> src.sequence_number is greater
>> >> > than of dst.sequence_number.
>> >> >
>> >> >
>> >> > Thanks & Regards,
>> >> > Lovish
>> >> >
>> >> > ----- Original Message ----- 
>> >> > From: "Eric Hyche" <ehyche at real.com
>> <mailto:ehyche at real.com> >
>> >> > To: "'Lovish Dhawan'" <ldhawan at real.com
>> <mailto:ldhawan at real.com> >
>> >> > Cc: <helix-client-dev at helixcommunity.org
>> <mailto:helix-client-dev at helixcommunity.org> >; "Karl Lillevold"
>> >> > <klillevold at real.com <mailto:klillevold at real.com>
>> >; "Neelesh Gokhale" <ngokhale at real.com <mailto:ngokhale at real.com> >
>> >> > Sent: Friday, September 14, 2007 7:43 PM
>> >> > Subject: RE: TimeStamp issue with Real Format SDK
>> >> >
>> >> >
>> >> >>
>> >> >> Lovish,
>> >> >>
>> >> >> Why is the decoding failing? Is this a corrupted file?
>> >> >> As far as the problem of the timestamps getting out of
>> >> >> sync, this may be a codec issue, so I'm copying
>> >> >> Karl and Neelesh on this.
>> >> >>
>> >> >> Eric
>> >> >>
>> >> >> =============================================
>> >> >> Eric Hyche (ehyche at real.com <mailto:ehyche at real.com> )
>> >> >> Technical Lead
>> >> >> RealNetworks, Inc.
>> >> >>
>> >> >>> -----Original Message-----
>> >> >>> From: Lovish Dhawan [mailto:ldhawan at real.com]
>> >> >>> Sent: Friday, September 14, 2007 10:04 AM
>> >> >>> To: ehyche at real.com <mailto:ehyche at real.com>
>> >> >>> Cc: helix-client-dev at helixcommunity.org
>> <mailto:helix-client-dev at helixcommunity.org>
>> >> >>> Subject: TimeStamp issue with Real Format SDK
>> >> >>>
>> >> >>> Hi Eric,
>> >> >>>
>> >> >>> There is an issue with one of our client which
>> is as follows:
>> >> >>>
>> >> >>> If a frame is not decoded correctly and at the check of
>> >> >>> rv_decode_frame_valid() method returns failure code. then
>> >> >>> subsequent all the frames
>> >> >>> display the video which should be of their
>> previous timestamp.
>> >> >>>
>> >> >>> Timestamps from the decoder are as below.
>> >> >>> 0, FAILURE, 119, 239, 359, 479, 599, 719, 839,
>> 959, 1079, 1199
>> >> >>>
>> >> >>> and not
>> >> >>>
>> >> >>> For a 10 FPS clip, timestamps are as below from
>> the real parser.
>> >> >>> 0, 119, 239, 359, 479, 599, 719, 839, 959, 1079,
>> 1199, 1319
>> >> >>>
>> >> >>> In the case above, decoder fails for 2nd frame,
>> but the 3rd
>> >> >>> frame timestamp value corresponds to the 2nd
>> frame timestamp.
>> >> >>> In case decoder is failing for 10 frames (for any reason)
>> >> >>> after first frame decoding,
>> >> >>> then the 12th frame (decoded successfully)
>> timestamp value
>> >> >>> from the decoder will be 1199,
>> >> >>>  but it should be 1319 to play the file with
>> proper A/V sync
>> >> >>>
>> >> >>> After taking logs (displayed under) we found that the
>> >> >>> src.sequence_number remains ahead of dst.sequence_number
>> >> >>>
>> >> >>> Some logs that were taken from the function
>> >> _RV40toYUV420Transform()
>> >> >>>
>> >> >>>     /* Assign the presentation time for the
>> display frame */
>> >> >>>     pRV20Out->timestamp = dst.sequence_number +
>> temporal_offset;
>> >> >>>  gives output as
>> >> >>>
>> >> >>> pRV20Out->timestamp : 0 dst.sequence_number : 0
>> >> >>> src.sequence_number : 0 temporal_offset : 0
>> >> >>> pRV20Out->timestamp : 119 dst.sequence_number : 119
>> >> >>> src.sequence_number : 119 temporal_offset : 0
>> >> >>> rv_decode_frame_valid Failed
>> >> >>> pRV20Out->timestamp : 119 dst.sequence_number : 119
>> >> >>> src.sequence_number : 239 temporal_offset : 0
>> >> >>> pRV20Out->timestamp : 239 dst.sequence_number : 239
>> >> >>> src.sequence_number : 359 temporal_offset : 0
>> >> >>> pRV20Out->timestamp : 359 dst.sequence_number : 359
>> >> >>> src.sequence_number : 479 temporal_offset : 0
>> >> >>> pRV20Out->timestamp : 479 dst.sequence_number : 479
>> >> >>> src.sequence_number : 599 temporal_offset : 0
>> >> >>> ...
>> >> >>> ...
>> >> >>>
>> >> >>> Now one more thing that is found is
>> >> >>>
>> >> >>> it seems that dst.sequence_number is updated
>> properly, but
>> >> >>> the time rv_decode_frame_valid method fails,
>> decoder is not
>> >> >>> flushing the frame and in the next call to
>> >> >>> rv_decode_stream_decode method, it is giving the
>> prev frame
>> >> >>> and thus, from there onwards,
>> src.sequence_number is greater
>> >> >>> than of dst.sequence_number.
>> >> >>>
>> >> >>> API: Decoder_prepareDecodeBuffers
>> >> >>> (t->m_pCurrentFrame->m_pPreviousFrame == NULL)
>> >> >>> t->m_pCurrentFrame->m_timeStamp =
>> src->sequence_number (0 = 0)
>> >> >>> API: Decoder_prepareDecodeBuffers dst->sequence_number =
>> >> >>> pDisplayFrame->m_timeStamp (0 = 0)
>> >> >>> pRV20Out->timestamp : 0 dst.sequence_number : 0
>> >> >>> src.sequence_number : 0 temporal_offset : 0
>> >> >>> API: Decoder_prepareDecodeBuffers
>> >> >>> t->m_pCurrentFrame->m_timeStamp =
>> src->sequence_number (119 = 119)
>> >> >>> pRV20Out->timestamp : 119 dst.sequence_number : 119
>> >> >>> src.sequence_number : 119 temporal_offset : 0
>> >> >>> rv_decode_frame_valid Failed
>> >> >>> API: Decoder_prepareDecodeBuffers t->m_pDisplayFrame =
>> >> pPreviousTail
>> >> >>> API: Decoder_prepareDecodeBuffers dst->sequence_number =
>> >> >>> pDisplayFrame->m_timeStamp (119 = 119)
>> >> >>> API: Decoder_prepareDecodeBuffers
>> >> >>> t->m_pCurrentFrame->m_timeStamp =
>> src->sequence_number (239 = 239)
>> >> >>>
>> >> >>>
>> >> >>> Please tell how to go about this issue.
>> >> >>>
>> >> >>> Thanks & Regards,
>> >> >>> Lovish
>> >> >>>
>> >> >>
>> >> >
>> >>
>> >
>>
>>
>> ________________________________
>>
>>
>>
>>
>> _______________________________________________
>> Helix-client-dev mailing list
>> Helix-client-dev at helixcommunity.org
>>
>> http://lists.helixcommunity.org/mailman/listinfo/helix-client-dev
>>
>>
>>
> 




More information about the Helix-client-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.