Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4349 Serge 1
/*
2
 *
3
 * This file is part of FFmpeg.
4
 *
5
 * FFmpeg is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU Lesser General Public
7
 * License as published by the Free Software Foundation; either
8
 * version 2.1 of the License, or (at your option) any later version.
9
 *
10
 * FFmpeg is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13
 * Lesser General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU Lesser General Public
16
 * License along with FFmpeg; if not, write to the Free Software
17
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
 */
19
 
20
#ifndef AVUTIL_FRAME_H
21
#define AVUTIL_FRAME_H
22
 
23
#include 
24
 
25
#include "libavcodec/version.h"
26
 
27
#include "avutil.h"
28
#include "buffer.h"
29
#include "dict.h"
30
#include "rational.h"
31
#include "samplefmt.h"
32
 
33
enum AVColorSpace{
34
    AVCOL_SPC_RGB         = 0,
35
    AVCOL_SPC_BT709       = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B
36
    AVCOL_SPC_UNSPECIFIED = 2,
37
    AVCOL_SPC_FCC         = 4,
38
    AVCOL_SPC_BT470BG     = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601
39
    AVCOL_SPC_SMPTE170M   = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / functionally identical to above
40
    AVCOL_SPC_SMPTE240M   = 7,
41
    AVCOL_SPC_YCOCG       = 8, ///< Used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16
42
    AVCOL_SPC_NB             , ///< Not part of ABI
43
};
44
#define AVCOL_SPC_YCGCO AVCOL_SPC_YCOCG
45
 
46
enum AVColorRange{
47
    AVCOL_RANGE_UNSPECIFIED = 0,
48
    AVCOL_RANGE_MPEG        = 1, ///< the normal 219*2^(n-8) "MPEG" YUV ranges
49
    AVCOL_RANGE_JPEG        = 2, ///< the normal     2^n-1   "JPEG" YUV ranges
50
    AVCOL_RANGE_NB             , ///< Not part of ABI
51
};
52
 
53
enum AVFrameSideDataType {
54
    /**
55
     * The data is the AVPanScan struct defined in libavcodec.
56
     */
57
    AV_FRAME_DATA_PANSCAN,
58
};
59
 
60
typedef struct AVFrameSideData {
61
    enum AVFrameSideDataType type;
62
    uint8_t *data;
63
    int      size;
64
    AVDictionary *metadata;
65
} AVFrameSideData;
66
 
67
/**
68
 * This structure describes decoded (raw) audio or video data.
69
 *
70
 * AVFrame must be allocated using av_frame_alloc(). Note that this only
71
 * allocates the AVFrame itself, the buffers for the data must be managed
72
 * through other means (see below).
73
 * AVFrame must be freed with av_frame_free().
74
 *
75
 * AVFrame is typically allocated once and then reused multiple times to hold
76
 * different data (e.g. a single AVFrame to hold frames received from a
77
 * decoder). In such a case, av_frame_unref() will free any references held by
78
 * the frame and reset it to its original clean state before it
79
 * is reused again.
80
 *
81
 * The data described by an AVFrame is usually reference counted through the
82
 * AVBuffer API. The underlying buffer references are stored in AVFrame.buf /
83
 * AVFrame.extended_buf. An AVFrame is considered to be reference counted if at
84
 * least one reference is set, i.e. if AVFrame.buf[0] != NULL. In such a case,
85
 * every single data plane must be contained in one of the buffers in
86
 * AVFrame.buf or AVFrame.extended_buf.
87
 * There may be a single buffer for all the data, or one separate buffer for
88
 * each plane, or anything in between.
89
 *
90
 * sizeof(AVFrame) is not a part of the public ABI, so new fields may be added
91
 * to the end with a minor bump.
92
 * Similarly fields that are marked as to be only accessed by
93
 * av_opt_ptr() can be reordered. This allows 2 forks to add fields
94
 * without breaking compatibility with each other.
95
 */
