draft-ietf-cellar-ffv1-v4-01.txt   draft-ietf-cellar-ffv1-v4-02.txt 
cellar M. Niedermayer cellar M. Niedermayer
Internet-Draft Internet-Draft
Intended status: Standards Track D. Rice Intended status: Standards Track D. Rice
Expires: January 28, 2019 Expires: March 29, 2019
J. Martinez J. Martinez
July 27, 2018 September 25, 2018
FFV1 Video Coding Format Version 4 FFV1 Video Coding Format Version 4
draft-ietf-cellar-ffv1-v4-01 draft-ietf-cellar-ffv1-v4-02
Abstract Abstract
This document defines FFV1, a lossless intra-frame video encoding This document defines FFV1, a lossless intra-frame video encoding
format. FFV1 is designed to efficiently compress video data in a format. FFV1 is designed to efficiently compress video data in a
variety of pixel formats. Compared to uncompressed video, FFV1 variety of pixel formats. Compared to uncompressed video, FFV1
offers storage compression, frame fixity, and self-description, which offers storage compression, frame fixity, and self-description, which
makes FFV1 useful as a preservation or intermediate video format. makes FFV1 useful as a preservation or intermediate video format.
Status of This Memo Status of This Memo
skipping to change at page 1, line 36 skipping to change at page 1, line 36
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/. Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on January 28, 2019. This Internet-Draft will expire on March 29, 2019.
Copyright Notice Copyright Notice
Copyright (c) 2018 IETF Trust and the persons identified as the Copyright (c) 2018 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(https://trustee.ietf.org/license-info) in effect on the date of (https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
skipping to change at page 16, line 41 skipping to change at page 16, line 41
226,227,227,229,229,230,231,232,234,234,235,236,237,238,239,240, 226,227,227,229,229,230,231,232,234,234,235,236,237,238,239,240,
241,242,243,244,245,246,247,248,248, 0, 0, 0, 0, 0, 0, 0, 241,242,243,244,245,246,247,248,248, 0, 0, 0, 0, 0, 0, 0,
3.8.1.6. Alternative State Transition Table 3.8.1.6. Alternative State Transition Table
The alternative state transition table has been built using iterative The alternative state transition table has been built using iterative
minimization of frame sizes and generally performs better than the minimization of frame sizes and generally performs better than the
default. To use it, the coder_type MUST be set to 2 and the default. To use it, the coder_type MUST be set to 2 and the
difference to the default MUST be stored in the parameters. The difference to the default MUST be stored in the "Parameters", see
reference implementation of FFV1 in FFmpeg uses this table by default Section 4.1. The reference implementation of FFV1 in FFmpeg uses
at the time of this writing when Range coding is used. this table by default at the time of this writing when Range coding
is used.
0, 10, 10, 10, 10, 16, 16, 16, 28, 16, 16, 29, 42, 49, 20, 49, 0, 10, 10, 10, 10, 16, 16, 16, 28, 16, 16, 29, 42, 49, 20, 49,
59, 25, 26, 26, 27, 31, 33, 33, 33, 34, 34, 37, 67, 38, 39, 39, 59, 25, 26, 26, 27, 31, 33, 33, 33, 34, 34, 37, 67, 38, 39, 39,
40, 40, 41, 79, 43, 44, 45, 45, 48, 48, 64, 50, 51, 52, 88, 52, 40, 40, 41, 79, 43, 44, 45, 45, 48, 48, 64, 50, 51, 52, 88, 52,
53, 74, 55, 57, 58, 58, 74, 60,101, 61, 62, 84, 66, 66, 68, 69, 53, 74, 55, 57, 58, 58, 74, 60,101, 61, 62, 84, 66, 66, 68, 69,
87, 82, 71, 97, 73, 73, 82, 75,111, 77, 94, 78, 87, 81, 83, 97, 87, 82, 71, 97, 73, 73, 82, 75,111, 77, 94, 78, 87, 81, 83, 97,
skipping to change at page 21, line 4 skipping to change at page 20, line 33
"frame_pixel_width" is defined as "Frame" width in pixels. "frame_pixel_width" is defined as "Frame" width in pixels.
"frame_pixel_height" is defined as "Frame" height in pixels. "frame_pixel_height" is defined as "Frame" height in pixels.
Default values at the decoder initialization phase: Default values at the decoder initialization phase:
"ConfigurationRecordIsPresent" is set to 0. "ConfigurationRecordIsPresent" is set to 0.
4.1. Parameters 4.1. Parameters
The "Parameters" section contains significant characteristics used
for all instances of "Frame". The pseudo-code below describes the
contents of the bitstream.
pseudo-code | type pseudo-code | type
--------------------------------------------------------------|----- --------------------------------------------------------------|-----
Parameters( ) { | Parameters( ) { |
version | ur version | ur
if (version >= 3) | if (version >= 3) |
micro_version | ur micro_version | ur
coder_type | ur coder_type | ur
if (coder_type > 1) | if (coder_type > 1) |
for (i = 1; i < 256; i++) | for (i = 1; i < 256; i++) |
state_transition_delta[ i ] | sr state_transition_delta[ i ] | sr
skipping to change at page 26, line 31 skipping to change at page 26, line 31
| 0 | Frames are independent or dependent (keyframes and non | | 0 | Frames are independent or dependent (keyframes and non |
| | keyframes) | | | keyframes) |
| 1 | Frames are independent (keyframes only) | | 1 | Frames are independent (keyframes only) |
| Other | reserved for future use | | Other | reserved for future use |
+-------+-----------------------------------------------------------+ +-------+-----------------------------------------------------------+
4.2. Configuration Record 4.2. Configuration Record
In the case of a FFV1 bitstream with "version >= 3", a "Configuration In the case of a FFV1 bitstream with "version >= 3", a "Configuration
Record" is stored in the underlying "Container", at the track header Record" is stored in the underlying "Container", at the track header
level. It contains the parameters used for all instances of "Frame". level. It contains the "Parameters" used for all instances of
The size of the "Configuration Record", "NumBytes", is supplied by "Frame". The size of the "Configuration Record", "NumBytes", is
the underlying "Container". supplied by the underlying "Container".
pseudo-code | type pseudo-code | type
--------------------------------------------------------------|----- --------------------------------------------------------------|-----
ConfigurationRecord( NumBytes ) { | ConfigurationRecord( NumBytes ) { |
ConfigurationRecordIsPresent = 1 | ConfigurationRecordIsPresent = 1 |
Parameters( ) | Parameters( ) |
while( remaining_bits_in_bitstream( NumBytes ) > 32 ) | while( remaining_bits_in_bitstream( NumBytes ) > 32 ) |
reserved_for_future_use | u(1) reserved_for_future_use | u(1)
configuration_record_crc_parity | u(32) configuration_record_crc_parity | u(32)
} | } |
skipping to change at page 28, line 18 skipping to change at page 28, line 18
versions 2 or less, the Matroska "CodecPrivate" Element SHOULD NOT be versions 2 or less, the Matroska "CodecPrivate" Element SHOULD NOT be
used. For FFV1 versions 3 or greater, the Matroska "CodecPrivate" used. For FFV1 versions 3 or greater, the Matroska "CodecPrivate"
Element MUST contain the FFV1 "Configuration Record" structure and no Element MUST contain the FFV1 "Configuration Record" structure and no
other data. See [Matroska] for more information about elements. other data. See [Matroska] for more information about elements.
"NumBytes" is defined as the "Element Data Size" of the "NumBytes" is defined as the "Element Data Size" of the
"CodecPrivate" Element. "CodecPrivate" Element.
4.3. Frame 4.3. Frame
A "Frame" consists of the keyframe field, parameters (if version A "Frame" consists of the keyframe field, "Parameters" (if version
<=1), and a sequence of independent slices. <=1), and a sequence of independent slices.
pseudo-code | type pseudo-code | type
--------------------------------------------------------------|----- --------------------------------------------------------------|-----
Frame( NumBytes ) { | Frame( NumBytes ) { |
keyframe | br keyframe | br
if (keyframe && !ConfigurationRecordIsPresent | if (keyframe && !ConfigurationRecordIsPresent |
Parameters( ) | Parameters( ) |
while ( remaining_bits_in_bitstream( NumBytes ) ) | while ( remaining_bits_in_bitstream( NumBytes ) ) |
Slice( ) | Slice( ) |
skipping to change at page 39, line 44 skipping to change at page 39, line 44
See <https://github.com/FFmpeg/FFV1/commits/master> See <https://github.com/FFmpeg/FFV1/commits/master>
11. References 11. References
11.1. Normative References 11.1. Normative References
[I-D.ietf-cellar-ffv1] [I-D.ietf-cellar-ffv1]
Niedermayer, M., Rice, D., and J. Martinez, "FFV1 Video Niedermayer, M., Rice, D., and J. Martinez, "FFV1 Video
Coding Format Version 0, 1, and 3", draft-ietf-cellar- Coding Format Version 0, 1, and 3", draft-ietf-cellar-
ffv1-03 (work in progress), June 2018. ffv1-04 (work in progress), July 2018.
[ISO.15444-1.2016] [ISO.15444-1.2016]
International Organization for Standardization, International Organization for Standardization,
"Information technology -- JPEG 2000 image coding system: "Information technology -- JPEG 2000 image coding system:
Core coding system", October 2016. Core coding system", October 2016.
[ISO.9899.1990] [ISO.9899.1990]
International Organization for Standardization, International Organization for Standardization,
"Programming languages - C", ISO Standard 9899, 1990. "Programming languages - C", ISO Standard 9899, 1990.
 End of changes. 9 change blocks. 
12 lines changed or deleted 18 lines changed or added

This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/