FFmpeg
5.1.6
demuxing_decoding.c
/*
* Copyright (c) 2012 Stefano Sabatini
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
/**
* @file
* Demuxing and decoding example.
*
* Show how to use the libavformat and libavcodec API to demux and
* decode audio and video data.
* @example demuxing_decoding.c
*/
#include <
libavutil/imgutils.h
>
#include <
libavutil/samplefmt.h
>
#include <
libavutil/timestamp.h
>
#include <
libavcodec/avcodec.h
>
#include <
libavformat/avformat.h
>
static
AVFormatContext
*
fmt_ctx
= NULL;
static
AVCodecContext
*
video_dec_ctx
= NULL, *
audio_dec_ctx
;
static
int
width
,
height
;
static
enum
AVPixelFormat
pix_fmt
;
static
AVStream
*
video_stream
= NULL, *
audio_stream
= NULL;
static
const
char
*
src_filename
= NULL;
static
const
char
*
video_dst_filename
= NULL;
static
const
char
*
audio_dst_filename
= NULL;
static
FILE *
video_dst_file
= NULL;
static
FILE *
audio_dst_file
= NULL;
static
uint8_t *
video_dst_data
[4] = {NULL};
static
int
video_dst_linesize
[4];
static
int
video_dst_bufsize
;
static
int
video_stream_idx
= -1,
audio_stream_idx
= -1;
static
AVFrame
*
frame
= NULL;
static
AVPacket
*
pkt
= NULL;
static
int
video_frame_count
= 0;
static
int
audio_frame_count
= 0;
static
int
output_video_frame
(
AVFrame
*
frame
)
{
if
(
frame
->
width
!=
width
||
frame
->
height
!=
height
||
frame
->
format
!=
pix_fmt
) {
/* To handle this change, one could call av_image_alloc again and
* decode the following frames into another rawvideo file. */
fprintf(stderr,
"Error: Width, height and pixel format have to be "
"constant in a rawvideo file, but the width, height or "
"pixel format of the input video changed:\n"
"old: width = %d, height = %d, format = %s\n"
"new: width = %d, height = %d, format = %s\n"
,
width
,
height
,
av_get_pix_fmt_name
(
pix_fmt
),
frame
->
width
,
frame
->
height
,
av_get_pix_fmt_name
(
frame
->
format
));
return
-1;
}
printf(
"video_frame n:%d coded_n:%d\n"
,
video_frame_count
++,
frame
->
coded_picture_number
);
/* copy decoded frame to destination buffer:
* this is required since rawvideo expects non aligned data */
av_image_copy
(
video_dst_data
,
video_dst_linesize
,
(
const
uint8_t **)(
frame
->
data
),
frame
->
linesize
,
pix_fmt
,
width
,
height
);
/* write to rawvideo file */
fwrite(
video_dst_data
[0], 1,
video_dst_bufsize
,
video_dst_file
);
return
0;
}
static
int
output_audio_frame
(
AVFrame
*
frame
)
{
size_t
unpadded_linesize =
frame
->
nb_samples
*
av_get_bytes_per_sample
(
frame
->
format
);
printf(
"audio_frame n:%d nb_samples:%d pts:%s\n"
,
audio_frame_count
++,
frame
->
nb_samples
,
av_ts2timestr
(
frame
->
pts
, &
audio_dec_ctx
->
time_base
));
/* Write the raw audio data samples of the first plane. This works
* fine for packed formats (e.g. AV_SAMPLE_FMT_S16). However,
* most audio decoders output planar audio, which uses a separate
* plane of audio samples for each channel (e.g. AV_SAMPLE_FMT_S16P).
* In other words, this code will write only the first audio channel
* in these cases.
* You should use libswresample or libavfilter to convert the frame
* to packed data. */
fwrite(
frame
->
extended_data
[0], 1, unpadded_linesize,
audio_dst_file
);
return
0;
}
static
int
decode_packet
(
AVCodecContext
*dec,
const
AVPacket
*
pkt
)
{
int
ret = 0;
// submit the packet to the decoder
ret =
avcodec_send_packet
(dec,
pkt
);
if
(ret < 0) {
fprintf(stderr,
"Error submitting a packet for decoding (%s)\n"
,
av_err2str
(ret));
return
ret;
}
// get all the available frames from the decoder
while
(ret >= 0) {
ret =
avcodec_receive_frame
(dec,
frame
);
if
(ret < 0) {
// those two return values are special and mean there is no output
// frame available, but there were no errors during decoding
if
(ret ==
AVERROR_EOF
|| ret ==
AVERROR
(EAGAIN))
return
0;
fprintf(stderr,
"Error during decoding (%s)\n"
,
av_err2str
(ret));
return
ret;
}
// write the frame data to output file
if
(dec->
codec
->
type
==
AVMEDIA_TYPE_VIDEO
)
ret =
output_video_frame
(
frame
);
else
ret =
output_audio_frame
(
frame
);
av_frame_unref
(
frame
);
}
return
ret;
}
static
int
open_codec_context
(
int
*stream_idx,
AVCodecContext
**
dec_ctx
,
AVFormatContext
*
fmt_ctx
,
enum
AVMediaType
type)
{
int
ret, stream_index;
AVStream
*st;
const
AVCodec
*dec = NULL;
ret =
av_find_best_stream
(
fmt_ctx
, type, -1, -1, NULL, 0);
if
(ret < 0) {
fprintf(stderr,
"Could not find %s stream in input file '%s'\n"
,
av_get_media_type_string
(type),
src_filename
);
return
ret;
}
else
{
stream_index = ret;
st =
fmt_ctx
->
streams
[stream_index];
/* find decoder for the stream */
dec =
avcodec_find_decoder
(st->
codecpar
->
codec_id
);
if
(!dec) {
fprintf(stderr,
"Failed to find %s codec\n"
,
av_get_media_type_string
(type));
return
AVERROR
(EINVAL);
}
/* Allocate a codec context for the decoder */
*
dec_ctx
=
avcodec_alloc_context3
(dec);
if
(!*
dec_ctx
) {
fprintf(stderr,
"Failed to allocate the %s codec context\n"
,
av_get_media_type_string
(type));
return
AVERROR
(ENOMEM);
}
/* Copy codec parameters from input stream to output codec context */
if
((ret =
avcodec_parameters_to_context
(*
dec_ctx
, st->
codecpar
)) < 0) {
fprintf(stderr,
"Failed to copy %s codec parameters to decoder context\n"
,
av_get_media_type_string
(type));
return
ret;
}
/* Init the decoders */
if
((ret =
avcodec_open2
(*
dec_ctx
, dec, NULL)) < 0) {
fprintf(stderr,
"Failed to open %s codec\n"
,
av_get_media_type_string
(type));
return
ret;
}
*stream_idx = stream_index;
}
return
0;
}
static
int
get_format_from_sample_fmt
(
const
char
**fmt,
enum
AVSampleFormat
sample_fmt)
{
int
i;
struct
sample_fmt_entry {
enum
AVSampleFormat
sample_fmt;
const
char
*fmt_be, *fmt_le;
} sample_fmt_entries[] = {
{
AV_SAMPLE_FMT_U8
,
"u8"
,
"u8"
},
{
AV_SAMPLE_FMT_S16
,
"s16be"
,
"s16le"
},
{
AV_SAMPLE_FMT_S32
,
"s32be"
,
"s32le"
},
{
AV_SAMPLE_FMT_FLT
,
"f32be"
,
"f32le"
},
{
AV_SAMPLE_FMT_DBL
,
"f64be"
,
"f64le"
},
};
*fmt = NULL;
for
(i = 0; i <
FF_ARRAY_ELEMS
(sample_fmt_entries); i++) {
struct
sample_fmt_entry *entry = &sample_fmt_entries[i];
if
(sample_fmt == entry->sample_fmt) {
*fmt =
AV_NE
(entry->fmt_be, entry->fmt_le);
return
0;
}
}
fprintf(stderr,
"sample format %s is not supported as output format\n"
,
av_get_sample_fmt_name
(sample_fmt));
return
-1;
}
int
main
(
int
argc,
char
**argv)
{
int
ret = 0;
if
(argc != 4) {
fprintf(stderr,
"usage: %s input_file video_output_file audio_output_file\n"
"API example program to show how to read frames from an input file.\n"
"This program reads frames from a file, decodes them, and writes decoded\n"
"video frames to a rawvideo file named video_output_file, and decoded\n"
"audio frames to a rawaudio file named audio_output_file.\n"
,
argv[0]);
exit(1);
}
src_filename
= argv[1];
video_dst_filename
= argv[2];
audio_dst_filename
= argv[3];
/* open input file, and allocate format context */
if
(
avformat_open_input
(&
fmt_ctx
,
src_filename
, NULL, NULL) < 0) {
fprintf(stderr,
"Could not open source file %s\n"
,
src_filename
);
exit(1);
}
/* retrieve stream information */
if
(
avformat_find_stream_info
(
fmt_ctx
, NULL) < 0) {
fprintf(stderr,
"Could not find stream information\n"
);
exit(1);
}
if
(
open_codec_context
(&
video_stream_idx
, &
video_dec_ctx
,
fmt_ctx
,
AVMEDIA_TYPE_VIDEO
) >= 0) {
video_stream
=
fmt_ctx
->
streams
[
video_stream_idx
];
video_dst_file
= fopen(
video_dst_filename
,
"wb"
);
if
(!
video_dst_file
) {
fprintf(stderr,
"Could not open destination file %s\n"
,
video_dst_filename
);
ret = 1;
goto
end;
}
/* allocate image where the decoded image will be put */
width
=
video_dec_ctx
->
width
;
height
=
video_dec_ctx
->
height
;
pix_fmt
=
video_dec_ctx
->
pix_fmt
;
ret =
av_image_alloc
(
video_dst_data
,
video_dst_linesize
,
width
,
height
,
pix_fmt
, 1);
if
(ret < 0) {
fprintf(stderr,
"Could not allocate raw video buffer\n"
);
goto
end;
}
video_dst_bufsize
= ret;
}
if
(
open_codec_context
(&
audio_stream_idx
, &
audio_dec_ctx
,
fmt_ctx
,
AVMEDIA_TYPE_AUDIO
) >= 0) {
audio_stream
=
fmt_ctx
->
streams
[
audio_stream_idx
];
audio_dst_file
= fopen(
audio_dst_filename
,
"wb"
);
if
(!
audio_dst_file
) {
fprintf(stderr,
"Could not open destination file %s\n"
,
audio_dst_filename
);
ret = 1;
goto
end;
}
}
/* dump input information to stderr */
av_dump_format
(
fmt_ctx
, 0,
src_filename
, 0);
if
(!
audio_stream
&& !
video_stream
) {
fprintf(stderr,
"Could not find audio or video stream in the input, aborting\n"
);
ret = 1;
goto
end;
}
frame
=
av_frame_alloc
();
if
(!
frame
) {
fprintf(stderr,
"Could not allocate frame\n"
);
ret =
AVERROR
(ENOMEM);
goto
end;
}
pkt
=
av_packet_alloc
();
if
(!
pkt
) {
fprintf(stderr,
"Could not allocate packet\n"
);
ret =
AVERROR
(ENOMEM);
goto
end;
}
if
(
video_stream
)
printf(
"Demuxing video from file '%s' into '%s'\n"
,
src_filename
,
video_dst_filename
);
if
(
audio_stream
)
printf(
"Demuxing audio from file '%s' into '%s'\n"
,
src_filename
,
audio_dst_filename
);
/* read frames from the file */
while
(
av_read_frame
(
fmt_ctx
,
pkt
) >= 0) {
// check if the packet belongs to a stream we are interested in, otherwise
// skip it
if
(
pkt
->
stream_index
==
video_stream_idx
)
ret =
decode_packet
(
video_dec_ctx
,
pkt
);
else
if
(
pkt
->
stream_index
==
audio_stream_idx
)
ret =
decode_packet
(
audio_dec_ctx
,
pkt
);
av_packet_unref
(
pkt
);
if
(ret < 0)
break
;
}
/* flush the decoders */
if
(
video_dec_ctx
)
decode_packet
(
video_dec_ctx
, NULL);
if
(
audio_dec_ctx
)
decode_packet
(
audio_dec_ctx
, NULL);
printf(
"Demuxing succeeded.\n"
);
if
(
video_stream
) {
printf(
"Play the output video file with the command:\n"
"ffplay -f rawvideo -pix_fmt %s -video_size %dx%d %s\n"
,
av_get_pix_fmt_name
(
pix_fmt
),
width
,
height
,
video_dst_filename
);
}
if
(
audio_stream
) {
enum
AVSampleFormat
sfmt =
audio_dec_ctx
->
sample_fmt
;
int
n_channels =
audio_dec_ctx
->
ch_layout
.
nb_channels
;
const
char
*fmt;
if
(
av_sample_fmt_is_planar
(sfmt)) {
const
char
*packed =
av_get_sample_fmt_name
(sfmt);
printf(
"Warning: the sample format the decoder produced is planar "
"(%s). This example will output the first channel only.\n"
,
packed ? packed :
"?"
);
sfmt =
av_get_packed_sample_fmt
(sfmt);
n_channels = 1;
}
if
((ret =
get_format_from_sample_fmt
(&fmt, sfmt)) < 0)
goto
end;
printf(
"Play the output audio file with the command:\n"
"ffplay -f %s -ac %d -ar %d %s\n"
,
fmt, n_channels,
audio_dec_ctx
->
sample_rate
,
audio_dst_filename
);
}
end:
avcodec_free_context
(&
video_dec_ctx
);
avcodec_free_context
(&
audio_dec_ctx
);
avformat_close_input
(&
fmt_ctx
);
if
(
video_dst_file
)
fclose(
video_dst_file
);
if
(
audio_dst_file
)
fclose(
audio_dst_file
);
av_packet_free
(&
pkt
);
av_frame_free
(&
frame
);
av_free
(
video_dst_data
[0]);
return
ret < 0;
}
avcodec.h
Libavcodec external API header.
avformat.h
Main libavformat public API header.
video_dst_data
static uint8_t * video_dst_data[4]
Definition:
demuxing_decoding.c:49
audio_stream_idx
static int audio_stream_idx
Definition:
demuxing_decoding.c:53
width
static int width
Definition:
demuxing_decoding.c:40
output_audio_frame
static int output_audio_frame(AVFrame *frame)
Definition:
demuxing_decoding.c:90
video_dec_ctx
static AVCodecContext * video_dec_ctx
Definition:
demuxing_decoding.c:39
pkt
static AVPacket * pkt
Definition:
demuxing_decoding.c:55
main
int main(int argc, char **argv)
Definition:
demuxing_decoding.c:226
fmt_ctx
static AVFormatContext * fmt_ctx
Definition:
demuxing_decoding.c:38
audio_frame_count
static int audio_frame_count
Definition:
demuxing_decoding.c:57
get_format_from_sample_fmt
static int get_format_from_sample_fmt(const char **fmt, enum AVSampleFormat sample_fmt)
Definition:
demuxing_decoding.c:197
output_video_frame
static int output_video_frame(AVFrame *frame)
Definition:
demuxing_decoding.c:59
pix_fmt
static enum AVPixelFormat pix_fmt
Definition:
demuxing_decoding.c:41
video_dst_filename
static const char * video_dst_filename
Definition:
demuxing_decoding.c:44
video_dst_bufsize
static int video_dst_bufsize
Definition:
demuxing_decoding.c:51
video_dst_linesize
static int video_dst_linesize[4]
Definition:
demuxing_decoding.c:50
video_stream
static AVStream * video_stream
Definition:
demuxing_decoding.c:42
decode_packet
static int decode_packet(AVCodecContext *dec, const AVPacket *pkt)
Definition:
demuxing_decoding.c:110
audio_dst_filename
static const char * audio_dst_filename
Definition:
demuxing_decoding.c:45
audio_stream
static AVStream * audio_stream
Definition:
demuxing_decoding.c:42
open_codec_context
static int open_codec_context(int *stream_idx, AVCodecContext **dec_ctx, AVFormatContext *fmt_ctx, enum AVMediaType type)
Definition:
demuxing_decoding.c:146
video_dst_file
static FILE * video_dst_file
Definition:
demuxing_decoding.c:46
video_frame_count
static int video_frame_count
Definition:
demuxing_decoding.c:56
height
static int height
Definition:
demuxing_decoding.c:40
src_filename
static const char * src_filename
Definition:
demuxing_decoding.c:43
frame
static AVFrame * frame
Definition:
demuxing_decoding.c:54
audio_dec_ctx
static AVCodecContext * audio_dec_ctx
Definition:
demuxing_decoding.c:39
audio_dst_file
static FILE * audio_dst_file
Definition:
demuxing_decoding.c:47
video_stream_idx
static int video_stream_idx
Definition:
demuxing_decoding.c:53
dec_ctx
static AVCodecContext * dec_ctx
Definition:
filtering_audio.c:44
avcodec_open2
int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
Initialize the AVCodecContext to use the given AVCodec.
avcodec_alloc_context3
AVCodecContext * avcodec_alloc_context3(const AVCodec *codec)
Allocate an AVCodecContext and set its fields to default values.
avcodec_find_decoder
const AVCodec * avcodec_find_decoder(enum AVCodecID id)
Find a registered decoder with a matching codec ID.
avcodec_parameters_to_context
int avcodec_parameters_to_context(AVCodecContext *codec, const AVCodecParameters *par)
Fill the codec context based on the values from the supplied codec parameters.
avcodec_free_context
void avcodec_free_context(AVCodecContext **avctx)
Free the codec context and everything associated with it and write NULL to the provided pointer.
avcodec_receive_frame
int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame)
Return decoded output data from a decoder.
avcodec_send_packet
int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt)
Supply raw packet data as input to a decoder.
av_packet_free
void av_packet_free(AVPacket **pkt)
Free the packet, if the packet is reference counted, it will be unreferenced first.
av_packet_unref
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
av_packet_alloc
AVPacket * av_packet_alloc(void)
Allocate an AVPacket and set its fields to default values.
av_read_frame
int av_read_frame(AVFormatContext *s, AVPacket *pkt)
Return the next frame of a stream.
av_find_best_stream
int av_find_best_stream(AVFormatContext *ic, enum AVMediaType type, int wanted_stream_nb, int related_stream, const AVCodec **decoder_ret, int flags)
Find the "best" stream in the file.
avformat_open_input
int avformat_open_input(AVFormatContext **ps, const char *url, const AVInputFormat *fmt, AVDictionary **options)
Open an input stream and read the header.
avformat_find_stream_info
int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options)
Read packets of a media file to get stream information.
avformat_close_input
void avformat_close_input(AVFormatContext **s)
Close an opened input AVFormatContext.
av_dump_format
void av_dump_format(AVFormatContext *ic, int index, const char *url, int is_output)
Print detailed information about the input or output format, such as duration, bitrate,...
AVERROR_EOF
#define AVERROR_EOF
End of file.
Definition:
error.h:57
av_err2str
#define av_err2str(errnum)
Convenience macro, the return value should be used only directly in function arguments but never stan...
Definition:
error.h:121
AVERROR
#define AVERROR(e)
Definition:
error.h:45
av_frame_unref
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
av_frame_free
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
av_frame_alloc
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
av_free
void av_free(void *ptr)
Free a memory block which has been allocated with a function of av_malloc() or av_realloc() family.
av_get_media_type_string
const char * av_get_media_type_string(enum AVMediaType media_type)
Return a string describing the media_type enum, NULL if media_type is unknown.
AVMediaType
AVMediaType
Definition:
avutil.h:199
AVMEDIA_TYPE_AUDIO
@ AVMEDIA_TYPE_AUDIO
Definition:
avutil.h:202
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition:
avutil.h:201
av_image_copy
void av_image_copy(uint8_t *dst_data[4], int dst_linesizes[4], const uint8_t *src_data[4], const int src_linesizes[4], enum AVPixelFormat pix_fmt, int width, int height)
Copy image in src_data to dst_data.
av_image_alloc
int av_image_alloc(uint8_t *pointers[4], int linesizes[4], int w, int h, enum AVPixelFormat pix_fmt, int align)
Allocate an image with size w and h and pixel format pix_fmt, and fill pointers and linesizes accordi...
av_sample_fmt_is_planar
int av_sample_fmt_is_planar(enum AVSampleFormat sample_fmt)
Check if the sample format is planar.
av_get_bytes_per_sample
int av_get_bytes_per_sample(enum AVSampleFormat sample_fmt)
Return number of bytes per sample.
av_get_packed_sample_fmt
enum AVSampleFormat av_get_packed_sample_fmt(enum AVSampleFormat sample_fmt)
Get the packed alternative form of the given sample format.
av_get_sample_fmt_name
const char * av_get_sample_fmt_name(enum AVSampleFormat sample_fmt)
Return the name of sample_fmt, or NULL if sample_fmt is not recognized.
AVSampleFormat
AVSampleFormat
Audio sample formats.
Definition:
samplefmt.h:55
AV_SAMPLE_FMT_FLT
@ AV_SAMPLE_FMT_FLT
float
Definition:
samplefmt.h:60
AV_SAMPLE_FMT_S32
@ AV_SAMPLE_FMT_S32
signed 32 bits
Definition:
samplefmt.h:59
AV_SAMPLE_FMT_U8
@ AV_SAMPLE_FMT_U8
unsigned 8 bits
Definition:
samplefmt.h:57
AV_SAMPLE_FMT_DBL
@ AV_SAMPLE_FMT_DBL
double
Definition:
samplefmt.h:61
AV_SAMPLE_FMT_S16
@ AV_SAMPLE_FMT_S16
signed 16 bits
Definition:
samplefmt.h:58
imgutils.h
misc image utilities
AV_NE
#define AV_NE(be, le)
Definition:
macros.h:33
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition:
macros.h:53
av_get_pix_fmt_name
const char * av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
Return the short name for a pixel format, NULL in case pix_fmt is unknown.
AVPixelFormat
AVPixelFormat
Pixel format.
Definition:
pixfmt.h:64
samplefmt.h
AVChannelLayout::nb_channels
int nb_channels
Number of channels in this layout.
Definition:
channel_layout.h:300
AVCodecContext
main external API structure.
Definition:
avcodec.h:389
AVCodecContext::pix_fmt
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
Definition:
avcodec.h:599
AVCodecContext::height
int height
Definition:
avcodec.h:562
AVCodecContext::width
int width
picture width / height.
Definition:
avcodec.h:562
AVCodecContext::ch_layout
AVChannelLayout ch_layout
Audio channel layout.
Definition:
avcodec.h:2056
AVCodecContext::sample_fmt
enum AVSampleFormat sample_fmt
audio sample format
Definition:
avcodec.h:1014
AVCodecContext::codec
const struct AVCodec * codec
Definition:
avcodec.h:398
AVCodecContext::sample_rate
int sample_rate
samples per second
Definition:
avcodec.h:998
AVCodecContext::time_base
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
Definition:
avcodec.h:512
AVCodecParameters::codec_id
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
Definition:
codec_par.h:61
AVCodec
AVCodec.
Definition:
codec.h:196
AVCodec::type
enum AVMediaType type
Definition:
codec.h:209
AVFormatContext
Format I/O context.
Definition:
avformat.h:1213
AVFormatContext::streams
AVStream ** streams
A list of all streams in the file.
Definition:
avformat.h:1281
AVFrame
This structure describes decoded (raw) audio or video data.
Definition:
frame.h:325
AVFrame::coded_picture_number
int coded_picture_number
picture number in bitstream order
Definition:
frame.h:452
AVFrame::nb_samples
int nb_samples
number of audio samples (per channel) described by this frame
Definition:
frame.h:405
AVFrame::pts
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
Definition:
frame.h:432
AVFrame::data
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
Definition:
frame.h:346
AVFrame::width
int width
Definition:
frame.h:397
AVFrame::height
int height
Definition:
frame.h:397
AVFrame::linesize
int linesize[AV_NUM_DATA_POINTERS]
For video, a positive or negative value, which is typically indicating the size in bytes of each pict...
Definition:
frame.h:370
AVFrame::format
int format
format of the frame, -1 if unknown or unset Values correspond to enum AVPixelFormat for video frames,...
Definition:
frame.h:412
AVFrame::extended_data
uint8_t ** extended_data
pointers to the data planes/channels.
Definition:
frame.h:386
AVPacket
This structure stores compressed data.
Definition:
packet.h:351
AVPacket::stream_index
int stream_index
Definition:
packet.h:376
AVStream
Stream structure.
Definition:
avformat.h:948
AVStream::codecpar
AVCodecParameters * codecpar
Codec parameters associated with this stream.
Definition:
avformat.h:1108
timestamp.h
timestamp utils, mostly useful for debugging/logging purposes
av_ts2timestr
#define av_ts2timestr(ts, tb)
Convenience macro, the return value should be used only directly in function arguments but never stan...
Definition:
timestamp.h:76
Generated by
1.9.4