96
typedef struct AVFrame {
97
#define AV_NUM_DATA_POINTERS 8
98
    /**
99
     * pointer to the picture/channel planes.
100
     * This might be different from the first allocated byte
101
     *
102
     * Some decoders access areas outside 0,0 - width,height, please
103
     * see avcodec_align_dimensions2(). Some filters and swscale can read
104
     * up to 16 bytes beyond the planes, if these filters are to be used,
105
     * then 16 extra bytes must be allocated.
106
     */
107
    uint8_t *data[AV_NUM_DATA_POINTERS];
108
 
109
    /**
110
     * For video, size in bytes of each picture line.
111
     * For audio, size in bytes of each plane.
112
     *
113
     * For audio, only linesize[0] may be set. For planar audio, each channel
114
     * plane must be the same size.
115
     *
116
     * For video the linesizes should be multiplies of the CPUs alignment
117
     * preference, this is 16 or 32 for modern desktop CPUs.
118
     * Some code requires such alignment other code can be slower without
119
     * correct alignment, for yet other it makes no difference.
120
     *
121
     * @note The linesize may be larger than the size of usable data -- there
122
     * may be extra padding present for performance reasons.
123
     */
124
    int linesize[AV_NUM_DATA_POINTERS];
125
 
126
    /**
127
     * pointers to the data planes/channels.
128
     *
129
     * For video, this should simply point to data[].
130
     *
131
     * For planar audio, each channel has a separate data pointer, and
132
     * linesize[0] contains the size of each channel buffer.
133
     * For packed audio, there is just one data pointer, and linesize[0]
134
     * contains the total size of the buffer for all channels.
135
     *
136
     * Note: Both data and extended_data should always be set in a valid frame,
137
     * but for planar audio with more channels that can fit in data,
138
     * extended_data must be used in order to access all channels.
139
     */
140
    uint8_t **extended_data;
141
 
142
    /**
143
     * width and height of the video frame
144
     */
145
    int width, height;
146
 
147
    /**
148
     * number of audio samples (per channel) described by this frame
149
     */
150
    int nb_samples;
151
 
152
    /**
153
     * format of the frame, -1 if unknown or unset
154
     * Values correspond to enum AVPixelFormat for video frames,
155
     * enum AVSampleFormat for audio)
156
     */
157
    int format;
158
 
159
    /**
160
     * 1 -> keyframe, 0-> not
161
     */
162
    int key_frame;
163
 
164
    /**
165
     * Picture type of the frame.
166
     */
167
    enum AVPictureType pict_type;
168
 
169
#if FF_API_AVFRAME_LAVC
170
    attribute_deprecated
171
    uint8_t *base[AV_NUM_DATA_POINTERS];
172
#endif
173
 
174
    /**
175
     * Sample aspect ratio for the video frame, 0/1 if unknown/unspecified.
176
     */
177
    AVRational sample_aspect_ratio;
178
 
179
    /**
180
     * Presentation timestamp in time_base units (time when frame should be shown to user).
181
     */
182
    int64_t pts;
183
 
184
    /**
185
     * PTS copied from the AVPacket that was decoded to produce this frame.
186
     */
187
    int64_t pkt_pts;
188
 
189
    /**
190
     * DTS copied from the AVPacket that triggered returning this frame. (if frame threading isnt used)
191
     * This is also the Presentation time of this AVFrame calculated from
192
     * only AVPacket.dts values without pts values.
193
     */
194
    int64_t pkt_dts;
195
 
196
    /**
197
     * picture number in bitstream order
198
     */
199
    int coded_picture_number;
200
    /**
201
     * picture number in display order
202
     */
203
    int display_picture_number;
204
 
205
    /**
206
     * quality (between 1 (good) and FF_LAMBDA_MAX (bad))
207
     */
208
    int quality;
209
 
210
#if FF_API_AVFRAME_LAVC
211
    attribute_deprecated
212
    int reference;
213
 
214
    /**
215
     * QP table
216
     */
217
    attribute_deprecated
218
    int8_t *qscale_table;
219
    /**
220
     * QP store stride
221
     */
222
    attribute_deprecated
223
    int qstride;
224
 
225
    attribute_deprecated
226
    int qscale_type;
227
 
228
    /**
229
     * mbskip_table[mb]>=1 if MB didn't change
230
     * stride= mb_width = (width+15)>>4
231
     */
232
    attribute_deprecated
233
    uint8_t *mbskip_table;
234
 
235
    /**
236
     * motion vector table
237
     * @code
238
     * example:
239
     * int mv_sample_log2= 4 - motion_subsample_log2;
240
     * int mb_width= (width+15)>>4;
241
     * int mv_stride= (mb_width << mv_sample_log2) + 1;
242
     * motion_val[direction][x + y*mv_stride][0->mv_x, 1->mv_y];
243
     * @endcode
244
     */
245
    attribute_deprecated
246
    int16_t (*motion_val[2])[2];
247
 
248
    /**
249
     * macroblock type table
250
     * mb_type_base + mb_width + 2
251
     */
252
    attribute_deprecated
253
    uint32_t *mb_type;
254
 
255
    /**
256
     * DCT coefficients
257
     */
258
    attribute_deprecated
259
    short *dct_coeff;
260
 
261
    /**
262
     * motion reference frame index
263
     * the order in which these are stored can depend on the codec.
264
     */
265
    attribute_deprecated
266
    int8_t *ref_index[2];
267
#endif
268
 
269
    /**
270
     * for some private data of the user
271
     */
272
    void *opaque;
273
 
274
    /**
275
     * error
276
     */
277
    uint64_t error[AV_NUM_DATA_POINTERS];
278
 
279
#if FF_API_AVFRAME_LAVC
280
    attribute_deprecated
281
    int type;
282
#endif
283
 
284
    /**
285
     * When decoding, this signals how much the picture must be delayed.
286
     * extra_delay = repeat_pict / (2*fps)
287
     */
288
    int repeat_pict;
289
 
290
    /**
291
     * The content of the picture is interlaced.
292
     */
293
    int interlaced_frame;
294
 
295
    /**
296
     * If the content is interlaced, is top field displayed first.
297
     */
298
    int top_field_first;
299
 
300
    /**
301
     * Tell user application that palette has changed from previous frame.
302
     */
303
    int palette_has_changed;
304
 
305
#if FF_API_AVFRAME_LAVC
306
    attribute_deprecated
307
    int buffer_hints;
308
 
309
    /**
310
     * Pan scan.
311
     */
312
    attribute_deprecated
313
    struct AVPanScan *pan_scan;
314
#endif
315
 
316
    /**
317
     * reordered opaque 64bit (generally an integer or a double precision float
318
     * PTS but can be anything).
319
     * The user sets AVCodecContext.reordered_opaque to represent the input at
320
     * that time,
321
     * the decoder reorders values as needed and sets AVFrame.reordered_opaque
322
     * to exactly one of the values provided by the user through AVCodecContext.reordered_opaque
323
     * @deprecated in favor of pkt_pts
324
     */
325
    int64_t reordered_opaque;
326
 
327
#if FF_API_AVFRAME_LAVC
328
    /**
329
     * @deprecated this field is unused
330
     */
331
    attribute_deprecated void *hwaccel_picture_private;
332
 
333
    attribute_deprecated
334
    struct AVCodecContext *owner;
335
    attribute_deprecated
336
    void *thread_opaque;
337
 
338
    /**
339
     * log2 of the size of the block which a single vector in motion_val represents:
340
     * (4->16x16, 3->8x8, 2-> 4x4, 1-> 2x2)
341
     */
342
    attribute_deprecated
343
    uint8_t motion_subsample_log2;
344
#endif
345
 
346
    /**
347
     * Sample rate of the audio data.
348
     */
349
    int sample_rate;
350
 
351
    /**
352
     * Channel layout of the audio data.
353
     */
354
    uint64_t channel_layout;
355
 
356
    /**
357
     * AVBuffer references backing the data for this frame. If all elements of
358
     * this array are NULL, then this frame is not reference counted.
359
     *
360
     * There may be at most one AVBuffer per data plane, so for video this array
361
     * always contains all the references. For planar audio with more than
362
     * AV_NUM_DATA_POINTERS channels, there may be more buffers than can fit in
363
     * this array. Then the extra AVBufferRef pointers are stored in the
364
     * extended_buf array.
365
     */
366
    AVBufferRef *buf[AV_NUM_DATA_POINTERS];
367
 
368
    /**
369
     * For planar audio which requires more than AV_NUM_DATA_POINTERS
370
     * AVBufferRef pointers, this array will hold all the references which
371
     * cannot fit into AVFrame.buf.
372
     *
373
     * Note that this is different from AVFrame.extended_data, which always
374
     * contains all the pointers. This array only contains the extra pointers,
375
     * which cannot fit into AVFrame.buf.
376
     *
377
     * This array is always allocated using av_malloc() by whoever constructs
378
     * the frame. It is freed in av_frame_unref().
379
     */
380
    AVBufferRef **extended_buf;
381
    /**
382
     * Number of elements in extended_buf.
383
     */
384
    int        nb_extended_buf;
385
 
386
    AVFrameSideData **side_data;
387
    int            nb_side_data;
388
 
389
    /**
390
     * frame timestamp estimated using various heuristics, in stream time base
391
     * Code outside libavcodec should access this field using:
392
     * av_frame_get_best_effort_timestamp(frame)
393
     * - encoding: unused
394
     * - decoding: set by libavcodec, read by user.
395
     */
396
    int64_t best_effort_timestamp;
397
 
398
    /**
399
     * reordered pos from the last AVPacket that has been input into the decoder
400
     * Code outside libavcodec should access this field using:
401
     * av_frame_get_pkt_pos(frame)
402
     * - encoding: unused
403
     * - decoding: Read by user.
404
     */
405
    int64_t pkt_pos;
406
 
407
    /**
408
     * duration of the corresponding packet, expressed in
409
     * AVStream->time_base units, 0 if unknown.
410
     * Code outside libavcodec should access this field using:
411
     * av_frame_get_pkt_duration(frame)
412
     * - encoding: unused
413
     * - decoding: Read by user.
414
     */
415
    int64_t pkt_duration;
416
 
417
    /**
418
     * metadata.
419
     * Code outside libavcodec should access this field using:
420
     * av_frame_get_metadata(frame)
421
     * - encoding: Set by user.
422
     * - decoding: Set by libavcodec.
423
     */
424
    AVDictionary *metadata;
425
 
426
    /**
427
     * decode error flags of the frame, set to a combination of
428
     * FF_DECODE_ERROR_xxx flags if the decoder produced a frame, but there
429
     * were errors during the decoding.
430
     * Code outside libavcodec should access this field using:
431
     * av_frame_get_decode_error_flags(frame)
432
     * - encoding: unused
433
     * - decoding: set by libavcodec, read by user.
434
     */
435
    int decode_error_flags;
436
#define FF_DECODE_ERROR_INVALID_BITSTREAM   1
437
#define FF_DECODE_ERROR_MISSING_REFERENCE   2
438
 
439
    /**
440
     * number of audio channels, only used for audio.
441
     * Code outside libavcodec should access this field using:
442
     * av_frame_get_channels(frame)
443
     * - encoding: unused
444
     * - decoding: Read by user.
445
     */
446
    int channels;
447
 
448
    /**
449
     * size of the corresponding packet containing the compressed
450
     * frame. It must be accessed using av_frame_get_pkt_size() and
451
     * av_frame_set_pkt_size().
452
     * It is set to a negative value if unknown.
453
     * - encoding: unused
454
     * - decoding: set by libavcodec, read by user.
455
     */
456
    int pkt_size;
457
 
458
    /**
459
     * YUV colorspace type.
460
     * It must be accessed using av_frame_get_colorspace() and
461
     * av_frame_set_colorspace().
462
     * - encoding: Set by user
463
     * - decoding: Set by libavcodec
464
     */
465
    enum AVColorSpace colorspace;
466
 
467
    /**
468
     * MPEG vs JPEG YUV range.
469
     * It must be accessed using av_frame_get_color_range() and
470
     * av_frame_set_color_range().
471
     * - encoding: Set by user
472
     * - decoding: Set by libavcodec
473
     */
474
    enum AVColorRange color_range;
475
 
476
 
477
    /**
478
     * Not to be accessed directly from outside libavutil
479
     */
480
    AVBufferRef *qp_table_buf;
481
} AVFrame;
482
 
483
/**
484
 * Accessors for some AVFrame fields.
485
 * The position of these field in the structure is not part of the ABI,
486
 * they should not be accessed directly outside libavcodec.
487
 */
488
int64_t av_frame_get_best_effort_timestamp(const AVFrame *frame);
489
void    av_frame_set_best_effort_timestamp(AVFrame *frame, int64_t val);
490
int64_t av_frame_get_pkt_duration         (const AVFrame *frame);
491
void    av_frame_set_pkt_duration         (AVFrame *frame, int64_t val);
492
int64_t av_frame_get_pkt_pos              (const AVFrame *frame);
493
void    av_frame_set_pkt_pos              (AVFrame *frame, int64_t val);
494
int64_t av_frame_get_channel_layout       (const AVFrame *frame);
495
void    av_frame_set_channel_layout       (AVFrame *frame, int64_t val);
496
int     av_frame_get_channels             (const AVFrame *frame);
497
void    av_frame_set_channels             (AVFrame *frame, int     val);
498
int     av_frame_get_sample_rate          (const AVFrame *frame);
499
void    av_frame_set_sample_rate          (AVFrame *frame, int     val);
500
AVDictionary *av_frame_get_metadata       (const AVFrame *frame);
501
void          av_frame_set_metadata       (AVFrame *frame, AVDictionary *val);
502
int     av_frame_get_decode_error_flags   (const AVFrame *frame);
503
void    av_frame_set_decode_error_flags   (AVFrame *frame, int     val);
504
int     av_frame_get_pkt_size(const AVFrame *frame);
505
void    av_frame_set_pkt_size(AVFrame *frame, int val);
506
AVDictionary **avpriv_frame_get_metadatap(AVFrame *frame);
507
int8_t *av_frame_get_qp_table(AVFrame *f, int *stride, int *type);
508
int av_frame_set_qp_table(AVFrame *f, AVBufferRef *buf, int stride, int type);
509
enum AVColorSpace av_frame_get_colorspace(const AVFrame *frame);
510
void    av_frame_set_colorspace(AVFrame *frame, enum AVColorSpace val);
511
enum AVColorRange av_frame_get_color_range(const AVFrame *frame);
512
void    av_frame_set_color_range(AVFrame *frame, enum AVColorRange val);
513
 
