Skip to content
Snippets Groups Projects
Commit 9af7e804 authored by Luca Barbato's avatar Luca Barbato
Browse files

lavc: Clarify the behaviour of dimension and format context fields

The AVCodecContext width, height, coded_width, coded_height and format
are used mainly as decoding hints and they get internally overwritten
during the data parsing stage.

Do not assume they match the last AVFrame provided by
avcodec_decode_video2 and assimilated functions since multi-threading
and other frame reordering might make those values to refer to frames
that will be outputted in the future.

CC: libav-stable@libav.org
parent 03ca6d70
No related branches found
No related tags found
No related merge requests found
...@@ -1217,21 +1217,31 @@ typedef struct AVCodecContext { ...@@ -1217,21 +1217,31 @@ typedef struct AVCodecContext {
/* video only */ /* video only */
/** /**
* picture width / height. * picture width / height.
*
* @note Those fields may not match the values of the last
* AVFrame outputted by avcodec_decode_video2 due frame
* reordering.
*
* - encoding: MUST be set by user. * - encoding: MUST be set by user.
* - decoding: May be set by the user before opening the decoder if known e.g. * - decoding: May be set by the user before opening the decoder if known e.g.
* from the container. Some decoders will require the dimensions * from the container. Some decoders will require the dimensions
* to be set by the caller. During decoding, the decoder may * to be set by the caller. During decoding, the decoder may
* overwrite those values as required. * overwrite those values as required while parsing the data.
*/ */
int width, height; int width, height;
/** /**
* Bitstream width / height, may be different from width/height e.g. when * Bitstream width / height, may be different from width/height e.g. when
* the decoded frame is cropped before being output. * the decoded frame is cropped before being output.
*
* @note Those field may not match the value of the last
* AVFrame outputted by avcodec_decode_video2 due frame
* reordering.
*
* - encoding: unused * - encoding: unused
* - decoding: May be set by the user before opening the decoder if known * - decoding: May be set by the user before opening the decoder if known
* e.g. from the container. During decoding, the decoder may * e.g. from the container. During decoding, the decoder may
* overwrite those values as required. * overwrite those values as required while parsing the data.
*/ */
int coded_width, coded_height; int coded_width, coded_height;
...@@ -1250,8 +1260,14 @@ typedef struct AVCodecContext { ...@@ -1250,8 +1260,14 @@ typedef struct AVCodecContext {
* Pixel format, see AV_PIX_FMT_xxx. * Pixel format, see AV_PIX_FMT_xxx.
* May be set by the demuxer if known from headers. * May be set by the demuxer if known from headers.
* May be overriden by the decoder if it knows better. * May be overriden by the decoder if it knows better.
*
* @note This field may not match the value of the last
* AVFrame outputted by avcodec_decode_video2 due frame
* reordering.
*
* - encoding: Set by user. * - encoding: Set by user.
* - decoding: Set by user if known, overridden by libavcodec if known * - decoding: Set by user if known, overridden by libavcodec while
* parsing the data.
*/ */
enum AVPixelFormat pix_fmt; enum AVPixelFormat pix_fmt;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment