1 /*
2  * This file is part of FFmpeg.
3  *
4  * FFmpeg is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * FFmpeg is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with FFmpeg; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18 
19 /**
20  * @file
21  * @ingroup lavu_frame
22  * reference-counted frame API
23  */
24 module ffmpeg.libavutil.frame;
25 
26 import ffmpeg.libavutil.avutil;
27 import ffmpeg.libavutil.dict;
28 import ffmpeg.libavutil.buffer;
29 import ffmpeg.libavutil.rational;
30 import ffmpeg.libavutil.pixfmt;
31 
32 extern (C) @nogc nothrow:
33 
34 /**
35  * @defgroup lavu_frame AVFrame
36  * @ingroup lavu_data
37  *
38  * @{
39  * AVFrame is an abstraction for reference-counted raw multimedia data.
40  */
41 
42 enum AVFrameSideDataType
43 {
44     /**
45      * The data is the AVPanScan struct defined in libavcodec.
46      */
47     AV_FRAME_DATA_PANSCAN = 0,
48     /**
49      * ATSC A53 Part 4 Closed Captions.
50      * A53 CC bitstream is stored as uint8_t in AVFrameSideData.data.
51      * The number of bytes of CC data is AVFrameSideData.size.
52      */
53     AV_FRAME_DATA_A53_CC = 1,
54     /**
55      * Stereoscopic 3d metadata.
56      * The data is the AVStereo3D struct defined in libavutil/stereo3d.h.
57      */
58     AV_FRAME_DATA_STEREO3D = 2,
59     /**
60      * The data is the AVMatrixEncoding enum defined in libavutil/channel_layout.h.
61      */
62     AV_FRAME_DATA_MATRIXENCODING = 3,
63     /**
64      * Metadata relevant to a downmix procedure.
65      * The data is the AVDownmixInfo struct defined in libavutil/downmix_info.h.
66      */
67     AV_FRAME_DATA_DOWNMIX_INFO = 4,
68     /**
69      * ReplayGain information in the form of the AVReplayGain struct.
70      */
71     AV_FRAME_DATA_REPLAYGAIN = 5,
72     /**
73      * This side data contains a 3x3 transformation matrix describing an affine
74      * transformation that needs to be applied to the frame for correct
75      * presentation.
76      *
77      * See libavutil/display.h for a detailed description of the data.
78      */
79     AV_FRAME_DATA_DISPLAYMATRIX = 6,
80     /**
81      * Active Format Description data consisting of a single byte as specified
82      * in ETSI TS 101 154 using AVActiveFormatDescription enum.
83      */
84     AV_FRAME_DATA_AFD = 7,
85     /**
86      * Motion vectors exported by some codecs (on demand through the export_mvs
87      * flag set in the libavcodec AVCodecContext flags2 option).
88      * The data is the AVMotionVector struct defined in
89      * libavutil/motion_vector.h.
90      */
91     AV_FRAME_DATA_MOTION_VECTORS = 8,
92     /**
93      * Recommmends skipping the specified number of samples. This is exported
94      * only if the "skip_manual" AVOption is set in libavcodec.
95      * This has the same format as AV_PKT_DATA_SKIP_SAMPLES.
96      * @code
97      * u32le number of samples to skip from start of this packet
98      * u32le number of samples to skip from end of this packet
99      * u8    reason for start skip
100      * u8    reason for end   skip (0=padding silence, 1=convergence)
101      * @endcode
102      */
103     AV_FRAME_DATA_SKIP_SAMPLES = 9,
104     /**
105      * This side data must be associated with an audio frame and corresponds to
106      * enum AVAudioServiceType defined in avcodec.h.
107      */
108     AV_FRAME_DATA_AUDIO_SERVICE_TYPE = 10,
109     /**
110      * Mastering display metadata associated with a video frame. The payload is
111      * an AVMasteringDisplayMetadata type and contains information about the
112      * mastering display color volume.
113      */
114     AV_FRAME_DATA_MASTERING_DISPLAY_METADATA = 11,
115     /**
116      * The GOP timecode in 25 bit timecode format. Data format is 64-bit integer.
117      * This is set on the first frame of a GOP that has a temporal reference of 0.
118      */
119     AV_FRAME_DATA_GOP_TIMECODE = 12,
120 
121     /**
122      * The data represents the AVSphericalMapping structure defined in
123      * libavutil/spherical.h.
124      */
125     AV_FRAME_DATA_SPHERICAL = 13,
126 
127     /**
128      * Content light level (based on CTA-861.3). This payload contains data in
129      * the form of the AVContentLightMetadata struct.
130      */
131     AV_FRAME_DATA_CONTENT_LIGHT_LEVEL = 14,
132 
133     /**
134      * The data contains an ICC profile as an opaque octet buffer following the
135      * format described by ISO 15076-1 with an optional name defined in the
136      * metadata key entry "name".
137      */
138     AV_FRAME_DATA_ICC_PROFILE = 15,
139 
140     /**
141      * Implementation-specific description of the format of AV_FRAME_QP_TABLE_DATA.
142      * The contents of this side data are undocumented and internal; use
143      * av_frame_set_qp_table() and av_frame_get_qp_table() to access this in a
144      * meaningful way instead.
145      */
146     AV_FRAME_DATA_QP_TABLE_PROPERTIES = 16,
147 
148     /**
149      * Raw QP table data. Its format is described by
150      * AV_FRAME_DATA_QP_TABLE_PROPERTIES. Use av_frame_set_qp_table() and
151      * av_frame_get_qp_table() to access this instead.
152      */
153     AV_FRAME_DATA_QP_TABLE_DATA = 17,
154 
155     /**
156      * Timecode which conforms to SMPTE ST 12-1. The data is an array of 4 uint32_t
157      * where the first uint32_t describes how many (1-3) of the other timecodes are used.
158      * The timecode format is described in the documentation of av_timecode_get_smpte_from_framenum()
159      * function in libavutil/timecode.h.
160      */
161     AV_FRAME_DATA_S12M_TIMECODE = 18,
162 
163     /**
164      * HDR dynamic metadata associated with a video frame. The payload is
165      * an AVDynamicHDRPlus type and contains information for color
166      * volume transform - application 4 of SMPTE 2094-40:2016 standard.
167      */
168     AV_FRAME_DATA_DYNAMIC_HDR_PLUS = 19,
169 
170     /**
171      * Regions Of Interest, the data is an array of AVRegionOfInterest type, the number of
172      * array element is implied by AVFrameSideData.size / AVRegionOfInterest.self_size.
173      */
174     AV_FRAME_DATA_REGIONS_OF_INTEREST = 20,
175 
176     /**
177      * Encoding parameters for a video frame, as described by AVVideoEncParams.
178      */
179     AV_FRAME_DATA_VIDEO_ENC_PARAMS = 21,
180 
181     /**
182      * User data unregistered metadata associated with a video frame.
183      * This is the H.26[45] UDU SEI message, and shouldn't be used for any other purpose
184      * The data is stored as uint8_t in AVFrameSideData.data which is 16 bytes of
185      * uuid_iso_iec_11578 followed by AVFrameSideData.size - 16 bytes of user_data_payload_byte.
186      */
187     AV_FRAME_DATA_SEI_UNREGISTERED = 22,
188 
189     /**
190      * Film grain parameters for a frame, described by AVFilmGrainParams.
191      * Must be present for every frame which should have film grain applied.
192      */
193     AV_FRAME_DATA_FILM_GRAIN_PARAMS = 23
194 }
195 
196 enum AVActiveFormatDescription
197 {
198     AV_AFD_SAME = 8,
199     AV_AFD_4_3 = 9,
200     AV_AFD_16_9 = 10,
201     AV_AFD_14_9 = 11,
202     AV_AFD_4_3_SP_14_9 = 13,
203     AV_AFD_16_9_SP_14_9 = 14,
204     AV_AFD_SP_4_3 = 15
205 }
206 
207 /**
208  * Structure to hold side data for an AVFrame.
209  *
210  * sizeof(AVFrameSideData) is not a part of the public ABI, so new fields may be added
211  * to the end with a minor bump.
212  */
213 struct AVFrameSideData
214 {
215     AVFrameSideDataType type;
216     ubyte* data;
217 
218     int size;
219 
220     AVDictionary* metadata;
221     AVBufferRef* buf;
222 }
223 
224 /**
225  * Structure describing a single Region Of Interest.
226  *
227  * When multiple regions are defined in a single side-data block, they
228  * should be ordered from most to least important - some encoders are only
229  * capable of supporting a limited number of distinct regions, so will have
230  * to truncate the list.
231  *
232  * When overlapping regions are defined, the first region containing a given
233  * area of the frame applies.
234  */
235 struct AVRegionOfInterest
236 {
237     /**
238      * Must be set to the size of this data structure (that is,
239      * sizeof(AVRegionOfInterest)).
240      */
241     uint self_size;
242     /**
243      * Distance in pixels from the top edge of the frame to the top and
244      * bottom edges and from the left edge of the frame to the left and
245      * right edges of the rectangle defining this region of interest.
246      *
247      * The constraints on a region are encoder dependent, so the region
248      * actually affected may be slightly larger for alignment or other
249      * reasons.
250      */
251     int top;
252     int bottom;
253     int left;
254     int right;
255     /**
256      * Quantisation offset.
257      *
258      * Must be in the range -1 to +1.  A value of zero indicates no quality
259      * change.  A negative value asks for better quality (less quantisation),
260      * while a positive value asks for worse quality (greater quantisation).
261      *
262      * The range is calibrated so that the extreme values indicate the
263      * largest possible offset - if the rest of the frame is encoded with the
264      * worst possible quality, an offset of -1 indicates that this region
265      * should be encoded with the best possible quality anyway.  Intermediate
266      * values are then interpolated in some codec-dependent way.
267      *
268      * For example, in 10-bit H.264 the quantisation parameter varies between
269      * -12 and 51.  A typical qoffset value of -1/10 therefore indicates that
270      * this region should be encoded with a QP around one-tenth of the full
271      * range better than the rest of the frame.  So, if most of the frame
272      * were to be encoded with a QP of around 30, this region would get a QP
273      * of around 24 (an offset of approximately -1/10 * (51 - -12) = -6.3).
274      * An extreme value of -1 would indicate that this region should be
275      * encoded with the best possible quality regardless of the treatment of
276      * the rest of the frame - that is, should be encoded at a QP of -12.
277      */
278     AVRational qoffset;
279 }
280 
281 /**
282  * This structure describes decoded (raw) audio or video data.
283  *
284  * AVFrame must be allocated using av_frame_alloc(). Note that this only
285  * allocates the AVFrame itself, the buffers for the data must be managed
286  * through other means (see below).
287  * AVFrame must be freed with av_frame_free().
288  *
289  * AVFrame is typically allocated once and then reused multiple times to hold
290  * different data (e.g. a single AVFrame to hold frames received from a
291  * decoder). In such a case, av_frame_unref() will free any references held by
292  * the frame and reset it to its original clean state before it
293  * is reused again.
294  *
295  * The data described by an AVFrame is usually reference counted through the
296  * AVBuffer API. The underlying buffer references are stored in AVFrame.buf /
297  * AVFrame.extended_buf. An AVFrame is considered to be reference counted if at
298  * least one reference is set, i.e. if AVFrame.buf[0] != NULL. In such a case,
299  * every single data plane must be contained in one of the buffers in
300  * AVFrame.buf or AVFrame.extended_buf.
301  * There may be a single buffer for all the data, or one separate buffer for
302  * each plane, or anything in between.
303  *
304  * sizeof(AVFrame) is not a part of the public ABI, so new fields may be added
305  * to the end with a minor bump.
306  *
307  * Fields can be accessed through AVOptions, the name string used, matches the
308  * C structure field name for fields accessible through AVOptions. The AVClass
309  * for AVFrame can be obtained from avcodec_get_frame_class()
310  */
311 struct AVFrame
312 {
313     /**
314      * pointer to the picture/channel planes.
315      * This might be different from the first allocated byte
316      *
317      * Some decoders access areas outside 0,0 - width,height, please
318      * see avcodec_align_dimensions2(). Some filters and swscale can read
319      * up to 16 bytes beyond the planes, if these filters are to be used,
320      * then 16 extra bytes must be allocated.
321      *
322      * NOTE: Except for hwaccel formats, pointers not needed by the format
323      * MUST be set to NULL.
324      */
325     ubyte*[AV_NUM_DATA_POINTERS] data;
326 
327     /**
328      * For video, size in bytes of each picture line.
329      * For audio, size in bytes of each plane.
330      *
331      * For audio, only linesize[0] may be set. For planar audio, each channel
332      * plane must be the same size.
333      *
334      * For video the linesizes should be multiples of the CPUs alignment
335      * preference, this is 16 or 32 for modern desktop CPUs.
336      * Some code requires such alignment other code can be slower without
337      * correct alignment, for yet other it makes no difference.
338      *
339      * @note The linesize may be larger than the size of usable data -- there
340      * may be extra padding present for performance reasons.
341      */
342     int[AV_NUM_DATA_POINTERS] linesize;
343 
344     /**
345      * pointers to the data planes/channels.
346      *
347      * For video, this should simply point to data[].
348      *
349      * For planar audio, each channel has a separate data pointer, and
350      * linesize[0] contains the size of each channel buffer.
351      * For packed audio, there is just one data pointer, and linesize[0]
352      * contains the total size of the buffer for all channels.
353      *
354      * Note: Both data and extended_data should always be set in a valid frame,
355      * but for planar audio with more channels that can fit in data,
356      * extended_data must be used in order to access all channels.
357      */
358     ubyte** extended_data;
359 
360     /**
361      * @name Video dimensions
362      * Video frames only. The coded dimensions (in pixels) of the video frame,
363      * i.e. the size of the rectangle that contains some well-defined values.
364      *
365      * @note The part of the frame intended for display/presentation is further
366      * restricted by the @ref cropping "Cropping rectangle".
367      * @{
368      */
369     int width;
370     int height;
371     /**
372      * @}
373      */
374 
375     /**
376      * number of audio samples (per channel) described by this frame
377      */
378     int nb_samples;
379 
380     /**
381      * format of the frame, -1 if unknown or unset
382      * Values correspond to enum AVPixelFormat for video frames,
383      * enum AVSampleFormat for audio)
384      */
385     int format;
386 
387     /**
388      * 1 -> keyframe, 0-> not
389      */
390     int key_frame;
391 
392     /**
393      * Picture type of the frame.
394      */
395     AVPictureType pict_type;
396 
397     /**
398      * Sample aspect ratio for the video frame, 0/1 if unknown/unspecified.
399      */
400     AVRational sample_aspect_ratio;
401 
402     /**
403      * Presentation timestamp in time_base units (time when frame should be shown to user).
404      */
405     long pts;
406 
407     /**
408      * PTS copied from the AVPacket that was decoded to produce this frame.
409      * @deprecated use the pts field instead
410      */
411     long pkt_pts;
412 
413     /**
414      * DTS copied from the AVPacket that triggered returning this frame. (if frame threading isn't used)
415      * This is also the Presentation time of this AVFrame calculated from
416      * only AVPacket.dts values without pts values.
417      */
418     long pkt_dts;
419 
420     /**
421      * picture number in bitstream order
422      */
423     int coded_picture_number;
424     /**
425      * picture number in display order
426      */
427     int display_picture_number;
428 
429     /**
430      * quality (between 1 (good) and FF_LAMBDA_MAX (bad))
431      */
432     int quality;
433 
434     /**
435      * for some private data of the user
436      */
437     void* opaque;
438 
439     /**
440      * @deprecated unused
441      */
442     ulong[AV_NUM_DATA_POINTERS] error;
443 
444     /**
445      * When decoding, this signals how much the picture must be delayed.
446      * extra_delay = repeat_pict / (2*fps)
447      */
448     int repeat_pict;
449 
450     /**
451      * The content of the picture is interlaced.
452      */
453     int interlaced_frame;
454 
455     /**
456      * If the content is interlaced, is top field displayed first.
457      */
458     int top_field_first;
459 
460     /**
461      * Tell user application that palette has changed from previous frame.
462      */
463     int palette_has_changed;
464 
465     /**
466      * reordered opaque 64 bits (generally an integer or a double precision float
467      * PTS but can be anything).
468      * The user sets AVCodecContext.reordered_opaque to represent the input at
469      * that time,
470      * the decoder reorders values as needed and sets AVFrame.reordered_opaque
471      * to exactly one of the values provided by the user through AVCodecContext.reordered_opaque
472      */
473     long reordered_opaque;
474 
475     /**
476      * Sample rate of the audio data.
477      */
478     int sample_rate;
479 
480     /**
481      * Channel layout of the audio data.
482      */
483     ulong channel_layout;
484 
485     /**
486      * AVBuffer references backing the data for this frame. If all elements of
487      * this array are NULL, then this frame is not reference counted. This array
488      * must be filled contiguously -- if buf[i] is non-NULL then buf[j] must
489      * also be non-NULL for all j < i.
490      *
491      * There may be at most one AVBuffer per data plane, so for video this array
492      * always contains all the references. For planar audio with more than
493      * AV_NUM_DATA_POINTERS channels, there may be more buffers than can fit in
494      * this array. Then the extra AVBufferRef pointers are stored in the
495      * extended_buf array.
496      */
497     AVBufferRef*[AV_NUM_DATA_POINTERS] buf;
498 
499     /**
500      * For planar audio which requires more than AV_NUM_DATA_POINTERS
501      * AVBufferRef pointers, this array will hold all the references which
502      * cannot fit into AVFrame.buf.
503      *
504      * Note that this is different from AVFrame.extended_data, which always
505      * contains all the pointers. This array only contains the extra pointers,
506      * which cannot fit into AVFrame.buf.
507      *
508      * This array is always allocated using av_malloc() by whoever constructs
509      * the frame. It is freed in av_frame_unref().
510      */
511     AVBufferRef** extended_buf;
512     /**
513      * Number of elements in extended_buf.
514      */
515     int nb_extended_buf;
516 
517     AVFrameSideData** side_data;
518     int nb_side_data;
519 
520     /**
521      * @defgroup lavu_frame_flags AV_FRAME_FLAGS
522      * @ingroup lavu_frame
523      * Flags describing additional frame properties.
524      *
525      * @{
526      */
527 
528     /**
529      * The frame data may be corrupted, e.g. due to decoding errors.
530      */
531 
532     /**
533      * A flag to mark the frames which need to be decoded, but shouldn't be output.
534      */
535 
536     /**
537      * @}
538      */
539 
540     /**
541      * Frame flags, a combination of @ref lavu_frame_flags
542      */
543     int flags;
544 
545     /**
546      * MPEG vs JPEG YUV range.
547      * - encoding: Set by user
548      * - decoding: Set by libavcodec
549      */
550     AVColorRange color_range;
551 
552     AVColorPrimaries color_primaries;
553 
554     AVColorTransferCharacteristic color_trc;
555 
556     /**
557      * YUV colorspace type.
558      * - encoding: Set by user
559      * - decoding: Set by libavcodec
560      */
561     AVColorSpace colorspace;
562 
563     AVChromaLocation chroma_location;
564 
565     /**
566      * frame timestamp estimated using various heuristics, in stream time base
567      * - encoding: unused
568      * - decoding: set by libavcodec, read by user.
569      */
570     long best_effort_timestamp;
571 
572     /**
573      * reordered pos from the last AVPacket that has been input into the decoder
574      * - encoding: unused
575      * - decoding: Read by user.
576      */
577     long pkt_pos;
578 
579     /**
580      * duration of the corresponding packet, expressed in
581      * AVStream->time_base units, 0 if unknown.
582      * - encoding: unused
583      * - decoding: Read by user.
584      */
585     long pkt_duration;
586 
587     /**
588      * metadata.
589      * - encoding: Set by user.
590      * - decoding: Set by libavcodec.
591      */
592     AVDictionary* metadata;
593 
594     /**
595      * decode error flags of the frame, set to a combination of
596      * FF_DECODE_ERROR_xxx flags if the decoder produced a frame, but there
597      * were errors during the decoding.
598      * - encoding: unused
599      * - decoding: set by libavcodec, read by user.
600      */
601     int decode_error_flags;
602 
603     /**
604      * number of audio channels, only used for audio.
605      * - encoding: unused
606      * - decoding: Read by user.
607      */
608     int channels;
609 
610     /**
611      * size of the corresponding packet containing the compressed
612      * frame.
613      * It is set to a negative value if unknown.
614      * - encoding: unused
615      * - decoding: set by libavcodec, read by user.
616      */
617     int pkt_size;
618 
619     /**
620      * QP table
621      */
622     byte* qscale_table;
623     /**
624      * QP store stride
625      */
626     int qstride;
627 
628     int qscale_type;
629 
630     AVBufferRef* qp_table_buf;
631 
632     /**
633      * For hwaccel-format frames, this should be a reference to the
634      * AVHWFramesContext describing the frame.
635      */
636     AVBufferRef* hw_frames_ctx;
637 
638     /**
639      * AVBufferRef for free use by the API user. FFmpeg will never check the
640      * contents of the buffer ref. FFmpeg calls av_buffer_unref() on it when
641      * the frame is unreferenced. av_frame_copy_props() calls create a new
642      * reference with av_buffer_ref() for the target frame's opaque_ref field.
643      *
644      * This is unrelated to the opaque field, although it serves a similar
645      * purpose.
646      */
647     AVBufferRef* opaque_ref;
648 
649     /**
650      * @anchor cropping
651      * @name Cropping
652      * Video frames only. The number of pixels to discard from the the
653      * top/bottom/left/right border of the frame to obtain the sub-rectangle of
654      * the frame intended for presentation.
655      * @{
656      */
657     size_t crop_top;
658     size_t crop_bottom;
659     size_t crop_left;
660     size_t crop_right;
661     /**
662      * @}
663      */
664 
665     /**
666      * AVBufferRef for internal use by a single libav* library.
667      * Must not be used to transfer data between libraries.
668      * Has to be NULL when ownership of the frame leaves the respective library.
669      *
670      * Code outside the FFmpeg libs should never check or change the contents of the buffer ref.
671      *
672      * FFmpeg calls av_buffer_unref() on it when the frame is unreferenced.
673      * av_frame_copy_props() calls create a new reference with av_buffer_ref()
674      * for the target frame's private_ref field.
675      */
676     AVBufferRef* private_ref;
677 }
678 
679 enum AV_NUM_DATA_POINTERS = 8;
680 enum AV_FRAME_FLAG_CORRUPT = 1 << 0;
681 enum AV_FRAME_FLAG_DISCARD = 1 << 2;
682 enum FF_DECODE_ERROR_INVALID_BITSTREAM = 1;
683 enum FF_DECODE_ERROR_MISSING_REFERENCE = 2;
684 enum FF_DECODE_ERROR_CONCEALMENT_ACTIVE = 4;
685 enum FF_DECODE_ERROR_DECODE_SLICES = 8;
686 
687 /**
688  * Accessors for some AVFrame fields. These used to be provided for ABI
689  * compatibility, and do not need to be used anymore.
690  */
691 long av_frame_get_best_effort_timestamp (const(AVFrame)* frame);
692 void av_frame_set_best_effort_timestamp (AVFrame* frame, long val);
693 long av_frame_get_pkt_duration (const(AVFrame)* frame);
694 void av_frame_set_pkt_duration (AVFrame* frame, long val);
695 long av_frame_get_pkt_pos (const(AVFrame)* frame);
696 void av_frame_set_pkt_pos (AVFrame* frame, long val);
697 long av_frame_get_channel_layout (const(AVFrame)* frame);
698 void av_frame_set_channel_layout (AVFrame* frame, long val);
699 int av_frame_get_channels (const(AVFrame)* frame);
700 void av_frame_set_channels (AVFrame* frame, int val);
701 int av_frame_get_sample_rate (const(AVFrame)* frame);
702 void av_frame_set_sample_rate (AVFrame* frame, int val);
703 AVDictionary* av_frame_get_metadata (const(AVFrame)* frame);
704 void av_frame_set_metadata (AVFrame* frame, AVDictionary* val);
705 int av_frame_get_decode_error_flags (const(AVFrame)* frame);
706 void av_frame_set_decode_error_flags (AVFrame* frame, int val);
707 int av_frame_get_pkt_size (const(AVFrame)* frame);
708 void av_frame_set_pkt_size (AVFrame* frame, int val);
709 byte* av_frame_get_qp_table (AVFrame* f, int* stride, int* type);
710 int av_frame_set_qp_table (AVFrame* f, AVBufferRef* buf, int stride, int type);
711 
712 AVColorSpace av_frame_get_colorspace (const(AVFrame)* frame);
713 void av_frame_set_colorspace (AVFrame* frame, AVColorSpace val);
714 AVColorRange av_frame_get_color_range (const(AVFrame)* frame);
715 void av_frame_set_color_range (AVFrame* frame, AVColorRange val);
716 
717 /**
718  * Get the name of a colorspace.
719  * @return a static string identifying the colorspace; can be NULL.
720  */
721 const(char)* av_get_colorspace_name (AVColorSpace val);
722 
723 /**
724  * Allocate an AVFrame and set its fields to default values.  The resulting
725  * struct must be freed using av_frame_free().
726  *
727  * @return An AVFrame filled with default values or NULL on failure.
728  *
729  * @note this only allocates the AVFrame itself, not the data buffers. Those
730  * must be allocated through other means, e.g. with av_frame_get_buffer() or
731  * manually.
732  */
733 AVFrame* av_frame_alloc ();
734 
735 /**
736  * Free the frame and any dynamically allocated objects in it,
737  * e.g. extended_data. If the frame is reference counted, it will be
738  * unreferenced first.
739  *
740  * @param frame frame to be freed. The pointer will be set to NULL.
741  */
742 void av_frame_free (AVFrame** frame);
743 
744 /**
745  * Set up a new reference to the data described by the source frame.
746  *
747  * Copy frame properties from src to dst and create a new reference for each
748  * AVBufferRef from src.
749  *
750  * If src is not reference counted, new buffers are allocated and the data is
751  * copied.
752  *
753  * @warning: dst MUST have been either unreferenced with av_frame_unref(dst),
754  *           or newly allocated with av_frame_alloc() before calling this
755  *           function, or undefined behavior will occur.
756  *
757  * @return 0 on success, a negative AVERROR on error
758  */
759 int av_frame_ref (AVFrame* dst, const(AVFrame)* src);
760 
761 /**
762  * Create a new frame that references the same data as src.
763  *
764  * This is a shortcut for av_frame_alloc()+av_frame_ref().
765  *
766  * @return newly created AVFrame on success, NULL on error.
767  */
768 AVFrame* av_frame_clone (const(AVFrame)* src);
769 
770 /**
771  * Unreference all the buffers referenced by frame and reset the frame fields.
772  */
773 void av_frame_unref (AVFrame* frame);
774 
775 /**
776  * Move everything contained in src to dst and reset src.
777  *
778  * @warning: dst is not unreferenced, but directly overwritten without reading
779  *           or deallocating its contents. Call av_frame_unref(dst) manually
780  *           before calling this function to ensure that no memory is leaked.
781  */
782 void av_frame_move_ref (AVFrame* dst, AVFrame* src);
783 
784 /**
785  * Allocate new buffer(s) for audio or video data.
786  *
787  * The following fields must be set on frame before calling this function:
788  * - format (pixel format for video, sample format for audio)
789  * - width and height for video
790  * - nb_samples and channel_layout for audio
791  *
792  * This function will fill AVFrame.data and AVFrame.buf arrays and, if
793  * necessary, allocate and fill AVFrame.extended_data and AVFrame.extended_buf.
794  * For planar formats, one buffer will be allocated for each plane.
795  *
796  * @warning: if frame already has been allocated, calling this function will
797  *           leak memory. In addition, undefined behavior can occur in certain
798  *           cases.
799  *
800  * @param frame frame in which to store the new buffers.
801  * @param align Required buffer size alignment. If equal to 0, alignment will be
802  *              chosen automatically for the current CPU. It is highly
803  *              recommended to pass 0 here unless you know what you are doing.
804  *
805  * @return 0 on success, a negative AVERROR on error.
806  */
807 int av_frame_get_buffer (AVFrame* frame, int align_);
808 
809 /**
810  * Check if the frame data is writable.
811  *
812  * @return A positive value if the frame data is writable (which is true if and
813  * only if each of the underlying buffers has only one reference, namely the one
814  * stored in this frame). Return 0 otherwise.
815  *
816  * If 1 is returned the answer is valid until av_buffer_ref() is called on any
817  * of the underlying AVBufferRefs (e.g. through av_frame_ref() or directly).
818  *
819  * @see av_frame_make_writable(), av_buffer_is_writable()
820  */
821 int av_frame_is_writable (AVFrame* frame);
822 
823 /**
824  * Ensure that the frame data is writable, avoiding data copy if possible.
825  *
826  * Do nothing if the frame is writable, allocate new buffers and copy the data
827  * if it is not.
828  *
829  * @return 0 on success, a negative AVERROR on error.
830  *
831  * @see av_frame_is_writable(), av_buffer_is_writable(),
832  * av_buffer_make_writable()
833  */
834 int av_frame_make_writable (AVFrame* frame);
835 
836 /**
837  * Copy the frame data from src to dst.
838  *
839  * This function does not allocate anything, dst must be already initialized and
840  * allocated with the same parameters as src.
841  *
842  * This function only copies the frame data (i.e. the contents of the data /
843  * extended data arrays), not any other properties.
844  *
845  * @return >= 0 on success, a negative AVERROR on error.
846  */
847 int av_frame_copy (AVFrame* dst, const(AVFrame)* src);
848 
849 /**
850  * Copy only "metadata" fields from src to dst.
851  *
852  * Metadata for the purpose of this function are those fields that do not affect
853  * the data layout in the buffers.  E.g. pts, sample rate (for audio) or sample
854  * aspect ratio (for video), but not width/height or channel layout.
855  * Side data is also copied.
856  */
857 int av_frame_copy_props (AVFrame* dst, const(AVFrame)* src);
858 
859 /**
860  * Get the buffer reference a given data plane is stored in.
861  *
862  * @param plane index of the data plane of interest in frame->extended_data.
863  *
864  * @return the buffer reference that contains the plane or NULL if the input
865  * frame is not valid.
866  */
867 AVBufferRef* av_frame_get_plane_buffer (AVFrame* frame, int plane);
868 
869 /**
870  * Add a new side data to a frame.
871  *
872  * @param frame a frame to which the side data should be added
873  * @param type type of the added side data
874  * @param size size of the side data
875  *
876  * @return newly added side data on success, NULL on error
877  */
878 AVFrameSideData* av_frame_new_side_data (
879     AVFrame* frame,
880     AVFrameSideDataType type,
881     int size);
882 
883 /**
884  * Add a new side data to a frame from an existing AVBufferRef
885  *
886  * @param frame a frame to which the side data should be added
887  * @param type  the type of the added side data
888  * @param buf   an AVBufferRef to add as side data. The ownership of
889  *              the reference is transferred to the frame.
890  *
891  * @return newly added side data on success, NULL on error. On failure
892  *         the frame is unchanged and the AVBufferRef remains owned by
893  *         the caller.
894  */
895 AVFrameSideData* av_frame_new_side_data_from_buf (
896     AVFrame* frame,
897     AVFrameSideDataType type,
898     AVBufferRef* buf);
899 
900 /**
901  * @return a pointer to the side data of a given type on success, NULL if there
902  * is no side data with such type in this frame.
903  */
904 AVFrameSideData* av_frame_get_side_data (
905     const(AVFrame)* frame,
906     AVFrameSideDataType type);
907 
908 /**
909  * Remove and free all side data instances of the given type.
910  */
911 void av_frame_remove_side_data (AVFrame* frame, AVFrameSideDataType type);
912 
913 /**
914  * Flags for frame cropping.
915  */
916 enum
917 {
918     /**
919      * Apply the maximum possible cropping, even if it requires setting the
920      * AVFrame.data[] entries to unaligned pointers. Passing unaligned data
921      * to FFmpeg API is generally not allowed, and causes undefined behavior
922      * (such as crashes). You can pass unaligned data only to FFmpeg APIs that
923      * are explicitly documented to accept it. Use this flag only if you
924      * absolutely know what you are doing.
925      */
926     AV_FRAME_CROP_UNALIGNED = 1 << 0
927 }
928 
929 /**
930  * Crop the given video AVFrame according to its crop_left/crop_top/crop_right/
931  * crop_bottom fields. If cropping is successful, the function will adjust the
932  * data pointers and the width/height fields, and set the crop fields to 0.
933  *
934  * In all cases, the cropping boundaries will be rounded to the inherent
935  * alignment of the pixel format. In some cases, such as for opaque hwaccel
936  * formats, the left/top cropping is ignored. The crop fields are set to 0 even
937  * if the cropping was rounded or ignored.
938  *
939  * @param frame the frame which should be cropped
940  * @param flags Some combination of AV_FRAME_CROP_* flags, or 0.
941  *
942  * @return >= 0 on success, a negative AVERROR on error. If the cropping fields
943  * were invalid, AVERROR(ERANGE) is returned, and nothing is changed.
944  */
945 int av_frame_apply_cropping (AVFrame* frame, int flags);
946 
947 /**
948  * @return a string identifying the side data type
949  */
950 const(char)* av_frame_side_data_name (AVFrameSideDataType type);
951 
952 /**
953  * @}
954  */
955 
956 /* AVUTIL_FRAME_H */