514
/**
515
 * Get the name of a colorspace.
516
 * @return a static string identifying the colorspace; can be NULL.
517
 */
518
const char *av_get_colorspace_name(enum AVColorSpace val);
519
 
520
/**
521
 * Allocate an AVFrame and set its fields to default values.  The resulting
522
 * struct must be freed using av_frame_free().
523
 *
524
 * @return An AVFrame filled with default values or NULL on failure.
525
 *
526
 * @note this only allocates the AVFrame itself, not the data buffers. Those
527
 * must be allocated through other means, e.g. with av_frame_get_buffer() or
528
 * manually.
529
 */
530
AVFrame *av_frame_alloc(void);
531
 
532
/**
533
 * Free the frame and any dynamically allocated objects in it,
534
 * e.g. extended_data. If the frame is reference counted, it will be
535
 * unreferenced first.
536
 *
537
 * @param frame frame to be freed. The pointer will be set to NULL.
538
 */
539
void av_frame_free(AVFrame **frame);
540
 
541
/**
542
 * Setup a new reference to the data described by a given frame.
543
 *
544
 * Copy frame properties from src to dst and create a new reference for each
545
 * AVBufferRef from src.
546
 *
547
 * If src is not reference counted, new buffers are allocated and the data is
548
 * copied.
549
 *
550
 * @return 0 on success, a negative AVERROR on error
551
 */
