FFmpeg
dv_profile.h
Go to the documentation of this file.
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 #ifndef AVCODEC_DV_PROFILE_H
20 #define AVCODEC_DV_PROFILE_H
21 
22 #include <stdint.h>
23 
24 #include "libavutil/pixfmt.h"
25 #include "libavutil/rational.h"
26 #include "avcodec.h"
27 
28 /* minimum number of bytes to read from a DV stream in order to
29  * determine the profile */
30 #define DV_PROFILE_BYTES (6 * 80) /* 6 DIF blocks */
31 
32 
33 /*
34  * AVDVProfile is used to express the differences between various
35  * DV flavors. For now it's primarily used for differentiating
36  * 525/60 and 625/50, but the plans are to use it for various
37  * DV specs as well (e.g. SMPTE314M vs. IEC 61834).
38  */
39 typedef struct AVDVProfile {
40  int dsf; /* value of the dsf in the DV header */
41  int video_stype; /* stype for VAUX source pack */
42  int frame_size; /* total size of one frame in bytes */
43  int difseg_size; /* number of DIF segments per DIF channel */
44  int n_difchan; /* number of DIF channels per frame */
45  AVRational time_base; /* 1/framerate */
46  int ltc_divisor; /* FPS from the LTS standpoint */
47  int height; /* picture height in pixels */
48  int width; /* picture width in pixels */
49  AVRational sar[2]; /* sample aspect ratios for 4:3 and 16:9 */
50  enum AVPixelFormat pix_fmt; /* picture pixel format */
51  int bpm; /* blocks per macroblock */
52  const uint8_t *block_sizes; /* AC block sizes, in bits */
53  int audio_stride; /* size of audio_shuffle table */
54  int audio_min_samples[3]; /* min amount of audio samples */
55  /* for 48kHz, 44.1kHz and 32kHz */
56  int audio_samples_dist[5]; /* how many samples are supposed to be */
57  /* in each frame in a 5 frames window */
58  const uint8_t (*audio_shuffle)[9]; /* PCM shuffling table */
59 } AVDVProfile;
60 
61 /**
62  * Get a DV profile for the provided compressed frame.
63  *
64  * @param sys the profile used for the previous frame, may be NULL
65  * @param frame the compressed data buffer
66  * @param buf_size size of the buffer in bytes
67  * @return the DV profile for the supplied data or NULL on failure
68  */
70  const uint8_t *frame, unsigned buf_size);
71 
72 /**
73  * Get a DV profile for the provided stream parameters.
74  */
76 
77 /**
78  * Get a DV profile for the provided stream parameters.
79  * The frame rate is used as a best-effort parameter.
80  */
82 
83 #endif /* AVCODEC_DV_PROFILE_H */
AVPixelFormat
AVPixelFormat
Pixel format.
Definition: pixfmt.h:64
rational.h
AVDVProfile::sar
AVRational sar[2]
Definition: dv_profile.h:49
av_dv_codec_profile
const AVDVProfile * av_dv_codec_profile(int width, int height, enum AVPixelFormat pix_fmt)
Get a DV profile for the provided stream parameters.
Definition: dv_profile.c:304
AVDVProfile::difseg_size
int difseg_size
Definition: dv_profile.h:43
AVDVProfile::dsf
int dsf
Definition: dv_profile.h:40
width
#define width
AVDVProfile::pix_fmt
enum AVPixelFormat pix_fmt
Definition: dv_profile.h:50
pix_fmt
static enum AVPixelFormat pix_fmt
Definition: demuxing_decoding.c:40
AVDVProfile::n_difchan
int n_difchan
Definition: dv_profile.h:44
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
av_dv_frame_profile
const AVDVProfile * av_dv_frame_profile(const AVDVProfile *sys, const uint8_t *frame, unsigned buf_size)
Get a DV profile for the provided compressed frame.
Definition: dv_profile.c:298
AVDVProfile::audio_stride
int audio_stride
Definition: dv_profile.h:53
AVDVProfile::height
int height
Definition: dv_profile.h:47
height
#define height
AVDVProfile::block_sizes
const uint8_t * block_sizes
Definition: dv_profile.h:52
AVDVProfile::audio_samples_dist
int audio_samples_dist[5]
Definition: dv_profile.h:56
AVDVProfile::ltc_divisor
int ltc_divisor
Definition: dv_profile.h:46
AVDVProfile::width
int width
Definition: dv_profile.h:48
uint8_t
uint8_t
Definition: audio_convert.c:194
avcodec.h
pixfmt.h
frame
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
Definition: filter_design.txt:264
AVDVProfile::video_stype
int video_stype
Definition: dv_profile.h:41
AVDVProfile::audio_min_samples
int audio_min_samples[3]
Definition: dv_profile.h:54
AVDVProfile
Definition: dv_profile.h:39
AVDVProfile::time_base
AVRational time_base
Definition: dv_profile.h:45
AVDVProfile::audio_shuffle
const uint8_t(* audio_shuffle)[9]
Definition: dv_profile.h:58
AVDVProfile::bpm
int bpm
Definition: dv_profile.h:51
av_dv_codec_profile2
const AVDVProfile * av_dv_codec_profile2(int width, int height, enum AVPixelFormat pix_fmt, AVRational frame_rate)
Get a DV profile for the provided stream parameters.
Definition: dv_profile.c:314
AVDVProfile::frame_size
int frame_size
Definition: dv_profile.h:42