29#include "config_components.h"
84#define OFFSET(x) offsetof(MovieContext, x)
85#define FLAGS AV_OPT_FLAG_FILTERING_PARAM | AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_VIDEO_PARAM
99 {
"dec_threads",
"set the number of threads for decoding",
OFFSET(dec_threads),
AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX,
FLAGS },
108 int i, ret, already = 0, stream_id = -1;
109 char type_char[2],
dummy;
113 ret = sscanf(spec,
"d%1[av]%d%c", type_char, &stream_id, &
dummy);
114 if (ret >= 1 && ret <= 2) {
128 "Invalid stream specifier \"%s\"\n", spec);
139 "Ambiguous stream specifier \"%s\", using #%d\n", spec,
i);
146 already ?
"matched only already used streams" :
147 "did not match any stream");
153 "currently unsupported by libavfilter\n", spec,
165 int w,
h, ow, oh,
copy = 0;
174 if (
w != outlink->
w ||
h != outlink->
h)
254 "Channel layout is not set in stream %d, and could not "
255 "be guessed from the number of channels (%d)\n",
262 "Channel layout is not set in output stream %d, "
263 "guessed channel layout is '%s'\n",
274 char default_streams[16], *stream_specs, *spec, *cursor;
286 snprintf(default_streams,
sizeof(default_streams),
"d%c%d",
287 !strcmp(
ctx->filter->name,
"amovie") ?
'a' :
'v',
289 stream_specs = default_streams;
291 for (cursor = stream_specs; *cursor; cursor++)
297 "Loop with several streams is currently unsupported\n");
307 "Failed to avformat_open_input '%s'\n", movie->
file_name);
320 "%s: seek value overflow with start_time:%"PRId64
" seek_point:%"PRId64
"\n",
344 spec =
av_strtok(stream_specs,
"+", &cursor);
352 movie->
st[
i].
st = st;
403 for (
i = 0;
i <
ctx->nb_outputs;
i++) {
420 int list[] = { 0, -1 };
424 for (
i = 0;
i <
ctx->nb_outputs;
i++) {
429 switch (
c->codec_type) {
434 list[0] =
c->color_space;
437 list[0] =
c->color_range;
445 list[0] =
c->sample_rate;
448 list64[0] =
c->ch_layout;
450 &
cfg->channel_layouts)) < 0)
470 switch (
c->codec_type) {
472 outlink->
w =
c->width;
473 outlink->
h =
c->height;
500 for (
i = 0;
i <
ctx->nb_outputs;
i++) {
573 int wanted = 0, ret = 0;
575 for (
int i = 0;
i <
ctx->nb_outputs;
i++) {
588 for (
int i = 0;
i <
ctx->nb_outputs;
i++)
596 if (pkt_out_id >= 0) {
602 return (ret <= 0) ? ret : 0;
607 for (
int i = 0;
i <
ctx->nb_outputs;
i++) {
613 nb_eofs += movie->
st[
i].
eof == 1;
622 for (
int i = 0;
i <
ctx->nb_outputs;
i++)
627 for (
int i = 0;
i <
ctx->nb_outputs;
i++) {
635 if (nb_eofs < ctx->nb_outputs)
644 char *res,
int res_len,
int flags)
649 if (!strcmp(cmd,
"seek")) {
654 if (sscanf(args,
"%i|%"SCNi64
"|%i %1s", &idx, &ts, &
flags, tail) != 3)
661 for (
i = 0;
i <
ctx->nb_outputs;
i++) {
665 }
else if (!strcmp(cmd,
"get_duration")) {
669 if (!res || res_len <= 0)
672 if (args && sscanf(args,
"%1s", tail) == 1)
676 if (print_len < 0 || print_len >= res_len)
687#if CONFIG_MOVIE_FILTER
692 .p.priv_class = &movie_class,
705#if CONFIG_AMOVIE_FILTER
710 .p.priv_class = &movie_class,
static int process_command(AVFilterContext *ctx, const char *cmd, const char *args, char *res, int res_len, int flags)
const FFFilter ff_avsrc_amovie
const FFFilter ff_avsrc_movie
AVFrame * ff_default_get_audio_buffer(AVFilterLink *link, int nb_samples)
default handler for get_audio_buffer() for audio inputs
Libavcodec external API header.
int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
Send a frame of data to the next filter.
int ff_outlink_frame_wanted(AVFilterLink *link)
Test if a frame is wanted on an output link.
int ff_append_outpad_free_name(AVFilterContext *f, AVFilterPad *p)
int ff_filter_get_nb_threads(AVFilterContext *ctx)
Get number of threads for current filter instance.
void ff_filter_set_ready(AVFilterContext *filter, unsigned priority)
Mark a filter ready and schedule it for activation.
Main libavfilter public API header.
char * av_asprintf(const char *fmt,...)
#define flags(name, subs,...)
#define i(width, name, range_min, range_max)
Public libavutil channel layout APIs header.
AVDictionary * format_opts
int avcodec_parameters_to_context(AVCodecContext *codec, const AVCodecParameters *par)
int(* init)(AVBSFContext *ctx)
static CheckasmConfig cfg
static int get_buffer(AVCodecContext *dec_ctx, AVFrame *frame, int flags)
static const AVInputFormat * iformat
static unsigned int nb_streams
#define AV_NUM_DATA_POINTERS
@ AV_OPT_TYPE_DURATION
Underlying C type is int64_t.
@ AV_OPT_TYPE_INT
Underlying C type is int.
@ AV_OPT_TYPE_DOUBLE
Underlying C type is double.
@ AV_OPT_TYPE_DICT
Underlying C type is AVDictionary*.
@ AV_OPT_TYPE_STRING
Underlying C type is a uint8_t* that is either NULL or points to a C string allocated with the av_mal...
int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
Initialize the AVCodecContext to use the given AVCodec.
AVCodecContext * avcodec_alloc_context3(const AVCodec *codec)
Allocate an AVCodecContext and set its fields to default values.
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
const AVCodec * avcodec_find_decoder(enum AVCodecID id)
Find a registered decoder with a matching codec ID.
void avcodec_free_context(AVCodecContext **avctx)
Free the codec context and everything associated with it and write NULL to the provided pointer.
int avcodec_default_get_buffer2(AVCodecContext *s, AVFrame *frame, int flags)
The default callback for AVCodecContext.get_buffer2().
int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame)
Alias for avcodec_receive_frame_flags(avctx, frame, 0).
void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height, int linesize_align[AV_NUM_DATA_POINTERS])
Modify width and height values so that they will result in a memory buffer that is acceptable for the...
int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt)
Supply raw packet data as input to a decoder.
@ AVDISCARD_ALL
discard all
@ AVDISCARD_DEFAULT
discard useless packets like 0 size packets in avi
void avcodec_flush_buffers(AVCodecContext *avctx)
Reset the internal codec state / flush internal buffers.
void av_packet_free(AVPacket **pkt)
Free the packet, if the packet is reference counted, it will be unreferenced first.
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
AVPacket * av_packet_alloc(void)
Allocate an AVPacket and set its fields to default values.
const AVInputFormat * av_find_input_format(const char *short_name)
Find AVInputFormat based on the short name of the input format.
int av_read_frame(AVFormatContext *s, AVPacket *pkt)
Return the next frame of a stream.
int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
Seek to the keyframe at timestamp.
int avformat_open_input(AVFormatContext **ps, const char *url, const AVInputFormat *fmt, AVDictionary **options)
Open an input stream and read the header.
int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options)
Read packets of a media file to get stream information.
void avformat_close_input(AVFormatContext **s)
Close an opened input AVFormatContext.
int avformat_match_stream_specifier(AVFormatContext *s, AVStream *st, const char *spec)
Check if the stream st contained in s is matched by the stream specifier spec.
#define AVFILTER_FLAG_DYNAMIC_OUTPUTS
The number of the filter outputs is not determined just by AVFilter.outputs.
void av_channel_layout_default(AVChannelLayout *ch_layout, int nb_channels)
Get the default channel layout for a given number of channels.
int av_channel_layout_compare(const AVChannelLayout *chl, const AVChannelLayout *chl1)
Check whether two channel layouts are semantically the same, i.e.
int av_channel_layout_describe(const AVChannelLayout *channel_layout, char *buf, size_t buf_size)
Get a human-readable string describing the channel layout properties.
int av_channel_layout_copy(AVChannelLayout *dst, const AVChannelLayout *src)
Make a copy of a channel layout.
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
#define AVERROR_BUG
Internal bug, also see AVERROR_BUG2.
#define AVERROR_EOF
End of file.
#define av_err2str(errnum)
Convenience macro, the return value should be used only directly in function arguments but never stan...
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
void av_frame_move_ref(AVFrame *dst, AVFrame *src)
Move everything contained in src to dst and reset src.
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
int av_frame_copy_props(AVFrame *dst, const AVFrame *src)
Copy only "metadata" fields from src to dst.
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
AVFrame * av_frame_clone(const AVFrame *src)
Create a new frame that references the same data as src.
#define AV_LOG_WARNING
Something somehow does not look correct.
#define AV_LOG_VERBOSE
Detailed information.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
int64_t av_rescale_q_rnd(int64_t a, AVRational bq, AVRational cq, enum AVRounding rnd)
Rescale a 64-bit integer by 2 rational numbers with specified rounding.
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
@ AV_ROUND_UP
Round toward +infinity.
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.
char * av_strtok(char *s, const char *delim, char **saveptr)
Split the string into several tokens which can be accessed by successive calls to av_strtok().
#define AV_NOPTS_VALUE
Undefined timestamp value.
#define AV_TIME_BASE_Q
Internal time base represented as fractional value.
static int format_name(const char *buf, char **s, int index, const char *varname)
static av_cold void uninit(AVBitStreamFilterContext *ctx)
static int activate(AVBitStreamFilterContext *ctx)
static void ff_outlink_set_status(AVFilterLink *link, int status, int64_t pts)
Set the status field of a link from the source filter.
#define FFERROR_NOT_READY
Filters implementation helper functions and internal structures.
#define AVFILTER_DEFINE_CLASS_EXT(name, desc, options)
static FilterLink * ff_filter_link(AVFilterLink *link)
#define FF_OUTLINK_IDX(link)
#define FILTER_QUERY_FUNC2(func)
Macro definitions for various function/variable attributes.
common internal API header
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
void * av_calloc(size_t nmemb, size_t size)
Memory handling functions.
static int open_stream(AVFilterContext *ctx, MovieStream *st, int dec_threads)
static int movie_query_formats(const AVFilterContext *ctx, AVFilterFormatsConfig **cfg_in, AVFilterFormatsConfig **cfg_out)
static AVStream * find_stream(void *log, AVFormatContext *avf, const char *spec)
static av_cold int movie_common_init(AVFilterContext *ctx)
static av_cold void movie_uninit(AVFilterContext *ctx)
static int get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
static int movie_config_output_props(AVFilterLink *outlink)
static int rewind_file(AVFilterContext *ctx)
static const AVOption movie_options[]
static int flush_decoder(AVFilterContext *ctx, int i)
static int process_command(AVFilterContext *ctx, const char *cmd, const char *args, char *res, int res_len, int flags)
static int activate(AVFilterContext *ctx)
static int guess_channel_layout(MovieStream *st, int st_index, void *log_ctx)
static int decode_packet(AVFilterContext *ctx, int i)
An AVChannelLayout holds information about the channel layout of audio data.
int nb_channels
Number of channels in this layout.
Describe the class of an AVClass context structure.
main external API structure.
AVRational pkt_timebase
Timebase in which pkt_dts/pts and AVPacket.dts/pts are expressed.
enum AVMediaType codec_type
const struct AVCodec * codec
int thread_count
thread count is used to decide how many independent tasks should be passed to execute()
void * opaque
Private data of the user, can be used to carry app specific stuff.
int(* get_buffer2)(struct AVCodecContext *s, AVFrame *frame, int flags)
This callback is called at the beginning of each frame to get data buffer(s) for it.
This struct describes the properties of an encoded stream.
AVChannelLayout ch_layout
The channel layout and number of channels.
enum AVMediaType codec_type
General type of the encoded data.
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
int capabilities
Codec capabilities.
A link between two filters.
int w
agreed upon image width
int h
agreed upon image height
AVFilterContext * src
source filter
AVRational time_base
Define the time base used by the PTS of the frames/samples which will pass through this link.
int sample_rate
samples per second
AVChannelLayout ch_layout
channel layout of current buffer (see libavutil/channel_layout.h)
int format
agreed upon media format
A filter pad used for either input or output.
int(* config_props)(AVFilterLink *link)
Link configuration callback.
enum AVMediaType type
AVFilterPad type.
const char * name
Pad name.
unsigned int nb_streams
Number of elements in AVFormatContext.streams.
int64_t start_time
Position of the first frame of the component, in AV_TIME_BASE fractional seconds.
AVStream ** streams
A list of all streams in the file.
int64_t duration
Duration of the stream, in AV_TIME_BASE fractional seconds.
This structure describes decoded (raw) audio or video data.
This structure stores compressed data.
AVBufferRef * buf
A reference to the reference-counted buffer where the packet data is stored.
AVCodecParameters * codecpar
Codec parameters associated with this stream.
enum AVDiscard discard
Selects which packets can be discarded at will and do not need to be demuxed.
int index
stream index in AVFormatContext
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
AVRational r_frame_rate
Real base framerate of the stream.
Link properties exposed to filter code, but not external callers.
AVRational frame_rate
Frame rate of the stream on the link, or 1/0 if unknown or variable.
AVDictionary * format_opts
int64_t seek_point
seekpoint in microseconds
int stream_index
for compatibility
AVFormatContext * format_ctx
int max_stream_index
max stream # actually used for output
char * stream_specs
user-provided list of streams, separated by +
int * out_index
stream number -> output number map, or -1
MovieStream * st
array of all streams, one per output
int64_t discontinuity_threshold
int64_t discontinuity_threshold
AVCodecContext * codec_ctx
static AVFormatContext * ctx
static av_always_inline int diff(const struct color_info *a, const struct color_info *b, const int trans_thresh)
static void copy(const float *p1, float *p2, const int length)
AVFrame * ff_default_get_video_buffer(AVFilterLink *link, int w, int h)