552
int av_frame_ref(AVFrame *dst, AVFrame *src);
553
 
554
/**
555
 * Create a new frame that references the same data as src.
556
 *
557
 * This is a shortcut for av_frame_alloc()+av_frame_ref().
558
 *
559
 * @return newly created AVFrame on success, NULL on error.
560
 */
561
AVFrame *av_frame_clone(AVFrame *src);
562
 
563
/**
564
 * Unreference all the buffers referenced by frame and reset the frame fields.
565
 */
566
void av_frame_unref(AVFrame *frame);
567
 
568
/**
569
 * Move everythnig contained in src to dst and reset src.
570
 */
571
void av_frame_move_ref(AVFrame *dst, AVFrame *src);
572
 
573
/**
574
 * Allocate new buffer(s) for audio or video data.
575
 *
576
 * The following fields must be set on frame before calling this function:
577
 * - format (pixel format for video, sample format for audio)
578
 * - width and height for video
579
 * - nb_samples and channel_layout for audio
580
 *
581
 * This function will fill AVFrame.data and AVFrame.buf arrays and, if
582
 * necessary, allocate and fill AVFrame.extended_data and AVFrame.extended_buf.
583
 * For planar formats, one buffer will be allocated for each plane.
584
 *
585
 * @param frame frame in which to store the new buffers.
586
 * @param align required buffer size alignment
587
 *
588
 * @return 0 on success, a negative AVERROR on error.
589
 */
