![](/i/fill.gif) |
![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Orchid XP v8 wrote:
> I'm not really comprehending the significance of the distinction between
> P frames and B frames...
P frames are differences from the previous I frame.
B frames are differences from the preceding and following frames,
whether they be I or P or B.
In other words, you can't play a B frame at all without all the data
between one I frame and the next.
Ever try to skip forward and back in a youtube video? Those jumps
*there* are the I frames (or whatever equivalent). P frames need the
previous I frame (and maybe previous P frames? I don't remember) and B
frames need all the data between two I frames.
> True - but the Intel product line has been 32-bit over a 32-bit bus
> since, what, the Pentium at least?
Yep. How long do you think DSL and MPEG1 has been around? :-)
--
Darren New / San Diego, CA, USA (PST)
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Invisible wrote:
>> The key concept is how to describe the current frame fairly accurately
>> with the minimum amount of data, given some data from previous (and in
>> some cases future) frames. Commonly motion is detected, as often blocks
>> of pixels hardly change, but are shifted in space from one frame to the
>> next.
>
> ...so they added motion prediction then?
Wasn't that in MPEG1 already? (honest ignorant question)
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Nicolas Alvarez wrote:
> Wasn't that in MPEG1 already? (honest ignorant question)
I think it was, yes.
--
Darren New / San Diego, CA, USA (PST)
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
>> I'm not really comprehending the significance of the distinction
>> between P frames and B frames...
>
> P frames are differences from the previous I frame.
>
> B frames are differences from the preceding and following frames,
> whether they be I or P or B.
>
> In other words, you can't play a B frame at all without all the data
> between one I frame and the next.
I get that there are full frames and difference frames. I'm just not
really understanding why there are two different kinds of difference
frames...
> Ever try to skip forward and back in a youtube video? Those jumps
> *there* are the I frames (or whatever equivalent).
Yeah, I figured that out a long time ago. ;-) Presumably otherwise you'd
only have one I frame, right at the very start.
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
>> P frames are differences from the previous I frame.
>>
>> B frames are differences from the preceding and following frames, whether
>> they be I or P or B.
>>
>> In other words, you can't play a B frame at all without all the data
>> between one I frame and the next.
>
> I get that there are full frames and difference frames. I'm just not
> really understanding why there are two different kinds of difference
> frames...
I think it's just because P frames are way simpler (both for encoding and
decoding), so they get their own name. It's very fixed how the behave (it's
always the difference from the previous I frame), whereas B frames are much
more flexible, having inputs from a number of frames ahead and behind (even
from other B frames, which can make matters very complex). Some players get
confused if you use too many B frames, or use them in the "wrong" places, or
use them at all!
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Darren New <dne### [at] san rr com> wrote:
> Nicolas Alvarez wrote:
> > Wasn't that in MPEG1 already? (honest ignorant question)
> I think it was, yes.
The motion detection in mpeg4 is much more complicated than in mpeg1.
Mpeg4 can track the motion of freely-shaped areas.
--
- Warp
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Warp wrote:
> The motion detection in mpeg4 is much more complicated than in mpeg1.
> Mpeg4 can track the motion of freely-shaped areas.
Cool. I think MPEG1 was just 8x8 blocks. I knew they had to be doing
*something* more complicated. :-)
Maybe here's something you know: If Xvid and DivX are MPEG4, why do you
need a special codec to decode them? They're either outputting standard
mpeg4 or they aren't, yes?
--
Darren New / San Diego, CA, USA (PST)
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Invisible wrote:
>>> I'm not really comprehending the significance of the distinction
>>> between P frames and B frames...
>>
>> P frames are differences from the previous I frame.
>>
>> B frames are differences from the preceding and following frames,
>> whether they be I or P or B.
>>
>> In other words, you can't play a B frame at all without all the data
>> between one I frame and the next.
>
> I get that there are full frames and difference frames. I'm just not
> really understanding why there are two different kinds of difference
> frames...
One difference frame (P) is a difference from the past. They're
"progressive" changes since the last full frame.
The other difference frame (B) is a difference from the past *and* the
future. In other words, if you have B-frames, the decoder has to buffer
several uncompressed frames, reading ahead in the stream past where it's
actually playing. B frames have forward references to the content of
frames that come later in the stream. You can't play a B-frame as soon
as you read it. You have to keep reading to the next I-frame [1], then
decompress the B-frames you've buffered up.
[1] Maybe it's P frames you read ahead to. It's been years since I
looked at the details.
> Yeah, I figured that out a long time ago. ;-) Presumably otherwise you'd
> only have one I frame, right at the very start.
Well, it also lets you tune in to the middle of a program. Remember, it
was for "video on demand" all this got invented. Otherwise you'd just
mail an analog tape.
--
Darren New / San Diego, CA, USA (PST)
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Darren New <dne### [at] san rr com> wrote:
> Maybe here's something you know: If Xvid and DivX are MPEG4, why do you
> need a special codec to decode them? They're either outputting standard
> mpeg4 or they aren't, yes?
AFAIK both codecs can play most videos made by the other. However, one of
them might be implementing something of the mpeg4 standard the other isn't.
(AFAIK neither one implemens the *full* mpeg4 standard.) There might also
be some codec-specific additions as well.
--
- Warp
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Darren New wrote:
> Maybe here's something you know: If Xvid and DivX are MPEG4, why do you
> need a special codec to decode them? They're either outputting standard
> mpeg4 or they aren't, yes?
I once changed the FourCC of an AVI file from one MPEG4-based codec to
another. It *mostly* worked.
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |