Hi Dinkar,

In the example below, the frames would be displayed according to the 
"display order," i.e., #-3 (B), #-2 (B), #-1 (P), #0 (B), #1 (B), #2 (I).

If you get confused, just remember that MPEG-2 video follows these simple 
rules:

(1) Keep two slots -- the "last I-frame" slot and the "last P-frame" slot.

(2) If you hit an I-frame, decode it, put it into the "last I-frame" slot,
     and display the contents of the "last P-frame" slot

(3) If you hit a P-frame, decode it (using the "last I-frame" slot as a
     reference), put it into the "last P-frame" slot, and display the
     contents of the "last I-frame" slot.

(4) If you hit a B-frame, decode it (using both slots as references) and
     display it immediately.

That's it.

Best,
Keith

On Fri, 6 Apr 2007, Dinkar Bhat wrote:

> Hi Keith,
>
>  Thanks for this example. In this example, would the first picture that is 
> displayed
>  be the P-picture in the second GOP followed by the I picture? I am getting a 
> little
>  confused about the display order of the all the frames.
>
>  Thanks
>  Dinkar
>
> Keith Winstein <[EMAIL PROTECTED]> wrote:
>  Hi Sebastian,
>
> Unfortunately, MPEG-2 isn't quite this simple. The approach you're
> describing will only work on a *closed* GOP. In normal (non-closed) GOPs,
> decoding the first two B frames will require access to the previous P
> frame -- from the previous GOP.
>
> Here's an example of what you'll see right around the GOP boundary:
>
> P-picture (coded order #-3, display order #-1)
> [This guy is predicted from the previous I-picture, not shown here.]
> B-picture (coded order #-2, display order #-3)
> [Predicted from prev. I-pic AND P-picture in coded order #-3.]
> B-picture (coded order #-1, display order #-2)
> [Predicted from prev. I-pic AND P-picture in coded order #-3.]
> SEQUENCE header
> GOP header
> I-picture (coded order #0, display order #2)
> [Stands alone.]
> B-picture (coded order #1, display order #0)
> [Predicted from I-picture in coded order #0 and P-picture #-3.]
> B-picture (coded order #2, display order #1)
> [Predicted from I-picture in coded order #0 and P-picture #-3.]
> P-picture (coded order #3, display order #5)
> ...
>
> So, you see, decoding the first two B-pictures requires access to the last
> P-picture in the previous GOP. That's not the case in a closed GOP, but it
> is in a normal GOP.
>
> So, what can you do? The easiest thing is probably to pretend that the GOP
> starts with the I-picture (the one sent first but not displayed first).
> Skip any B-pictures until you've seen one I-picture and one P-picture.
> Then decode and display everything *and continue* beyond the end of the
> GOP, decoding all the frames until you hit a P-picture, and displaying all
> the frames until you have to display an I-picture (which will be the first
> one sent in the next GOP.)
>
> This method will require you to do a little extra decoding if you want to
> hit all the frames, but basically you're just offsetting what you consider
> to be the start of the "GOP".
>
> Hope this helps. Happy to help if you have further questions.
>
> Best,
> Keith
>
> On Thu, 5 Apr 2007, Sebastian Vetter wrote:
>
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> Hallo everyone,
>>
>> I just started working with libmpeg2 to integrate video support into the
>> application I'm working at.
>>
>> What I would like to do is decode all frames within ONE GOP and store
>> them in memory. The user should have the ability to jump to a random GOP
>> resulting in decoding that one and make its frames accessible.
>>
>> Unfortunately, I had some problems making it work. It seems that even if
>> the I-frame is decoded correctly all consecutive frames are decoded with
>> loads of artifacts.
>>
>> Could anyone suggest a good way to achieve what I described before?
>> Especially the way of using skip and seek functionality still is kind of
>> a red rag to me.
>>
>> Any suggestion are hint will be highly appreciated.
>>
>> Cheers,
>> Sebastian
>> -----BEGIN PGP SIGNATURE-----
>> Version: GnuPG v1.4.3 (GNU/Linux)
>> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
>>
>> iD8DBQFGFDgx/ZEwc0fz/xMRAlqvAJ925c/kKewQhDqDNPERNyCLH4b/YACcDsEY
>> clKo+Ac+TOAbhJ0H14CT5EQ=
>> =OWFQ
>> -----END PGP SIGNATURE-----
>>
>> -------------------------------------------------------------------------
>> Take Surveys. Earn Cash. Influence the Future of IT
>> Join SourceForge.net's Techsay panel and you'll get the chance to share your
>> opinions on IT & business topics through brief surveys-and earn cash
>> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
>> _______________________________________________
>> Libmpeg2-devel mailing list
>> Libmpeg2-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/libmpeg2-devel
>>
>
> -------------------------------------------------------------------------
> Take Surveys. Earn Cash. Influence the Future of IT
> Join SourceForge.net's Techsay panel and you'll get the chance to share your
> opinions on IT & business topics through brief surveys-and earn cash
> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
> _______________________________________________
> Libmpeg2-devel mailing list
> Libmpeg2-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/libmpeg2-devel
>
>
>
> ---------------------------------
> Finding fabulous fares is fun.
> Let Yahoo! FareChase search your favorite travel sites to find flight and 
> hotel bargains.

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Libmpeg2-devel mailing list
Libmpeg2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmpeg2-devel

Reply via email to