aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2012-10-17 11:51:01 +0200
committerAnton Khirnov <anton@khirnov.net>2013-03-08 07:36:15 +0100
commit7ecc2d403ce5c7b6ea3b1f368dccefd105209c7e (patch)
treecf6a6275abb9737b551b7cbea0b61b7935a7116b /libavcodec
parentad0c9f2d5d81e22207c6ccecc426bf7306acc327 (diff)
downloadffmpeg-7ecc2d403ce5c7b6ea3b1f368dccefd105209c7e.tar.gz
Move AVFrame from lavc to lavu.
Add AVBuffer-based reference counting API to it.
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/avcodec.h348
1 files changed, 1 insertions, 347 deletions
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index d7b58196a4..33f37e5e2f 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -32,6 +32,7 @@
#include "libavutil/buffer.h"
#include "libavutil/cpu.h"
#include "libavutil/dict.h"
+#include "libavutil/frame.h"
#include "libavutil/log.h"
#include "libavutil/pixfmt.h"
#include "libavutil/rational.h"
@@ -989,353 +990,6 @@ enum AVSideDataParamChangeFlags {
* @}
*/
-/**
- * This structure describes decoded (raw) audio or video data.
- *
- * AVFrame must be allocated using avcodec_alloc_frame() and freed with
- * avcodec_free_frame(). Note that this allocates only the AVFrame itself. The
- * buffers for the data must be managed through other means.
- *
- * AVFrame is typically allocated once and then reused multiple times to hold
- * different data (e.g. a single AVFrame to hold frames received from a
- * decoder). In such a case, avcodec_get_frame_defaults() should be used to
- * reset the frame to its original clean state before it is reused again.
- *
- * sizeof(AVFrame) is not a part of the public ABI, so new fields may be added
- * to the end with a minor bump.
- */
-typedef struct AVFrame {
-#define AV_NUM_DATA_POINTERS 8
- /**
- * pointer to the picture/channel planes.
- * This might be different from the first allocated byte
- * - encoding: Set by user
- * - decoding: set by AVCodecContext.get_buffer()
- */
- uint8_t *data[AV_NUM_DATA_POINTERS];
-
- /**
- * Size, in bytes, of the data for each picture/channel plane.
- *
- * For audio, only linesize[0] may be set. For planar audio, each channel
- * plane must be the same size.
- *
- * - encoding: Set by user
- * - decoding: set by AVCodecContext.get_buffer()
- */
- int linesize[AV_NUM_DATA_POINTERS];
-
- /**
- * pointers to the data planes/channels.
- *
- * For video, this should simply point to data[].
- *
- * For planar audio, each channel has a separate data pointer, and
- * linesize[0] contains the size of each channel buffer.
- * For packed audio, there is just one data pointer, and linesize[0]
- * contains the total size of the buffer for all channels.
- *
- * Note: Both data and extended_data will always be set by get_buffer(),
- * but for planar audio with more channels that can fit in data,
- * extended_data must be used by the decoder in order to access all
- * channels.
- *
- * encoding: set by user
- * decoding: set by AVCodecContext.get_buffer()
- */
- uint8_t **extended_data;
-
- /**
- * width and height of the video frame
- * - encoding: unused
- * - decoding: Read by user.
- */
- int width, height;
-
- /**
- * number of audio samples (per channel) described by this frame
- * - encoding: Set by user
- * - decoding: Set by libavcodec
- */
- int nb_samples;
-
- /**
- * format of the frame, -1 if unknown or unset
- * Values correspond to enum AVPixelFormat for video frames,
- * enum AVSampleFormat for audio)
- * - encoding: unused
- * - decoding: Read by user.
- */
- int format;
-
- /**
- * 1 -> keyframe, 0-> not
- * - encoding: Set by libavcodec.
- * - decoding: Set by libavcodec.
- */
- int key_frame;
-
- /**
- * Picture type of the frame, see ?_TYPE below.
- * - encoding: Set by libavcodec. for coded_picture (and set by user for input).
- * - decoding: Set by libavcodec.
- */
- enum AVPictureType pict_type;
-
- /**
- * pointer to the first allocated byte of the picture. Can be used in get_buffer/release_buffer.
- * This isn't used by libavcodec unless the default get/release_buffer() is used.
- * - encoding:
- * - decoding:
- */
- uint8_t *base[AV_NUM_DATA_POINTERS];
-
- /**
- * sample aspect ratio for the video frame, 0/1 if unknown/unspecified
- * - encoding: unused
- * - decoding: Read by user.
- */
- AVRational sample_aspect_ratio;
-
- /**
- * presentation timestamp in time_base units (time when frame should be shown to user)
- * If AV_NOPTS_VALUE then frame_rate = 1/time_base will be assumed.
- * - encoding: MUST be set by user.
- * - decoding: Set by libavcodec.
- */
- int64_t pts;
-
- /**
- * pts copied from the AVPacket that was decoded to produce this frame
- * - encoding: unused
- * - decoding: Read by user.
- */
- int64_t pkt_pts;
-
- /**
- * dts copied from the AVPacket that triggered returning this frame
- * - encoding: unused
- * - decoding: Read by user.
- */
- int64_t pkt_dts;
-
- /**
- * picture number in bitstream order
- * - encoding: set by
- * - decoding: Set by libavcodec.
- */
- int coded_picture_number;
- /**
- * picture number in display order
- * - encoding: set by
- * - decoding: Set by libavcodec.
- */
- int display_picture_number;
-
- /**
- * quality (between 1 (good) and FF_LAMBDA_MAX (bad))
- * - encoding: Set by libavcodec. for coded_picture (and set by user for input).
- * - decoding: Set by libavcodec.
- */
- int quality;
-
- /**
- * is this picture used as reference
- * The values for this are the same as the MpegEncContext.picture_structure
- * variable, that is 1->top field, 2->bottom field, 3->frame/both fields.
- * Set to 4 for delayed, non-reference frames.
- * - encoding: unused
- * - decoding: Set by libavcodec. (before get_buffer() call)).
- */
- int reference;
-
- /**
- * QP table
- * - encoding: unused
- * - decoding: Set by libavcodec.
- */
- int8_t *qscale_table;
- /**
- * QP store stride
- * - encoding: unused
- * - decoding: Set by libavcodec.
- */
- int qstride;
-
- /**
- *
- */
- int qscale_type;
-
- /**
- * mbskip_table[mb]>=1 if MB didn't change
- * stride= mb_width = (width+15)>>4
- * - encoding: unused
- * - decoding: Set by libavcodec.
- */
- uint8_t *mbskip_table;
-
- /**
- * motion vector table
- * @code
- * example:
- * int mv_sample_log2= 4 - motion_subsample_log2;
- * int mb_width= (width+15)>>4;
- * int mv_stride= (mb_width << mv_sample_log2) + 1;
- * motion_val[direction][x + y*mv_stride][0->mv_x, 1->mv_y];
- * @endcode
- * - encoding: Set by user.
- * - decoding: Set by libavcodec.
- */
- int16_t (*motion_val[2])[2];
-
- /**
- * macroblock type table
- * mb_type_base + mb_width + 2
- * - encoding: Set by user.
- * - decoding: Set by libavcodec.
- */
- uint32_t *mb_type;
-
- /**
- * DCT coefficients
- * - encoding: unused
- * - decoding: Set by libavcodec.
- */
- short *dct_coeff;
-
- /**
- * motion reference frame index
- * the order in which these are stored can depend on the codec.
- * - encoding: Set by user.
- * - decoding: Set by libavcodec.
- */
- int8_t *ref_index[2];
-
- /**
- * for some private data of the user
- * - encoding: unused
- * - decoding: Set by user.
- */
- void *opaque;
-
- /**
- * error
- * - encoding: Set by libavcodec. if flags&CODEC_FLAG_PSNR.
- * - decoding: unused
- */
- uint64_t error[AV_NUM_DATA_POINTERS];
-
- /**
- * type of the buffer (to keep track of who has to deallocate data[*])
- * - encoding: Set by the one who allocates it.
- * - decoding: Set by the one who allocates it.
- * Note: User allocated (direct rendering) & internal buffers cannot coexist currently.
- */
- int type;
-
- /**
- * When decoding, this signals how much the picture must be delayed.
- * extra_delay = repeat_pict / (2*fps)
- * - encoding: unused
- * - decoding: Set by libavcodec.
- */
- int repeat_pict;
-
- /**
- * The content of the picture is interlaced.
- * - encoding: Set by user.
- * - decoding: Set by libavcodec. (default 0)
- */
- int interlaced_frame;
-
- /**
- * If the content is interlaced, is top field displayed first.
- * - encoding: Set by user.
- * - decoding: Set by libavcodec.
- */
- int top_field_first;
-
- /**
- * Tell user application that palette has changed from previous frame.
- * - encoding: ??? (no palette-enabled encoder yet)
- * - decoding: Set by libavcodec. (default 0).
- */
- int palette_has_changed;
-
- /**
- * codec suggestion on buffer type if != 0
- * - encoding: unused
- * - decoding: Set by libavcodec. (before get_buffer() call)).
- */
- int buffer_hints;
-
- /**
- * Pan scan.
- * - encoding: Set by user.
- * - decoding: Set by libavcodec.
- */
- AVPanScan *pan_scan;
-
- /**
- * reordered opaque 64bit (generally an integer or a double precision float
- * PTS but can be anything).
- * The user sets AVCodecContext.reordered_opaque to represent the input at
- * that time,
- * the decoder reorders values as needed and sets AVFrame.reordered_opaque
- * to exactly one of the values provided by the user through AVCodecContext.reordered_opaque
- * @deprecated in favor of pkt_pts
- * - encoding: unused
- * - decoding: Read by user.
- */
- int64_t reordered_opaque;
-
-#if FF_API_AVFRAME_LAVC
- /**
- * @deprecated this field is unused
- */
- attribute_deprecated void *hwaccel_picture_private;
-#endif
-
- /**
- * the AVCodecContext which ff_thread_get_buffer() was last called on
- * - encoding: Set by libavcodec.
- * - decoding: Set by libavcodec.
- */
- struct AVCodecContext *owner;
-
- /**
- * used by multithreading to store frame-specific info
- * - encoding: Set by libavcodec.
- * - decoding: Set by libavcodec.
- */
- void *thread_opaque;
-
- /**
- * log2 of the size of the block which a single vector in motion_val represents:
- * (4->16x16, 3->8x8, 2-> 4x4, 1-> 2x2)
- * - encoding: unused
- * - decoding: Set by libavcodec.
- */
- uint8_t motion_subsample_log2;
-
- /**
- * Sample rate of the audio data.
- *
- * - encoding: unused
- * - decoding: set by get_buffer()
- */
- int sample_rate;
-
- /**
- * Channel layout of the audio data.
- *
- * - encoding: unused
- * - decoding: set by get_buffer()
- */
- uint64_t channel_layout;
-} AVFrame;
-
struct AVCodecInternal;
enum AVFieldOrder {