590
int av_frame_get_buffer(AVFrame *frame, int align);
591
 
592
/**
593
 * Check if the frame data is writable.
594
 *
595
 * @return A positive value if the frame data is writable (which is true if and
596
 * only if each of the underlying buffers has only one reference, namely the one
597
 * stored in this frame). Return 0 otherwise.
598
 *
599
 * If 1 is returned the answer is valid until av_buffer_ref() is called on any
600
 * of the underlying AVBufferRefs (e.g. through av_frame_ref() or directly).
601
 *
602
 * @see av_frame_make_writable(), av_buffer_is_writable()
603
 */
604
int av_frame_is_writable(AVFrame *frame);
605
 
606
/**
607
 * Ensure that the frame data is writable, avoiding data copy if possible.
608
 *
609
 * Do nothing if the frame is writable, allocate new buffers and copy the data
610
 * if it is not.
611
 *
612
 * @return 0 on success, a negative AVERROR on error.
613
 *
614
 * @see av_frame_is_writable(), av_buffer_is_writable(),
615
 * av_buffer_make_writable()
616
 */
617
int av_frame_make_writable(AVFrame *frame);
618
 
619
/**
620
 * Copy only "metadata" fields from src to dst.
621
 *
622
 * Metadata for the purpose of this function are those fields that do not affect
623
 * the data layout in the buffers.  E.g. pts, sample rate (for audio) or sample
624
 * aspect ratio (for video), but not width/height or channel layout.
625
 * Side data is also copied.
626
 */
627
int av_frame_copy_props(AVFrame *dst, const AVFrame *src);
628
 
629
/**
630
 * Get the buffer reference a given data plane is stored in.
631
 *
632
 * @param plane index of the data plane of interest in frame->extended_data.
633
 *
634
 * @return the buffer reference that contains the plane or NULL if the input
635
 * frame is not valid.
636
 */
637
AVBufferRef *av_frame_get_plane_buffer(AVFrame *frame, int plane);
638
 
639
/**
640
 * Add a new side data to a frame.
641
 *
642
 * @param frame a frame to which the side data should be added
643
 * @param type type of the added side data
644
 * @param size size of the side data
645
 *
646
 * @return newly added side data on success, NULL on error
647
 */
648
AVFrameSideData *av_frame_new_side_data(AVFrame *frame,
649
                                        enum AVFrameSideDataType type,
650
                                        int size);
651
 
652
/**
653
 * @return a pointer to the side data of a given type on success, NULL if there
654
 * is no side data with such type in this frame.
655
 */
656
AVFrameSideData *av_frame_get_side_data(const AVFrame *frame,
657
                                        enum AVFrameSideDataType type);
658
 
659
#endif /* AVUTIL_FRAME_H */