RealVideo 4: Difference between revisions
m (Update samples link) |
|||
(8 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
* FourCC: rv40 | * FourCC: rv40 | ||
* Company: [[Real]] | * 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/ | * 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. | 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 | 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. | ||
== 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. | |||
[[Image:Realvideo4-block-diagram.png]] | |||
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. | |||
[[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.
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.