[Mp4-tech] Only half POC range available for ordered ranges?

Andrew Palfreyman anpalfre cisco.com
Mon Sep 10 22:47:20 EDT 2007


Dr. Sullivan,
Apologies for the ambiguity of the presentation. The data I omitted is as follows:
MaxPicOrderCountLsb = 64
prevPicOrderCountMsb = 0
prevPicOrderCountLsb = 18
pic_order_count_lsb = 52
field_pic_flag = 0
The current frame is a reference frame followed by a large number of consecutive non-reference frames, accounting for the large difference (pic_order_count_lsb - prevPicOrderCountLsb = 34). Note that when  pic_order_count_lsb is reduced to 50, no negative value results.
Best,
Andrew Palfreyman
----- Original Message ----- 
  From: Gary Sullivan 
  To: Andrew Palfreyman ; mp4-tech lists.mpegif.org 
  Sent: Monday, September 10, 2023 3:32 PM
  Subject: RE: [Mp4-tech] Only half POC range available for ordered ranges?
  Mr. Palfreyman et al,
  I think you are not interpreting the equations correctly.  I think the statement of "the fact that POC increases by 2 on each frame or field pair" is not correct in general (i.e., unless the encoder wants it to be correct).
  I think that you have also provided insufficient data for your example.  For example, you did not provide the values of pic_order_cnt_lsb, field_pic_flag and bottom_field_flag.  You also did not explicitly provide the value of MaxPicOrderCntLsb.
  Guessing somwhat, I suspect that in your example, you are saying that pic_order_cnt_lsb = 20 and MaxPicOrderCntLsb = 64.  If that is true, then consider the following:
   if( ( pic_order_cnt_lsb < prevPicOrderCntLsb ) &&
     ( ( prevPicOrderCntLsb - pic_order_cnt_lsb ) >= ( MaxPicOrderCntLsb / 2 ) ) )
    PicOrderCntMsb = prevPicOrderCntMsb + MaxPicOrderCntLsb
   else if( ( pic_order_cnt_lsb > prevPicOrderCntLsb ) &&
     ( ( pic_order_cnt_lsb - prevPicOrderCntLsb ) > ( MaxPicOrderCntLsb / 2 ) ) )
    PicOrderCntMsb = prevPicOrderCntMsb - MaxPicOrderCntLsb
   else
    PicOrderCntMsb = prevPicOrderCntMsb
  reduces to
   if( ( 20 < 18 ) && anything )
    doesn't matter because the expression is false
   else if( ( 20 > 18 ) && ( ( 20 - 18 ) > ( 32 ) ) )
    doesn't matter because the expression is false
   else
    PicOrderCntMsb = 0
  Which is different than what you said.
  Best Regards,
  Gary Sullivan
----------------------------------------------------------------------------
    From: mp4-tech-bounces lists.mpegif.org [mailto:mp4-tech-bounces lists.mpegif.org] On Behalf Of Andrew Palfreyman
    Sent: Monday, September 10, 2023 12:39 PM
    To: mp4-tech lists.mpegif.org
    Subject: [Mp4-tech] Only half POC range available for ordered ranges?
    Per paragraph 8.2.1.1 (see attached analysis) for picture_count_type = 0, it would appear that, while POCs increase between consecutive frames in stream order, the maximum number of such frames in this group can be no larger than MaxPicOrderCntLsb / 2 , else POC will go negative. I'm curious as to why this restriction exists. I'm guessing it relates somehow to the fact that POC increases by 2 on each frame or field pair. I'm also curious as to why negative POC values are interpreted as such and instead aren't allowed to simply roll over.
    Best,
    Andrew Palfreyman
-------------- next part --------------
An HTML attachment was scrubbed...
URL: /pipermail/mp4-tech/attachments/20070910/31bdfed4/attachment.html


More information about the Mp4-tech mailing list