# Difference between revisions of "RealVideo 4"

(link to H.264 prediction page) |
(→Prediction) |
||

Line 63: | Line 63: | ||

[[Category:Video Codecs]] | [[Category:Video Codecs]] | ||

− |

## Latest revision as of 02:07, 15 March 2011

- FourCC: rv40
- Company: Real
- High level whitepaper: https://datatype.helixcommunity.org/2003/codecdocs/rv9_tech_overview_v1_5.pdf
- Samples: http://samples.mplayerhq.hu/real/VC-RV40/

RealVideo 4 is available in RealPlayer starting with version 9. RealVideo 10 (introduced with RealPlayer 10) uses the same RV40 video format, and can be played by RealPlayer 9 decoder. All Realvideo 10 enhancements are in the encoder.

RV40 is somewhat of a prototype of H.264. It also shares the same internal structure as RealVideo 3, the main difference only in coding methods and codes used.

## Contents

## Technical Details

The following block diagram is lifted wholesale from the above whitepaper and gives a general overview of the general decoding flow for a RealVideo 4 data stream.

This actually is not very interesting as it describes many video codecs.

## Transforms

These are the 4x4 inverse transforms used in the RV40 decoding process. These transforms assume an input coefficient matrix laid out as:

c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15

### ITransform4x4

For each row [c0 c1 c2 c3]:

c0' = 13*c0 + 17*c1 + 13*c2 + 7*c3 c1' = 13*c0 + 7*c1 - 13*c2 - 17*c3 c2' = 13*c0 - 7*c1 - 13*c2 + 17*c3 c3' = 13*c0 - 17*c1 + 13*c2 - 7*c3

For each column [c0 c4 c8 c12]:

c0' = (13*c0 + 17*c4 + 13*c8 + c12 + 512) / 1024 c4' = (13*c0 + 7*c4 + 13*c8 - 17*c12 + 512) / 1024 c8' = (13*c0 - 7*c4 + 13*c8 + 17*c12 + 512) / 1024 c12'= (13*c0 - 17*c4 + 13*c8 + c12 + 512) / 1024

Note that if only the DC coefficient is non-zero, it is possible to simply compute n as:

n = (DC * 169 + 512) / 1024

and then populate the transformed matrix with n in all 16 positions.

### Intra16x16ITransform4x4

For each row [c0 c1 c2 c3]:

c0' = 13*c0 + 17*c1 + 13*c2 + 7*c3 c1' = 13*c0 + 7*c1 - 13*c2 - 17*c3 c2' = 13*c0 - 7*c1 - 13*c2 + 17*c3 c3' = 13*c0 - 17*c1 + 13*c2 - 7*c3

For each column [c0 c4 c8 c12]:

c0' = (624*c0 + 816*c4 + 624*c8 + 336*c12) / 32768 c4' = (624*c0 + 336*c4 - 624*c8 - 816*c12) / 32768 c8' = (624*c0 - 336*c4 - 624*c8 + 816*c12) / 32768 c12'= (624*c0 - 816*c4 + 624*c8 - 336*c12) / 32768

## Prediction

See H.264 Prediction for descriptions of RV40's prediction modes which are very similar to those found in H.264.