avformat/avformat: Move AVOutputFormat internals out of public header

This commit does for AVOutputFormat what commit
20f9727018 did for AVCodec:
It adds a new type FFOutputFormat, moves all the internals
of AVOutputFormat to it and adds a now reduced AVOutputFormat
as first member.

This does not affect/improve extensibility of both public
or private fields for muxers (it is still a mess due to lavd).

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Signed-off-by: Anton Khirnov <anton@khirnov.net>
This commit is contained in:
Andreas Rheinhardt 2023-01-27 15:06:00 +01:00 committed by Anton Khirnov
parent f23ae839fc
commit 59c9dc82f4
115 changed files with 1731 additions and 1644 deletions

8
configure vendored
View File

@ -4010,9 +4010,9 @@ find_filters_extern(){
} }
FILTER_LIST=$(find_filters_extern libavfilter/allfilters.c) FILTER_LIST=$(find_filters_extern libavfilter/allfilters.c)
OUTDEV_LIST=$(find_things_extern muxer AVOutputFormat libavdevice/alldevices.c outdev) OUTDEV_LIST=$(find_things_extern muxer FFOutputFormat libavdevice/alldevices.c outdev)
INDEV_LIST=$(find_things_extern demuxer AVInputFormat libavdevice/alldevices.c indev) INDEV_LIST=$(find_things_extern demuxer AVInputFormat libavdevice/alldevices.c indev)
MUXER_LIST=$(find_things_extern muxer AVOutputFormat libavformat/allformats.c) MUXER_LIST=$(find_things_extern muxer FFOutputFormat libavformat/allformats.c)
DEMUXER_LIST=$(find_things_extern demuxer AVInputFormat libavformat/allformats.c) DEMUXER_LIST=$(find_things_extern demuxer AVInputFormat libavformat/allformats.c)
ENCODER_LIST=$(find_things_extern encoder FFCodec libavcodec/allcodecs.c) ENCODER_LIST=$(find_things_extern encoder FFCodec libavcodec/allcodecs.c)
DECODER_LIST=$(find_things_extern decoder FFCodec libavcodec/allcodecs.c) DECODER_LIST=$(find_things_extern decoder FFCodec libavcodec/allcodecs.c)
@ -7960,9 +7960,9 @@ print_enabled_components libavcodec/codec_list.c FFCodec codec_list $CODEC_LIST
print_enabled_components libavcodec/parser_list.c AVCodecParser parser_list $PARSER_LIST print_enabled_components libavcodec/parser_list.c AVCodecParser parser_list $PARSER_LIST
print_enabled_components libavcodec/bsf_list.c FFBitStreamFilter bitstream_filters $BSF_LIST print_enabled_components libavcodec/bsf_list.c FFBitStreamFilter bitstream_filters $BSF_LIST
print_enabled_components libavformat/demuxer_list.c AVInputFormat demuxer_list $DEMUXER_LIST print_enabled_components libavformat/demuxer_list.c AVInputFormat demuxer_list $DEMUXER_LIST
print_enabled_components libavformat/muxer_list.c AVOutputFormat muxer_list $MUXER_LIST print_enabled_components libavformat/muxer_list.c FFOutputFormat muxer_list $MUXER_LIST
print_enabled_components libavdevice/indev_list.c AVInputFormat indev_list $INDEV_LIST print_enabled_components libavdevice/indev_list.c AVInputFormat indev_list $INDEV_LIST
print_enabled_components libavdevice/outdev_list.c AVOutputFormat outdev_list $OUTDEV_LIST print_enabled_components libavdevice/outdev_list.c FFOutputFormat outdev_list $OUTDEV_LIST
print_enabled_components libavformat/protocol_list.c URLProtocol url_protocols $PROTOCOL_LIST print_enabled_components libavformat/protocol_list.c URLProtocol url_protocols $PROTOCOL_LIST
# Settings for pkg-config files # Settings for pkg-config files

View File

@ -19,40 +19,41 @@
*/ */
#include "libavformat/internal.h" #include "libavformat/internal.h"
#include "libavformat/mux.h"
#include "avdevice.h" #include "avdevice.h"
/* devices */ /* devices */
extern const AVInputFormat ff_alsa_demuxer; extern const AVInputFormat ff_alsa_demuxer;
extern const AVOutputFormat ff_alsa_muxer; extern const FFOutputFormat ff_alsa_muxer;
extern const AVInputFormat ff_android_camera_demuxer; extern const AVInputFormat ff_android_camera_demuxer;
extern const AVOutputFormat ff_audiotoolbox_muxer; extern const FFOutputFormat ff_audiotoolbox_muxer;
extern const AVInputFormat ff_avfoundation_demuxer; extern const AVInputFormat ff_avfoundation_demuxer;
extern const AVInputFormat ff_bktr_demuxer; extern const AVInputFormat ff_bktr_demuxer;
extern const AVOutputFormat ff_caca_muxer; extern const FFOutputFormat ff_caca_muxer;
extern const AVInputFormat ff_decklink_demuxer; extern const AVInputFormat ff_decklink_demuxer;
extern const AVOutputFormat ff_decklink_muxer; extern const FFOutputFormat ff_decklink_muxer;
extern const AVInputFormat ff_dshow_demuxer; extern const AVInputFormat ff_dshow_demuxer;
extern const AVInputFormat ff_fbdev_demuxer; extern const AVInputFormat ff_fbdev_demuxer;
extern const AVOutputFormat ff_fbdev_muxer; extern const FFOutputFormat ff_fbdev_muxer;
extern const AVInputFormat ff_gdigrab_demuxer; extern const AVInputFormat ff_gdigrab_demuxer;
extern const AVInputFormat ff_iec61883_demuxer; extern const AVInputFormat ff_iec61883_demuxer;
extern const AVInputFormat ff_jack_demuxer; extern const AVInputFormat ff_jack_demuxer;
extern const AVInputFormat ff_kmsgrab_demuxer; extern const AVInputFormat ff_kmsgrab_demuxer;
extern const AVInputFormat ff_lavfi_demuxer; extern const AVInputFormat ff_lavfi_demuxer;
extern const AVInputFormat ff_openal_demuxer; extern const AVInputFormat ff_openal_demuxer;
extern const AVOutputFormat ff_opengl_muxer; extern const FFOutputFormat ff_opengl_muxer;
extern const AVInputFormat ff_oss_demuxer; extern const AVInputFormat ff_oss_demuxer;
extern const AVOutputFormat ff_oss_muxer; extern const FFOutputFormat ff_oss_muxer;
extern const AVInputFormat ff_pulse_demuxer; extern const AVInputFormat ff_pulse_demuxer;
extern const AVOutputFormat ff_pulse_muxer; extern const FFOutputFormat ff_pulse_muxer;
extern const AVOutputFormat ff_sdl2_muxer; extern const FFOutputFormat ff_sdl2_muxer;
extern const AVInputFormat ff_sndio_demuxer; extern const AVInputFormat ff_sndio_demuxer;
extern const AVOutputFormat ff_sndio_muxer; extern const FFOutputFormat ff_sndio_muxer;
extern const AVInputFormat ff_v4l2_demuxer; extern const AVInputFormat ff_v4l2_demuxer;
extern const AVOutputFormat ff_v4l2_muxer; extern const FFOutputFormat ff_v4l2_muxer;
extern const AVInputFormat ff_vfwcap_demuxer; extern const AVInputFormat ff_vfwcap_demuxer;
extern const AVInputFormat ff_xcbgrab_demuxer; extern const AVInputFormat ff_xcbgrab_demuxer;
extern const AVOutputFormat ff_xv_muxer; extern const FFOutputFormat ff_xv_muxer;
/* external libraries */ /* external libraries */
extern const AVInputFormat ff_libcdio_demuxer; extern const AVInputFormat ff_libcdio_demuxer;
@ -97,12 +98,12 @@ static const void *next_output(const AVOutputFormat *prev, AVClassCategory c2)
const AVClass *pc; const AVClass *pc;
const AVClassCategory c1 = AV_CLASS_CATEGORY_DEVICE_OUTPUT; const AVClassCategory c1 = AV_CLASS_CATEGORY_DEVICE_OUTPUT;
AVClassCategory category = AV_CLASS_CATEGORY_NA; AVClassCategory category = AV_CLASS_CATEGORY_NA;
const AVOutputFormat *fmt = NULL; const FFOutputFormat *fmt = NULL;
int i = 0; int i = 0;
while (prev && (fmt = outdev_list[i])) { while (prev && (fmt = outdev_list[i])) {
i++; i++;
if (prev == fmt) if (prev == &fmt->p)
break; break;
} }
@ -110,7 +111,7 @@ static const void *next_output(const AVOutputFormat *prev, AVClassCategory c2)
fmt = outdev_list[i++]; fmt = outdev_list[i++];
if (!fmt) if (!fmt)
break; break;
pc = fmt->priv_class; pc = fmt->p.priv_class;
if (!pc) if (!pc)
continue; continue;
category = pc->category; category = pc->category;

View File

@ -165,18 +165,18 @@ static const AVClass alsa_muxer_class = {
.category = AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT, .category = AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT,
}; };
const AVOutputFormat ff_alsa_muxer = { const FFOutputFormat ff_alsa_muxer = {
.name = "alsa", .p.name = "alsa",
.long_name = NULL_IF_CONFIG_SMALL("ALSA audio output"), .p.long_name = NULL_IF_CONFIG_SMALL("ALSA audio output"),
.priv_data_size = sizeof(AlsaData), .priv_data_size = sizeof(AlsaData),
.audio_codec = DEFAULT_CODEC_ID, .p.audio_codec = DEFAULT_CODEC_ID,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.write_header = audio_write_header, .write_header = audio_write_header,
.write_packet = audio_write_packet, .write_packet = audio_write_packet,
.write_trailer = ff_alsa_close, .write_trailer = ff_alsa_close,
.write_uncoded_frame = audio_write_frame, .write_uncoded_frame = audio_write_frame,
.get_device_list = audio_get_device_list, .get_device_list = audio_get_device_list,
.get_output_timestamp = audio_get_output_timestamp, .get_output_timestamp = audio_get_output_timestamp,
.flags = AVFMT_NOFILE, .p.flags = AVFMT_NOFILE,
.priv_class = &alsa_muxer_class, .p.priv_class = &alsa_muxer_class,
}; };

View File

@ -30,6 +30,7 @@
#include "libavutil/opt.h" #include "libavutil/opt.h"
#include "libavformat/internal.h" #include "libavformat/internal.h"
#include "libavformat/mux.h"
#include "libavutil/internal.h" #include "libavutil/internal.h"
#include "avdevice.h" #include "avdevice.h"
@ -294,15 +295,15 @@ static const AVClass at_class = {
.category = AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT, .category = AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT,
}; };
const AVOutputFormat ff_audiotoolbox_muxer = { const FFOutputFormat ff_audiotoolbox_muxer = {
.name = "audiotoolbox", .p.name = "audiotoolbox",
.long_name = NULL_IF_CONFIG_SMALL("AudioToolbox output device"), .p.long_name = NULL_IF_CONFIG_SMALL("AudioToolbox output device"),
.priv_data_size = sizeof(ATContext), .priv_data_size = sizeof(ATContext),
.audio_codec = AV_NE(AV_CODEC_ID_PCM_S16BE, AV_CODEC_ID_PCM_S16LE), .p.audio_codec = AV_NE(AV_CODEC_ID_PCM_S16BE, AV_CODEC_ID_PCM_S16LE),
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.write_header = at_write_header, .write_header = at_write_header,
.write_packet = at_write_packet, .write_packet = at_write_packet,
.write_trailer = at_write_trailer, .write_trailer = at_write_trailer,
.flags = AVFMT_NOFILE, .p.flags = AVFMT_NOFILE,
.priv_class = &at_class, .p.priv_class = &at_class,
}; };

View File

@ -19,6 +19,7 @@
#include "libavutil/avassert.h" #include "libavutil/avassert.h"
#include "avdevice.h" #include "avdevice.h"
#include "internal.h" #include "internal.h"
#include "libavformat/mux.h"
#if FF_API_DEVICE_CAPABILITIES #if FF_API_DEVICE_CAPABILITIES
const AVOption av_device_capabilities[] = { const AVOption av_device_capabilities[] = {
@ -29,9 +30,9 @@ const AVOption av_device_capabilities[] = {
int avdevice_app_to_dev_control_message(struct AVFormatContext *s, enum AVAppToDevMessageType type, int avdevice_app_to_dev_control_message(struct AVFormatContext *s, enum AVAppToDevMessageType type,
void *data, size_t data_size) void *data, size_t data_size)
{ {
if (!s->oformat || !s->oformat->control_message) if (!s->oformat || !ffofmt(s->oformat)->control_message)
return AVERROR(ENOSYS); return AVERROR(ENOSYS);
return s->oformat->control_message(s, type, data, data_size); return ffofmt(s->oformat)->control_message(s, type, data, data_size);
} }
int avdevice_dev_to_app_control_message(struct AVFormatContext *s, enum AVDevToAppMessageType type, int avdevice_dev_to_app_control_message(struct AVFormatContext *s, enum AVDevToAppMessageType type,
@ -61,7 +62,7 @@ int avdevice_list_devices(AVFormatContext *s, AVDeviceInfoList **device_list)
av_assert0(s); av_assert0(s);
av_assert0(device_list); av_assert0(device_list);
av_assert0(s->oformat || s->iformat); av_assert0(s->oformat || s->iformat);
if ((s->oformat && !s->oformat->get_device_list) || if ((s->oformat && !ffofmt(s->oformat)->get_device_list) ||
(s->iformat && !s->iformat->get_device_list)) { (s->iformat && !s->iformat->get_device_list)) {
*device_list = NULL; *device_list = NULL;
return AVERROR(ENOSYS); return AVERROR(ENOSYS);
@ -72,7 +73,7 @@ int avdevice_list_devices(AVFormatContext *s, AVDeviceInfoList **device_list)
/* no default device by default */ /* no default device by default */
(*device_list)->default_device = -1; (*device_list)->default_device = -1;
if (s->oformat) if (s->oformat)
ret = s->oformat->get_device_list(s, *device_list); ret = ffofmt(s->oformat)->get_device_list(s, *device_list);
else else
ret = s->iformat->get_device_list(s, *device_list); ret = s->iformat->get_device_list(s, *device_list);
if (ret < 0) { if (ret < 0) {

View File

@ -21,6 +21,7 @@
#include <caca.h> #include <caca.h>
#include "libavutil/opt.h" #include "libavutil/opt.h"
#include "libavutil/pixdesc.h" #include "libavutil/pixdesc.h"
#include "libavformat/mux.h"
#include "avdevice.h" #include "avdevice.h"
typedef struct CACAContext { typedef struct CACAContext {
@ -220,15 +221,15 @@ static const AVClass caca_class = {
.category = AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT, .category = AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT,
}; };
const AVOutputFormat ff_caca_muxer = { const FFOutputFormat ff_caca_muxer = {
.name = "caca", .p.name = "caca",
.long_name = NULL_IF_CONFIG_SMALL("caca (color ASCII art) output device"), .p.long_name = NULL_IF_CONFIG_SMALL("caca (color ASCII art) output device"),
.priv_data_size = sizeof(CACAContext), .priv_data_size = sizeof(CACAContext),
.audio_codec = AV_CODEC_ID_NONE, .p.audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_RAWVIDEO, .p.video_codec = AV_CODEC_ID_RAWVIDEO,
.write_header = caca_write_header, .write_header = caca_write_header,
.write_packet = caca_write_packet, .write_packet = caca_write_packet,
.deinit = caca_deinit, .deinit = caca_deinit,
.flags = AVFMT_NOFILE, .p.flags = AVFMT_NOFILE,
.priv_class = &caca_class, .p.priv_class = &caca_class,
}; };

View File

@ -20,6 +20,7 @@
*/ */
#include "libavformat/avformat.h" #include "libavformat/avformat.h"
#include "libavformat/mux.h"
#include "libavutil/opt.h" #include "libavutil/opt.h"
#include "decklink_common_c.h" #include "decklink_common_c.h"
@ -71,15 +72,15 @@ static const AVClass decklink_muxer_class = {
.category = AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT, .category = AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT,
}; };
const AVOutputFormat ff_decklink_muxer = { const FFOutputFormat ff_decklink_muxer = {
.name = "decklink", .p.name = "decklink",
.long_name = NULL_IF_CONFIG_SMALL("Blackmagic DeckLink output"), .p.long_name = NULL_IF_CONFIG_SMALL("Blackmagic DeckLink output"),
.audio_codec = AV_CODEC_ID_PCM_S16LE, .p.audio_codec = AV_CODEC_ID_PCM_S16LE,
.video_codec = AV_CODEC_ID_WRAPPED_AVFRAME, .p.video_codec = AV_CODEC_ID_WRAPPED_AVFRAME,
.subtitle_codec = AV_CODEC_ID_NONE, .p.subtitle_codec = AV_CODEC_ID_NONE,
.flags = AVFMT_NOFILE, .p.flags = AVFMT_NOFILE,
.p.priv_class = &decklink_muxer_class,
.get_device_list = ff_decklink_list_output_devices, .get_device_list = ff_decklink_list_output_devices,
.priv_class = &decklink_muxer_class,
.priv_data_size = sizeof(struct decklink_cctx), .priv_data_size = sizeof(struct decklink_cctx),
.write_header = ff_decklink_write_header, .write_header = ff_decklink_write_header,
.write_packet = ff_decklink_write_packet, .write_packet = ff_decklink_write_packet,

View File

@ -28,6 +28,7 @@
#include "libavutil/log.h" #include "libavutil/log.h"
#include "libavutil/opt.h" #include "libavutil/opt.h"
#include "libavformat/avformat.h" #include "libavformat/avformat.h"
#include "libavformat/mux.h"
#include "fbdev_common.h" #include "fbdev_common.h"
#include "avdevice.h" #include "avdevice.h"
@ -206,16 +207,16 @@ static const AVClass fbdev_class = {
.category = AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT, .category = AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT,
}; };
const AVOutputFormat ff_fbdev_muxer = { const FFOutputFormat ff_fbdev_muxer = {
.name = "fbdev", .p.name = "fbdev",
.long_name = NULL_IF_CONFIG_SMALL("Linux framebuffer"), .p.long_name = NULL_IF_CONFIG_SMALL("Linux framebuffer"),
.priv_data_size = sizeof(FBDevContext), .priv_data_size = sizeof(FBDevContext),
.audio_codec = AV_CODEC_ID_NONE, .p.audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_RAWVIDEO, .p.video_codec = AV_CODEC_ID_RAWVIDEO,
.write_header = fbdev_write_header, .write_header = fbdev_write_header,
.write_packet = fbdev_write_packet, .write_packet = fbdev_write_packet,
.write_trailer = fbdev_write_trailer, .write_trailer = fbdev_write_trailer,
.get_device_list = fbdev_get_device_list, .get_device_list = fbdev_get_device_list,
.flags = AVFMT_NOFILE | AVFMT_VARIABLE_FPS | AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOFILE | AVFMT_VARIABLE_FPS | AVFMT_NOTIMESTAMPS,
.priv_class = &fbdev_class, .p.priv_class = &fbdev_class,
}; };

View File

@ -1292,17 +1292,17 @@ static const AVClass opengl_class = {
.category = AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT, .category = AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT,
}; };
const AVOutputFormat ff_opengl_muxer = { const FFOutputFormat ff_opengl_muxer = {
.name = "opengl", .p.name = "opengl",
.long_name = NULL_IF_CONFIG_SMALL("OpenGL output"), .p.long_name = NULL_IF_CONFIG_SMALL("OpenGL output"),
.p.audio_codec = AV_CODEC_ID_NONE,
.p.video_codec = AV_CODEC_ID_WRAPPED_AVFRAME,
.p.flags = AVFMT_NOFILE | AVFMT_VARIABLE_FPS | AVFMT_NOTIMESTAMPS,
.p.priv_class = &opengl_class,
.priv_data_size = sizeof(OpenGLContext), .priv_data_size = sizeof(OpenGLContext),
.audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_WRAPPED_AVFRAME,
.write_header = opengl_write_header, .write_header = opengl_write_header,
.write_packet = opengl_write_packet, .write_packet = opengl_write_packet,
.write_uncoded_frame = opengl_write_frame, .write_uncoded_frame = opengl_write_frame,
.write_trailer = opengl_write_trailer, .write_trailer = opengl_write_trailer,
.control_message = opengl_control_message, .control_message = opengl_control_message,
.flags = AVFMT_NOFILE | AVFMT_VARIABLE_FPS | AVFMT_NOTIMESTAMPS,
.priv_class = &opengl_class,
}; };

View File

@ -32,6 +32,7 @@
#include "avdevice.h" #include "avdevice.h"
#include "libavformat/internal.h" #include "libavformat/internal.h"
#include "libavformat/mux.h"
#include "oss.h" #include "oss.h"
@ -94,18 +95,18 @@ static const AVClass oss_muxer_class = {
.category = AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT, .category = AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT,
}; };
const AVOutputFormat ff_oss_muxer = { const FFOutputFormat ff_oss_muxer = {
.name = "oss", .p.name = "oss",
.long_name = NULL_IF_CONFIG_SMALL("OSS (Open Sound System) playback"), .p.long_name = NULL_IF_CONFIG_SMALL("OSS (Open Sound System) playback"),
.priv_data_size = sizeof(OSSAudioData), .priv_data_size = sizeof(OSSAudioData),
/* XXX: we make the assumption that the soundcard accepts this format */ /* XXX: we make the assumption that the soundcard accepts this format */
/* XXX: find better solution with "preinit" method, needed also in /* XXX: find better solution with "preinit" method, needed also in
other formats */ other formats */
.audio_codec = AV_NE(AV_CODEC_ID_PCM_S16BE, AV_CODEC_ID_PCM_S16LE), .p.audio_codec = AV_NE(AV_CODEC_ID_PCM_S16BE, AV_CODEC_ID_PCM_S16LE),
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.write_header = audio_write_header, .write_header = audio_write_header,
.write_packet = audio_write_packet, .write_packet = audio_write_packet,
.write_trailer = audio_write_trailer, .write_trailer = audio_write_trailer,
.flags = AVFMT_NOFILE, .p.flags = AVFMT_NOFILE,
.priv_class = &oss_muxer_class, .p.priv_class = &oss_muxer_class,
}; };

View File

@ -788,12 +788,12 @@ static const AVClass pulse_muxer_class = {
.category = AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT, .category = AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT,
}; };
const AVOutputFormat ff_pulse_muxer = { const FFOutputFormat ff_pulse_muxer = {
.name = "pulse", .p.name = "pulse",
.long_name = NULL_IF_CONFIG_SMALL("Pulse audio output"), .p.long_name = NULL_IF_CONFIG_SMALL("Pulse audio output"),
.priv_data_size = sizeof(PulseData), .priv_data_size = sizeof(PulseData),
.audio_codec = AV_NE(AV_CODEC_ID_PCM_S16BE, AV_CODEC_ID_PCM_S16LE), .p.audio_codec = AV_NE(AV_CODEC_ID_PCM_S16BE, AV_CODEC_ID_PCM_S16LE),
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.write_header = pulse_write_header, .write_header = pulse_write_header,
.write_packet = pulse_write_packet, .write_packet = pulse_write_packet,
.write_uncoded_frame = pulse_write_frame, .write_uncoded_frame = pulse_write_frame,
@ -801,6 +801,6 @@ const AVOutputFormat ff_pulse_muxer = {
.get_output_timestamp = pulse_get_output_timestamp, .get_output_timestamp = pulse_get_output_timestamp,
.get_device_list = pulse_get_device_list, .get_device_list = pulse_get_device_list,
.control_message = pulse_control_message, .control_message = pulse_control_message,
.flags = AVFMT_NOFILE | AVFMT_ALLOW_FLUSH, .p.flags = AVFMT_NOFILE | AVFMT_ALLOW_FLUSH,
.priv_class = &pulse_muxer_class, .p.priv_class = &pulse_muxer_class,
}; };

View File

@ -33,6 +33,7 @@
#include "libavutil/pixdesc.h" #include "libavutil/pixdesc.h"
#include "libavutil/time.h" #include "libavutil/time.h"
#include "avdevice.h" #include "avdevice.h"
#include "libavformat/mux.h"
typedef struct { typedef struct {
AVClass *class; AVClass *class;
@ -355,15 +356,15 @@ static const AVClass sdl2_class = {
.category = AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT, .category = AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT,
}; };
const AVOutputFormat ff_sdl2_muxer = { const FFOutputFormat ff_sdl2_muxer = {
.name = "sdl,sdl2", .p.name = "sdl,sdl2",
.long_name = NULL_IF_CONFIG_SMALL("SDL2 output device"), .p.long_name = NULL_IF_CONFIG_SMALL("SDL2 output device"),
.priv_data_size = sizeof(SDLContext), .priv_data_size = sizeof(SDLContext),
.audio_codec = AV_CODEC_ID_NONE, .p.audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_RAWVIDEO, .p.video_codec = AV_CODEC_ID_RAWVIDEO,
.write_header = sdl2_write_header, .write_header = sdl2_write_header,
.write_packet = sdl2_write_packet, .write_packet = sdl2_write_packet,
.write_trailer = sdl2_write_trailer, .write_trailer = sdl2_write_trailer,
.flags = AVFMT_NOFILE | AVFMT_VARIABLE_FPS | AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOFILE | AVFMT_VARIABLE_FPS | AVFMT_NOTIMESTAMPS,
.priv_class = &sdl2_class, .p.priv_class = &sdl2_class,
}; };

View File

@ -24,6 +24,7 @@
#include "libavutil/internal.h" #include "libavutil/internal.h"
#include "libavformat/mux.h"
#include "libavdevice/avdevice.h" #include "libavdevice/avdevice.h"
#include "libavdevice/sndio.h" #include "libavdevice/sndio.h"
@ -86,18 +87,18 @@ static const AVClass sndio_muxer_class = {
.category = AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT, .category = AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT,
}; };
const AVOutputFormat ff_sndio_muxer = { const FFOutputFormat ff_sndio_muxer = {
.name = "sndio", .p.name = "sndio",
.long_name = NULL_IF_CONFIG_SMALL("sndio audio playback"), .p.long_name = NULL_IF_CONFIG_SMALL("sndio audio playback"),
.priv_data_size = sizeof(SndioData), .priv_data_size = sizeof(SndioData),
/* XXX: we make the assumption that the soundcard accepts this format */ /* XXX: we make the assumption that the soundcard accepts this format */
/* XXX: find better solution with "preinit" method, needed also in /* XXX: find better solution with "preinit" method, needed also in
other formats */ other formats */
.audio_codec = AV_NE(AV_CODEC_ID_PCM_S16BE, AV_CODEC_ID_PCM_S16LE), .p.audio_codec = AV_NE(AV_CODEC_ID_PCM_S16BE, AV_CODEC_ID_PCM_S16LE),
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.write_header = audio_write_header, .write_header = audio_write_header,
.write_packet = audio_write_packet, .write_packet = audio_write_packet,
.write_trailer = audio_write_trailer, .write_trailer = audio_write_trailer,
.flags = AVFMT_NOFILE, .p.flags = AVFMT_NOFILE,
.priv_class = &sndio_muxer_class, .p.priv_class = &sndio_muxer_class,
}; };

View File

@ -21,6 +21,7 @@
#include "libavutil/imgutils.h" #include "libavutil/imgutils.h"
#include "libavutil/pixdesc.h" #include "libavutil/pixdesc.h"
#include "libavformat/avformat.h" #include "libavformat/avformat.h"
#include "libavformat/mux.h"
#include "v4l2-common.h" #include "v4l2-common.h"
typedef struct { typedef struct {
@ -111,15 +112,15 @@ static const AVClass v4l2_class = {
.category = AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT, .category = AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT,
}; };
const AVOutputFormat ff_v4l2_muxer = { const FFOutputFormat ff_v4l2_muxer = {
.name = "video4linux2,v4l2", .p.name = "video4linux2,v4l2",
.long_name = NULL_IF_CONFIG_SMALL("Video4Linux2 output device"), .p.long_name = NULL_IF_CONFIG_SMALL("Video4Linux2 output device"),
.priv_data_size = sizeof(V4L2Context), .priv_data_size = sizeof(V4L2Context),
.audio_codec = AV_CODEC_ID_NONE, .p.audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_RAWVIDEO, .p.video_codec = AV_CODEC_ID_RAWVIDEO,
.write_header = write_header, .write_header = write_header,
.write_packet = write_packet, .write_packet = write_packet,
.write_trailer = write_trailer, .write_trailer = write_trailer,
.flags = AVFMT_NOFILE, .p.flags = AVFMT_NOFILE,
.priv_class = &v4l2_class, .p.priv_class = &v4l2_class,
}; };

View File

@ -376,17 +376,17 @@ static const AVClass xv_class = {
.category = AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT, .category = AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT,
}; };
const AVOutputFormat ff_xv_muxer = { const FFOutputFormat ff_xv_muxer = {
.name = "xv", .p.name = "xv",
.long_name = NULL_IF_CONFIG_SMALL("XV (XVideo) output device"), .p.long_name = NULL_IF_CONFIG_SMALL("XV (XVideo) output device"),
.p.audio_codec = AV_CODEC_ID_NONE,
.p.video_codec = AV_CODEC_ID_WRAPPED_AVFRAME,
.p.flags = AVFMT_NOFILE | AVFMT_VARIABLE_FPS | AVFMT_NOTIMESTAMPS,
.p.priv_class = &xv_class,
.priv_data_size = sizeof(XVContext), .priv_data_size = sizeof(XVContext),
.audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_WRAPPED_AVFRAME,
.write_header = xv_write_header, .write_header = xv_write_header,
.write_packet = xv_write_packet, .write_packet = xv_write_packet,
.write_uncoded_frame = xv_write_frame, .write_uncoded_frame = xv_write_frame,
.write_trailer = xv_write_trailer, .write_trailer = xv_write_trailer,
.control_message = xv_control_message, .control_message = xv_control_message,
.flags = AVFMT_NOFILE | AVFMT_VARIABLE_FPS | AVFMT_NOTIMESTAMPS,
.priv_class = &xv_class,
}; };

View File

@ -23,6 +23,7 @@
#include "libavcodec/codec_id.h" #include "libavcodec/codec_id.h"
#include "libavcodec/codec_par.h" #include "libavcodec/codec_par.h"
#include "avformat.h" #include "avformat.h"
#include "mux.h"
#include "rawenc.h" #include "rawenc.h"
static int a64_write_header(AVFormatContext *s) static int a64_write_header(AVFormatContext *s)
@ -59,11 +60,11 @@ static int a64_write_header(AVFormatContext *s)
return 0; return 0;
} }
const AVOutputFormat ff_a64_muxer = { const FFOutputFormat ff_a64_muxer = {
.name = "a64", .p.name = "a64",
.long_name = NULL_IF_CONFIG_SMALL("a64 - video for Commodore 64"), .p.long_name = NULL_IF_CONFIG_SMALL("a64 - video for Commodore 64"),
.extensions = "a64, A64", .p.extensions = "a64, A64",
.video_codec = AV_CODEC_ID_A64_MULTI, .p.video_codec = AV_CODEC_ID_A64_MULTI,
.write_header = a64_write_header, .write_header = a64_write_header,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
}; };

View File

@ -31,6 +31,7 @@
#include "avformat.h" #include "avformat.h"
#include "apetag.h" #include "apetag.h"
#include "id3v2.h" #include "id3v2.h"
#include "mux.h"
#define ADTS_HEADER_SIZE 7 #define ADTS_HEADER_SIZE 7
@ -232,18 +233,18 @@ static const AVClass adts_muxer_class = {
.version = LIBAVUTIL_VERSION_INT, .version = LIBAVUTIL_VERSION_INT,
}; };
const AVOutputFormat ff_adts_muxer = { const FFOutputFormat ff_adts_muxer = {
.name = "adts", .p.name = "adts",
.long_name = NULL_IF_CONFIG_SMALL("ADTS AAC (Advanced Audio Coding)"), .p.long_name = NULL_IF_CONFIG_SMALL("ADTS AAC (Advanced Audio Coding)"),
.mime_type = "audio/aac", .p.mime_type = "audio/aac",
.extensions = "aac,adts", .p.extensions = "aac,adts",
.priv_data_size = sizeof(ADTSContext), .priv_data_size = sizeof(ADTSContext),
.audio_codec = AV_CODEC_ID_AAC, .p.audio_codec = AV_CODEC_ID_AAC,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.init = adts_init, .init = adts_init,
.write_header = adts_write_header, .write_header = adts_write_header,
.write_packet = adts_write_packet, .write_packet = adts_write_packet,
.write_trailer = adts_write_trailer, .write_trailer = adts_write_trailer,
.priv_class = &adts_muxer_class, .p.priv_class = &adts_muxer_class,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };

View File

@ -30,6 +30,7 @@
#include "avio_internal.h" #include "avio_internal.h"
#include "isom.h" #include "isom.h"
#include "id3v2.h" #include "id3v2.h"
#include "mux.h"
typedef struct AIFFOutputContext { typedef struct AIFFOutputContext {
const AVClass *class; const AVClass *class;
@ -284,18 +285,18 @@ static const AVClass aiff_muxer_class = {
.version = LIBAVUTIL_VERSION_INT, .version = LIBAVUTIL_VERSION_INT,
}; };
const AVOutputFormat ff_aiff_muxer = { const FFOutputFormat ff_aiff_muxer = {
.name = "aiff", .p.name = "aiff",
.long_name = NULL_IF_CONFIG_SMALL("Audio IFF"), .p.long_name = NULL_IF_CONFIG_SMALL("Audio IFF"),
.mime_type = "audio/aiff", .p.mime_type = "audio/aiff",
.extensions = "aif,aiff,afc,aifc", .p.extensions = "aif,aiff,afc,aifc",
.priv_data_size = sizeof(AIFFOutputContext), .priv_data_size = sizeof(AIFFOutputContext),
.audio_codec = AV_CODEC_ID_PCM_S16BE, .p.audio_codec = AV_CODEC_ID_PCM_S16BE,
.video_codec = AV_CODEC_ID_PNG, .p.video_codec = AV_CODEC_ID_PNG,
.write_header = aiff_write_header, .write_header = aiff_write_header,
.write_packet = aiff_write_packet, .write_packet = aiff_write_packet,
.write_trailer = aiff_write_trailer, .write_trailer = aiff_write_trailer,
.deinit = aiff_deinit, .deinit = aiff_deinit,
.codec_tag = ff_aiff_codec_tags_list, .p.codec_tag = ff_aiff_codec_tags_list,
.priv_class = &aiff_muxer_class, .p.priv_class = &aiff_muxer_class,
}; };

View File

@ -25,82 +25,83 @@
#include "libavformat/internal.h" #include "libavformat/internal.h"
#include "avformat.h" #include "avformat.h"
#include "mux.h"
/* (de)muxers */ /* (de)muxers */
extern const AVOutputFormat ff_a64_muxer; extern const FFOutputFormat ff_a64_muxer;
extern const AVInputFormat ff_aa_demuxer; extern const AVInputFormat ff_aa_demuxer;
extern const AVInputFormat ff_aac_demuxer; extern const AVInputFormat ff_aac_demuxer;
extern const AVInputFormat ff_aax_demuxer; extern const AVInputFormat ff_aax_demuxer;
extern const AVInputFormat ff_ac3_demuxer; extern const AVInputFormat ff_ac3_demuxer;
extern const AVOutputFormat ff_ac3_muxer; extern const FFOutputFormat ff_ac3_muxer;
extern const AVInputFormat ff_ace_demuxer; extern const AVInputFormat ff_ace_demuxer;
extern const AVInputFormat ff_acm_demuxer; extern const AVInputFormat ff_acm_demuxer;
extern const AVInputFormat ff_act_demuxer; extern const AVInputFormat ff_act_demuxer;
extern const AVInputFormat ff_adf_demuxer; extern const AVInputFormat ff_adf_demuxer;
extern const AVInputFormat ff_adp_demuxer; extern const AVInputFormat ff_adp_demuxer;
extern const AVInputFormat ff_ads_demuxer; extern const AVInputFormat ff_ads_demuxer;
extern const AVOutputFormat ff_adts_muxer; extern const FFOutputFormat ff_adts_muxer;
extern const AVInputFormat ff_adx_demuxer; extern const AVInputFormat ff_adx_demuxer;
extern const AVOutputFormat ff_adx_muxer; extern const FFOutputFormat ff_adx_muxer;
extern const AVInputFormat ff_aea_demuxer; extern const AVInputFormat ff_aea_demuxer;
extern const AVInputFormat ff_afc_demuxer; extern const AVInputFormat ff_afc_demuxer;
extern const AVInputFormat ff_aiff_demuxer; extern const AVInputFormat ff_aiff_demuxer;
extern const AVOutputFormat ff_aiff_muxer; extern const FFOutputFormat ff_aiff_muxer;
extern const AVInputFormat ff_aix_demuxer; extern const AVInputFormat ff_aix_demuxer;
extern const AVInputFormat ff_alp_demuxer; extern const AVInputFormat ff_alp_demuxer;
extern const AVOutputFormat ff_alp_muxer; extern const FFOutputFormat ff_alp_muxer;
extern const AVInputFormat ff_amr_demuxer; extern const AVInputFormat ff_amr_demuxer;
extern const AVOutputFormat ff_amr_muxer; extern const FFOutputFormat ff_amr_muxer;
extern const AVInputFormat ff_amrnb_demuxer; extern const AVInputFormat ff_amrnb_demuxer;
extern const AVInputFormat ff_amrwb_demuxer; extern const AVInputFormat ff_amrwb_demuxer;
extern const AVOutputFormat ff_amv_muxer; extern const FFOutputFormat ff_amv_muxer;
extern const AVInputFormat ff_anm_demuxer; extern const AVInputFormat ff_anm_demuxer;
extern const AVInputFormat ff_apac_demuxer; extern const AVInputFormat ff_apac_demuxer;
extern const AVInputFormat ff_apc_demuxer; extern const AVInputFormat ff_apc_demuxer;
extern const AVInputFormat ff_ape_demuxer; extern const AVInputFormat ff_ape_demuxer;
extern const AVInputFormat ff_apm_demuxer; extern const AVInputFormat ff_apm_demuxer;
extern const AVOutputFormat ff_apm_muxer; extern const FFOutputFormat ff_apm_muxer;
extern const AVInputFormat ff_apng_demuxer; extern const AVInputFormat ff_apng_demuxer;
extern const AVOutputFormat ff_apng_muxer; extern const FFOutputFormat ff_apng_muxer;
extern const AVInputFormat ff_aptx_demuxer; extern const AVInputFormat ff_aptx_demuxer;
extern const AVOutputFormat ff_aptx_muxer; extern const FFOutputFormat ff_aptx_muxer;
extern const AVInputFormat ff_aptx_hd_demuxer; extern const AVInputFormat ff_aptx_hd_demuxer;
extern const AVOutputFormat ff_aptx_hd_muxer; extern const FFOutputFormat ff_aptx_hd_muxer;
extern const AVInputFormat ff_aqtitle_demuxer; extern const AVInputFormat ff_aqtitle_demuxer;
extern const AVInputFormat ff_argo_asf_demuxer; extern const AVInputFormat ff_argo_asf_demuxer;
extern const AVOutputFormat ff_argo_asf_muxer; extern const FFOutputFormat ff_argo_asf_muxer;
extern const AVInputFormat ff_argo_brp_demuxer; extern const AVInputFormat ff_argo_brp_demuxer;
extern const AVInputFormat ff_argo_cvg_demuxer; extern const AVInputFormat ff_argo_cvg_demuxer;
extern const AVOutputFormat ff_argo_cvg_muxer; extern const FFOutputFormat ff_argo_cvg_muxer;
extern const AVInputFormat ff_asf_demuxer; extern const AVInputFormat ff_asf_demuxer;
extern const AVOutputFormat ff_asf_muxer; extern const FFOutputFormat ff_asf_muxer;
extern const AVInputFormat ff_asf_o_demuxer; extern const AVInputFormat ff_asf_o_demuxer;
extern const AVInputFormat ff_ass_demuxer; extern const AVInputFormat ff_ass_demuxer;
extern const AVOutputFormat ff_ass_muxer; extern const FFOutputFormat ff_ass_muxer;
extern const AVInputFormat ff_ast_demuxer; extern const AVInputFormat ff_ast_demuxer;
extern const AVOutputFormat ff_ast_muxer; extern const FFOutputFormat ff_ast_muxer;
extern const AVOutputFormat ff_asf_stream_muxer; extern const FFOutputFormat ff_asf_stream_muxer;
extern const AVInputFormat ff_au_demuxer; extern const AVInputFormat ff_au_demuxer;
extern const AVOutputFormat ff_au_muxer; extern const FFOutputFormat ff_au_muxer;
extern const AVInputFormat ff_av1_demuxer; extern const AVInputFormat ff_av1_demuxer;
extern const AVInputFormat ff_avi_demuxer; extern const AVInputFormat ff_avi_demuxer;
extern const AVOutputFormat ff_avi_muxer; extern const FFOutputFormat ff_avi_muxer;
extern const AVOutputFormat ff_avif_muxer; extern const FFOutputFormat ff_avif_muxer;
extern const AVInputFormat ff_avisynth_demuxer; extern const AVInputFormat ff_avisynth_demuxer;
extern const AVOutputFormat ff_avm2_muxer; extern const FFOutputFormat ff_avm2_muxer;
extern const AVInputFormat ff_avr_demuxer; extern const AVInputFormat ff_avr_demuxer;
extern const AVInputFormat ff_avs_demuxer; extern const AVInputFormat ff_avs_demuxer;
extern const AVInputFormat ff_avs2_demuxer; extern const AVInputFormat ff_avs2_demuxer;
extern const AVOutputFormat ff_avs2_muxer; extern const FFOutputFormat ff_avs2_muxer;
extern const AVInputFormat ff_avs3_demuxer; extern const AVInputFormat ff_avs3_demuxer;
extern const AVOutputFormat ff_avs3_muxer; extern const FFOutputFormat ff_avs3_muxer;
extern const AVInputFormat ff_bethsoftvid_demuxer; extern const AVInputFormat ff_bethsoftvid_demuxer;
extern const AVInputFormat ff_bfi_demuxer; extern const AVInputFormat ff_bfi_demuxer;
extern const AVInputFormat ff_bintext_demuxer; extern const AVInputFormat ff_bintext_demuxer;
extern const AVInputFormat ff_bink_demuxer; extern const AVInputFormat ff_bink_demuxer;
extern const AVInputFormat ff_binka_demuxer; extern const AVInputFormat ff_binka_demuxer;
extern const AVInputFormat ff_bit_demuxer; extern const AVInputFormat ff_bit_demuxer;
extern const AVOutputFormat ff_bit_muxer; extern const FFOutputFormat ff_bit_muxer;
extern const AVInputFormat ff_bitpacked_demuxer; extern const AVInputFormat ff_bitpacked_demuxer;
extern const AVInputFormat ff_bmv_demuxer; extern const AVInputFormat ff_bmv_demuxer;
extern const AVInputFormat ff_bfstm_demuxer; extern const AVInputFormat ff_bfstm_demuxer;
@ -109,190 +110,190 @@ extern const AVInputFormat ff_boa_demuxer;
extern const AVInputFormat ff_bonk_demuxer; extern const AVInputFormat ff_bonk_demuxer;
extern const AVInputFormat ff_c93_demuxer; extern const AVInputFormat ff_c93_demuxer;
extern const AVInputFormat ff_caf_demuxer; extern const AVInputFormat ff_caf_demuxer;
extern const AVOutputFormat ff_caf_muxer; extern const FFOutputFormat ff_caf_muxer;
extern const AVInputFormat ff_cavsvideo_demuxer; extern const AVInputFormat ff_cavsvideo_demuxer;
extern const AVOutputFormat ff_cavsvideo_muxer; extern const FFOutputFormat ff_cavsvideo_muxer;
extern const AVInputFormat ff_cdg_demuxer; extern const AVInputFormat ff_cdg_demuxer;
extern const AVInputFormat ff_cdxl_demuxer; extern const AVInputFormat ff_cdxl_demuxer;
extern const AVInputFormat ff_cine_demuxer; extern const AVInputFormat ff_cine_demuxer;
extern const AVInputFormat ff_codec2_demuxer; extern const AVInputFormat ff_codec2_demuxer;
extern const AVOutputFormat ff_codec2_muxer; extern const FFOutputFormat ff_codec2_muxer;
extern const AVInputFormat ff_codec2raw_demuxer; extern const AVInputFormat ff_codec2raw_demuxer;
extern const AVOutputFormat ff_codec2raw_muxer; extern const FFOutputFormat ff_codec2raw_muxer;
extern const AVInputFormat ff_concat_demuxer; extern const AVInputFormat ff_concat_demuxer;
extern const AVOutputFormat ff_crc_muxer; extern const FFOutputFormat ff_crc_muxer;
extern const AVInputFormat ff_dash_demuxer; extern const AVInputFormat ff_dash_demuxer;
extern const AVOutputFormat ff_dash_muxer; extern const FFOutputFormat ff_dash_muxer;
extern const AVInputFormat ff_data_demuxer; extern const AVInputFormat ff_data_demuxer;
extern const AVOutputFormat ff_data_muxer; extern const FFOutputFormat ff_data_muxer;
extern const AVInputFormat ff_daud_demuxer; extern const AVInputFormat ff_daud_demuxer;
extern const AVOutputFormat ff_daud_muxer; extern const FFOutputFormat ff_daud_muxer;
extern const AVInputFormat ff_dcstr_demuxer; extern const AVInputFormat ff_dcstr_demuxer;
extern const AVInputFormat ff_derf_demuxer; extern const AVInputFormat ff_derf_demuxer;
extern const AVInputFormat ff_dfa_demuxer; extern const AVInputFormat ff_dfa_demuxer;
extern const AVInputFormat ff_dfpwm_demuxer; extern const AVInputFormat ff_dfpwm_demuxer;
extern const AVOutputFormat ff_dfpwm_muxer; extern const FFOutputFormat ff_dfpwm_muxer;
extern const AVInputFormat ff_dhav_demuxer; extern const AVInputFormat ff_dhav_demuxer;
extern const AVInputFormat ff_dirac_demuxer; extern const AVInputFormat ff_dirac_demuxer;
extern const AVOutputFormat ff_dirac_muxer; extern const FFOutputFormat ff_dirac_muxer;
extern const AVInputFormat ff_dnxhd_demuxer; extern const AVInputFormat ff_dnxhd_demuxer;
extern const AVOutputFormat ff_dnxhd_muxer; extern const FFOutputFormat ff_dnxhd_muxer;
extern const AVInputFormat ff_dsf_demuxer; extern const AVInputFormat ff_dsf_demuxer;
extern const AVInputFormat ff_dsicin_demuxer; extern const AVInputFormat ff_dsicin_demuxer;
extern const AVInputFormat ff_dss_demuxer; extern const AVInputFormat ff_dss_demuxer;
extern const AVInputFormat ff_dts_demuxer; extern const AVInputFormat ff_dts_demuxer;
extern const AVOutputFormat ff_dts_muxer; extern const FFOutputFormat ff_dts_muxer;
extern const AVInputFormat ff_dtshd_demuxer; extern const AVInputFormat ff_dtshd_demuxer;
extern const AVInputFormat ff_dv_demuxer; extern const AVInputFormat ff_dv_demuxer;
extern const AVOutputFormat ff_dv_muxer; extern const FFOutputFormat ff_dv_muxer;
extern const AVInputFormat ff_dvbsub_demuxer; extern const AVInputFormat ff_dvbsub_demuxer;
extern const AVInputFormat ff_dvbtxt_demuxer; extern const AVInputFormat ff_dvbtxt_demuxer;
extern const AVInputFormat ff_dxa_demuxer; extern const AVInputFormat ff_dxa_demuxer;
extern const AVInputFormat ff_ea_demuxer; extern const AVInputFormat ff_ea_demuxer;
extern const AVInputFormat ff_ea_cdata_demuxer; extern const AVInputFormat ff_ea_cdata_demuxer;
extern const AVInputFormat ff_eac3_demuxer; extern const AVInputFormat ff_eac3_demuxer;
extern const AVOutputFormat ff_eac3_muxer; extern const FFOutputFormat ff_eac3_muxer;
extern const AVInputFormat ff_epaf_demuxer; extern const AVInputFormat ff_epaf_demuxer;
extern const AVOutputFormat ff_f4v_muxer; extern const FFOutputFormat ff_f4v_muxer;
extern const AVInputFormat ff_ffmetadata_demuxer; extern const AVInputFormat ff_ffmetadata_demuxer;
extern const AVOutputFormat ff_ffmetadata_muxer; extern const FFOutputFormat ff_ffmetadata_muxer;
extern const AVOutputFormat ff_fifo_muxer; extern const FFOutputFormat ff_fifo_muxer;
extern const AVOutputFormat ff_fifo_test_muxer; extern const FFOutputFormat ff_fifo_test_muxer;
extern const AVInputFormat ff_filmstrip_demuxer; extern const AVInputFormat ff_filmstrip_demuxer;
extern const AVOutputFormat ff_filmstrip_muxer; extern const FFOutputFormat ff_filmstrip_muxer;
extern const AVInputFormat ff_fits_demuxer; extern const AVInputFormat ff_fits_demuxer;
extern const AVOutputFormat ff_fits_muxer; extern const FFOutputFormat ff_fits_muxer;
extern const AVInputFormat ff_flac_demuxer; extern const AVInputFormat ff_flac_demuxer;
extern const AVOutputFormat ff_flac_muxer; extern const FFOutputFormat ff_flac_muxer;
extern const AVInputFormat ff_flic_demuxer; extern const AVInputFormat ff_flic_demuxer;
extern const AVInputFormat ff_flv_demuxer; extern const AVInputFormat ff_flv_demuxer;
extern const AVOutputFormat ff_flv_muxer; extern const FFOutputFormat ff_flv_muxer;
extern const AVInputFormat ff_live_flv_demuxer; extern const AVInputFormat ff_live_flv_demuxer;
extern const AVInputFormat ff_fourxm_demuxer; extern const AVInputFormat ff_fourxm_demuxer;
extern const AVOutputFormat ff_framecrc_muxer; extern const FFOutputFormat ff_framecrc_muxer;
extern const AVOutputFormat ff_framehash_muxer; extern const FFOutputFormat ff_framehash_muxer;
extern const AVOutputFormat ff_framemd5_muxer; extern const FFOutputFormat ff_framemd5_muxer;
extern const AVInputFormat ff_frm_demuxer; extern const AVInputFormat ff_frm_demuxer;
extern const AVInputFormat ff_fsb_demuxer; extern const AVInputFormat ff_fsb_demuxer;
extern const AVInputFormat ff_fwse_demuxer; extern const AVInputFormat ff_fwse_demuxer;
extern const AVInputFormat ff_g722_demuxer; extern const AVInputFormat ff_g722_demuxer;
extern const AVOutputFormat ff_g722_muxer; extern const FFOutputFormat ff_g722_muxer;
extern const AVInputFormat ff_g723_1_demuxer; extern const AVInputFormat ff_g723_1_demuxer;
extern const AVOutputFormat ff_g723_1_muxer; extern const FFOutputFormat ff_g723_1_muxer;
extern const AVInputFormat ff_g726_demuxer; extern const AVInputFormat ff_g726_demuxer;
extern const AVOutputFormat ff_g726_muxer; extern const FFOutputFormat ff_g726_muxer;
extern const AVInputFormat ff_g726le_demuxer; extern const AVInputFormat ff_g726le_demuxer;
extern const AVOutputFormat ff_g726le_muxer; extern const FFOutputFormat ff_g726le_muxer;
extern const AVInputFormat ff_g729_demuxer; extern const AVInputFormat ff_g729_demuxer;
extern const AVInputFormat ff_gdv_demuxer; extern const AVInputFormat ff_gdv_demuxer;
extern const AVInputFormat ff_genh_demuxer; extern const AVInputFormat ff_genh_demuxer;
extern const AVInputFormat ff_gif_demuxer; extern const AVInputFormat ff_gif_demuxer;
extern const AVOutputFormat ff_gif_muxer; extern const FFOutputFormat ff_gif_muxer;
extern const AVInputFormat ff_gsm_demuxer; extern const AVInputFormat ff_gsm_demuxer;
extern const AVOutputFormat ff_gsm_muxer; extern const FFOutputFormat ff_gsm_muxer;
extern const AVInputFormat ff_gxf_demuxer; extern const AVInputFormat ff_gxf_demuxer;
extern const AVOutputFormat ff_gxf_muxer; extern const FFOutputFormat ff_gxf_muxer;
extern const AVInputFormat ff_h261_demuxer; extern const AVInputFormat ff_h261_demuxer;
extern const AVOutputFormat ff_h261_muxer; extern const FFOutputFormat ff_h261_muxer;
extern const AVInputFormat ff_h263_demuxer; extern const AVInputFormat ff_h263_demuxer;
extern const AVOutputFormat ff_h263_muxer; extern const FFOutputFormat ff_h263_muxer;
extern const AVInputFormat ff_h264_demuxer; extern const AVInputFormat ff_h264_demuxer;
extern const AVOutputFormat ff_h264_muxer; extern const FFOutputFormat ff_h264_muxer;
extern const AVOutputFormat ff_hash_muxer; extern const FFOutputFormat ff_hash_muxer;
extern const AVInputFormat ff_hca_demuxer; extern const AVInputFormat ff_hca_demuxer;
extern const AVInputFormat ff_hcom_demuxer; extern const AVInputFormat ff_hcom_demuxer;
extern const AVOutputFormat ff_hds_muxer; extern const FFOutputFormat ff_hds_muxer;
extern const AVInputFormat ff_hevc_demuxer; extern const AVInputFormat ff_hevc_demuxer;
extern const AVOutputFormat ff_hevc_muxer; extern const FFOutputFormat ff_hevc_muxer;
extern const AVInputFormat ff_hls_demuxer; extern const AVInputFormat ff_hls_demuxer;
extern const AVOutputFormat ff_hls_muxer; extern const FFOutputFormat ff_hls_muxer;
extern const AVInputFormat ff_hnm_demuxer; extern const AVInputFormat ff_hnm_demuxer;
extern const AVInputFormat ff_ico_demuxer; extern const AVInputFormat ff_ico_demuxer;
extern const AVOutputFormat ff_ico_muxer; extern const FFOutputFormat ff_ico_muxer;
extern const AVInputFormat ff_idcin_demuxer; extern const AVInputFormat ff_idcin_demuxer;
extern const AVInputFormat ff_idf_demuxer; extern const AVInputFormat ff_idf_demuxer;
extern const AVInputFormat ff_iff_demuxer; extern const AVInputFormat ff_iff_demuxer;
extern const AVInputFormat ff_ifv_demuxer; extern const AVInputFormat ff_ifv_demuxer;
extern const AVInputFormat ff_ilbc_demuxer; extern const AVInputFormat ff_ilbc_demuxer;
extern const AVOutputFormat ff_ilbc_muxer; extern const FFOutputFormat ff_ilbc_muxer;
extern const AVInputFormat ff_image2_demuxer; extern const AVInputFormat ff_image2_demuxer;
extern const AVOutputFormat ff_image2_muxer; extern const FFOutputFormat ff_image2_muxer;
extern const AVInputFormat ff_image2pipe_demuxer; extern const AVInputFormat ff_image2pipe_demuxer;
extern const AVOutputFormat ff_image2pipe_muxer; extern const FFOutputFormat ff_image2pipe_muxer;
extern const AVInputFormat ff_image2_alias_pix_demuxer; extern const AVInputFormat ff_image2_alias_pix_demuxer;
extern const AVInputFormat ff_image2_brender_pix_demuxer; extern const AVInputFormat ff_image2_brender_pix_demuxer;
extern const AVInputFormat ff_imf_demuxer; extern const AVInputFormat ff_imf_demuxer;
extern const AVInputFormat ff_ingenient_demuxer; extern const AVInputFormat ff_ingenient_demuxer;
extern const AVInputFormat ff_ipmovie_demuxer; extern const AVInputFormat ff_ipmovie_demuxer;
extern const AVOutputFormat ff_ipod_muxer; extern const FFOutputFormat ff_ipod_muxer;
extern const AVInputFormat ff_ipu_demuxer; extern const AVInputFormat ff_ipu_demuxer;
extern const AVInputFormat ff_ircam_demuxer; extern const AVInputFormat ff_ircam_demuxer;
extern const AVOutputFormat ff_ircam_muxer; extern const FFOutputFormat ff_ircam_muxer;
extern const AVOutputFormat ff_ismv_muxer; extern const FFOutputFormat ff_ismv_muxer;
extern const AVInputFormat ff_iss_demuxer; extern const AVInputFormat ff_iss_demuxer;
extern const AVInputFormat ff_iv8_demuxer; extern const AVInputFormat ff_iv8_demuxer;
extern const AVInputFormat ff_ivf_demuxer; extern const AVInputFormat ff_ivf_demuxer;
extern const AVOutputFormat ff_ivf_muxer; extern const FFOutputFormat ff_ivf_muxer;
extern const AVInputFormat ff_ivr_demuxer; extern const AVInputFormat ff_ivr_demuxer;
extern const AVInputFormat ff_jacosub_demuxer; extern const AVInputFormat ff_jacosub_demuxer;
extern const AVOutputFormat ff_jacosub_muxer; extern const FFOutputFormat ff_jacosub_muxer;
extern const AVInputFormat ff_jv_demuxer; extern const AVInputFormat ff_jv_demuxer;
extern const AVInputFormat ff_kux_demuxer; extern const AVInputFormat ff_kux_demuxer;
extern const AVInputFormat ff_kvag_demuxer; extern const AVInputFormat ff_kvag_demuxer;
extern const AVOutputFormat ff_kvag_muxer; extern const FFOutputFormat ff_kvag_muxer;
extern const AVInputFormat ff_laf_demuxer; extern const AVInputFormat ff_laf_demuxer;
extern const AVOutputFormat ff_latm_muxer; extern const FFOutputFormat ff_latm_muxer;
extern const AVInputFormat ff_lmlm4_demuxer; extern const AVInputFormat ff_lmlm4_demuxer;
extern const AVInputFormat ff_loas_demuxer; extern const AVInputFormat ff_loas_demuxer;
extern const AVInputFormat ff_luodat_demuxer; extern const AVInputFormat ff_luodat_demuxer;
extern const AVInputFormat ff_lrc_demuxer; extern const AVInputFormat ff_lrc_demuxer;
extern const AVOutputFormat ff_lrc_muxer; extern const FFOutputFormat ff_lrc_muxer;
extern const AVInputFormat ff_lvf_demuxer; extern const AVInputFormat ff_lvf_demuxer;
extern const AVInputFormat ff_lxf_demuxer; extern const AVInputFormat ff_lxf_demuxer;
extern const AVInputFormat ff_m4v_demuxer; extern const AVInputFormat ff_m4v_demuxer;
extern const AVOutputFormat ff_m4v_muxer; extern const FFOutputFormat ff_m4v_muxer;
extern const AVInputFormat ff_mca_demuxer; extern const AVInputFormat ff_mca_demuxer;
extern const AVInputFormat ff_mcc_demuxer; extern const AVInputFormat ff_mcc_demuxer;
extern const AVOutputFormat ff_md5_muxer; extern const FFOutputFormat ff_md5_muxer;
extern const AVInputFormat ff_matroska_demuxer; extern const AVInputFormat ff_matroska_demuxer;
extern const AVOutputFormat ff_matroska_muxer; extern const FFOutputFormat ff_matroska_muxer;
extern const AVOutputFormat ff_matroska_audio_muxer; extern const FFOutputFormat ff_matroska_audio_muxer;
extern const AVInputFormat ff_mgsts_demuxer; extern const AVInputFormat ff_mgsts_demuxer;
extern const AVInputFormat ff_microdvd_demuxer; extern const AVInputFormat ff_microdvd_demuxer;
extern const AVOutputFormat ff_microdvd_muxer; extern const FFOutputFormat ff_microdvd_muxer;
extern const AVInputFormat ff_mjpeg_demuxer; extern const AVInputFormat ff_mjpeg_demuxer;
extern const AVOutputFormat ff_mjpeg_muxer; extern const FFOutputFormat ff_mjpeg_muxer;
extern const AVInputFormat ff_mjpeg_2000_demuxer; extern const AVInputFormat ff_mjpeg_2000_demuxer;
extern const AVInputFormat ff_mlp_demuxer; extern const AVInputFormat ff_mlp_demuxer;
extern const AVOutputFormat ff_mlp_muxer; extern const FFOutputFormat ff_mlp_muxer;
extern const AVInputFormat ff_mlv_demuxer; extern const AVInputFormat ff_mlv_demuxer;
extern const AVInputFormat ff_mm_demuxer; extern const AVInputFormat ff_mm_demuxer;
extern const AVInputFormat ff_mmf_demuxer; extern const AVInputFormat ff_mmf_demuxer;
extern const AVOutputFormat ff_mmf_muxer; extern const FFOutputFormat ff_mmf_muxer;
extern const AVInputFormat ff_mods_demuxer; extern const AVInputFormat ff_mods_demuxer;
extern const AVInputFormat ff_moflex_demuxer; extern const AVInputFormat ff_moflex_demuxer;
extern const AVInputFormat ff_mov_demuxer; extern const AVInputFormat ff_mov_demuxer;
extern const AVOutputFormat ff_mov_muxer; extern const FFOutputFormat ff_mov_muxer;
extern const AVOutputFormat ff_mp2_muxer; extern const FFOutputFormat ff_mp2_muxer;
extern const AVInputFormat ff_mp3_demuxer; extern const AVInputFormat ff_mp3_demuxer;
extern const AVOutputFormat ff_mp3_muxer; extern const FFOutputFormat ff_mp3_muxer;
extern const AVOutputFormat ff_mp4_muxer; extern const FFOutputFormat ff_mp4_muxer;
extern const AVInputFormat ff_mpc_demuxer; extern const AVInputFormat ff_mpc_demuxer;
extern const AVInputFormat ff_mpc8_demuxer; extern const AVInputFormat ff_mpc8_demuxer;
extern const AVOutputFormat ff_mpeg1system_muxer; extern const FFOutputFormat ff_mpeg1system_muxer;
extern const AVOutputFormat ff_mpeg1vcd_muxer; extern const FFOutputFormat ff_mpeg1vcd_muxer;
extern const AVOutputFormat ff_mpeg1video_muxer; extern const FFOutputFormat ff_mpeg1video_muxer;
extern const AVOutputFormat ff_mpeg2dvd_muxer; extern const FFOutputFormat ff_mpeg2dvd_muxer;
extern const AVOutputFormat ff_mpeg2svcd_muxer; extern const FFOutputFormat ff_mpeg2svcd_muxer;
extern const AVOutputFormat ff_mpeg2video_muxer; extern const FFOutputFormat ff_mpeg2video_muxer;
extern const AVOutputFormat ff_mpeg2vob_muxer; extern const FFOutputFormat ff_mpeg2vob_muxer;
extern const AVInputFormat ff_mpegps_demuxer; extern const AVInputFormat ff_mpegps_demuxer;
extern const AVInputFormat ff_mpegts_demuxer; extern const AVInputFormat ff_mpegts_demuxer;
extern const AVOutputFormat ff_mpegts_muxer; extern const FFOutputFormat ff_mpegts_muxer;
extern const AVInputFormat ff_mpegtsraw_demuxer; extern const AVInputFormat ff_mpegtsraw_demuxer;
extern const AVInputFormat ff_mpegvideo_demuxer; extern const AVInputFormat ff_mpegvideo_demuxer;
extern const AVInputFormat ff_mpjpeg_demuxer; extern const AVInputFormat ff_mpjpeg_demuxer;
extern const AVOutputFormat ff_mpjpeg_muxer; extern const FFOutputFormat ff_mpjpeg_muxer;
extern const AVInputFormat ff_mpl2_demuxer; extern const AVInputFormat ff_mpl2_demuxer;
extern const AVInputFormat ff_mpsub_demuxer; extern const AVInputFormat ff_mpsub_demuxer;
extern const AVInputFormat ff_msf_demuxer; extern const AVInputFormat ff_msf_demuxer;
@ -304,114 +305,114 @@ extern const AVInputFormat ff_musx_demuxer;
extern const AVInputFormat ff_mv_demuxer; extern const AVInputFormat ff_mv_demuxer;
extern const AVInputFormat ff_mvi_demuxer; extern const AVInputFormat ff_mvi_demuxer;
extern const AVInputFormat ff_mxf_demuxer; extern const AVInputFormat ff_mxf_demuxer;
extern const AVOutputFormat ff_mxf_muxer; extern const FFOutputFormat ff_mxf_muxer;
extern const AVOutputFormat ff_mxf_d10_muxer; extern const FFOutputFormat ff_mxf_d10_muxer;
extern const AVOutputFormat ff_mxf_opatom_muxer; extern const FFOutputFormat ff_mxf_opatom_muxer;
extern const AVInputFormat ff_mxg_demuxer; extern const AVInputFormat ff_mxg_demuxer;
extern const AVInputFormat ff_nc_demuxer; extern const AVInputFormat ff_nc_demuxer;
extern const AVInputFormat ff_nistsphere_demuxer; extern const AVInputFormat ff_nistsphere_demuxer;
extern const AVInputFormat ff_nsp_demuxer; extern const AVInputFormat ff_nsp_demuxer;
extern const AVInputFormat ff_nsv_demuxer; extern const AVInputFormat ff_nsv_demuxer;
extern const AVOutputFormat ff_null_muxer; extern const FFOutputFormat ff_null_muxer;
extern const AVInputFormat ff_nut_demuxer; extern const AVInputFormat ff_nut_demuxer;
extern const AVOutputFormat ff_nut_muxer; extern const FFOutputFormat ff_nut_muxer;
extern const AVInputFormat ff_nuv_demuxer; extern const AVInputFormat ff_nuv_demuxer;
extern const AVInputFormat ff_obu_demuxer; extern const AVInputFormat ff_obu_demuxer;
extern const AVOutputFormat ff_obu_muxer; extern const FFOutputFormat ff_obu_muxer;
extern const AVOutputFormat ff_oga_muxer; extern const FFOutputFormat ff_oga_muxer;
extern const AVInputFormat ff_ogg_demuxer; extern const AVInputFormat ff_ogg_demuxer;
extern const AVOutputFormat ff_ogg_muxer; extern const FFOutputFormat ff_ogg_muxer;
extern const AVOutputFormat ff_ogv_muxer; extern const FFOutputFormat ff_ogv_muxer;
extern const AVInputFormat ff_oma_demuxer; extern const AVInputFormat ff_oma_demuxer;
extern const AVOutputFormat ff_oma_muxer; extern const FFOutputFormat ff_oma_muxer;
extern const AVOutputFormat ff_opus_muxer; extern const FFOutputFormat ff_opus_muxer;
extern const AVInputFormat ff_paf_demuxer; extern const AVInputFormat ff_paf_demuxer;
extern const AVInputFormat ff_pcm_alaw_demuxer; extern const AVInputFormat ff_pcm_alaw_demuxer;
extern const AVOutputFormat ff_pcm_alaw_muxer; extern const FFOutputFormat ff_pcm_alaw_muxer;
extern const AVInputFormat ff_pcm_mulaw_demuxer; extern const AVInputFormat ff_pcm_mulaw_demuxer;
extern const AVOutputFormat ff_pcm_mulaw_muxer; extern const FFOutputFormat ff_pcm_mulaw_muxer;
extern const AVInputFormat ff_pcm_vidc_demuxer; extern const AVInputFormat ff_pcm_vidc_demuxer;
extern const AVOutputFormat ff_pcm_vidc_muxer; extern const FFOutputFormat ff_pcm_vidc_muxer;
extern const AVInputFormat ff_pcm_f64be_demuxer; extern const AVInputFormat ff_pcm_f64be_demuxer;
extern const AVOutputFormat ff_pcm_f64be_muxer; extern const FFOutputFormat ff_pcm_f64be_muxer;
extern const AVInputFormat ff_pcm_f64le_demuxer; extern const AVInputFormat ff_pcm_f64le_demuxer;
extern const AVOutputFormat ff_pcm_f64le_muxer; extern const FFOutputFormat ff_pcm_f64le_muxer;
extern const AVInputFormat ff_pcm_f32be_demuxer; extern const AVInputFormat ff_pcm_f32be_demuxer;
extern const AVOutputFormat ff_pcm_f32be_muxer; extern const FFOutputFormat ff_pcm_f32be_muxer;
extern const AVInputFormat ff_pcm_f32le_demuxer; extern const AVInputFormat ff_pcm_f32le_demuxer;
extern const AVOutputFormat ff_pcm_f32le_muxer; extern const FFOutputFormat ff_pcm_f32le_muxer;
extern const AVInputFormat ff_pcm_s32be_demuxer; extern const AVInputFormat ff_pcm_s32be_demuxer;
extern const AVOutputFormat ff_pcm_s32be_muxer; extern const FFOutputFormat ff_pcm_s32be_muxer;
extern const AVInputFormat ff_pcm_s32le_demuxer; extern const AVInputFormat ff_pcm_s32le_demuxer;
extern const AVOutputFormat ff_pcm_s32le_muxer; extern const FFOutputFormat ff_pcm_s32le_muxer;
extern const AVInputFormat ff_pcm_s24be_demuxer; extern const AVInputFormat ff_pcm_s24be_demuxer;
extern const AVOutputFormat ff_pcm_s24be_muxer; extern const FFOutputFormat ff_pcm_s24be_muxer;
extern const AVInputFormat ff_pcm_s24le_demuxer; extern const AVInputFormat ff_pcm_s24le_demuxer;
extern const AVOutputFormat ff_pcm_s24le_muxer; extern const FFOutputFormat ff_pcm_s24le_muxer;
extern const AVInputFormat ff_pcm_s16be_demuxer; extern const AVInputFormat ff_pcm_s16be_demuxer;
extern const AVOutputFormat ff_pcm_s16be_muxer; extern const FFOutputFormat ff_pcm_s16be_muxer;
extern const AVInputFormat ff_pcm_s16le_demuxer; extern const AVInputFormat ff_pcm_s16le_demuxer;
extern const AVOutputFormat ff_pcm_s16le_muxer; extern const FFOutputFormat ff_pcm_s16le_muxer;
extern const AVInputFormat ff_pcm_s8_demuxer; extern const AVInputFormat ff_pcm_s8_demuxer;
extern const AVOutputFormat ff_pcm_s8_muxer; extern const FFOutputFormat ff_pcm_s8_muxer;
extern const AVInputFormat ff_pcm_u32be_demuxer; extern const AVInputFormat ff_pcm_u32be_demuxer;
extern const AVOutputFormat ff_pcm_u32be_muxer; extern const FFOutputFormat ff_pcm_u32be_muxer;
extern const AVInputFormat ff_pcm_u32le_demuxer; extern const AVInputFormat ff_pcm_u32le_demuxer;
extern const AVOutputFormat ff_pcm_u32le_muxer; extern const FFOutputFormat ff_pcm_u32le_muxer;
extern const AVInputFormat ff_pcm_u24be_demuxer; extern const AVInputFormat ff_pcm_u24be_demuxer;
extern const AVOutputFormat ff_pcm_u24be_muxer; extern const FFOutputFormat ff_pcm_u24be_muxer;
extern const AVInputFormat ff_pcm_u24le_demuxer; extern const AVInputFormat ff_pcm_u24le_demuxer;
extern const AVOutputFormat ff_pcm_u24le_muxer; extern const FFOutputFormat ff_pcm_u24le_muxer;
extern const AVInputFormat ff_pcm_u16be_demuxer; extern const AVInputFormat ff_pcm_u16be_demuxer;
extern const AVOutputFormat ff_pcm_u16be_muxer; extern const FFOutputFormat ff_pcm_u16be_muxer;
extern const AVInputFormat ff_pcm_u16le_demuxer; extern const AVInputFormat ff_pcm_u16le_demuxer;
extern const AVOutputFormat ff_pcm_u16le_muxer; extern const FFOutputFormat ff_pcm_u16le_muxer;
extern const AVInputFormat ff_pcm_u8_demuxer; extern const AVInputFormat ff_pcm_u8_demuxer;
extern const AVOutputFormat ff_pcm_u8_muxer; extern const FFOutputFormat ff_pcm_u8_muxer;
extern const AVInputFormat ff_pjs_demuxer; extern const AVInputFormat ff_pjs_demuxer;
extern const AVInputFormat ff_pmp_demuxer; extern const AVInputFormat ff_pmp_demuxer;
extern const AVInputFormat ff_pp_bnk_demuxer; extern const AVInputFormat ff_pp_bnk_demuxer;
extern const AVOutputFormat ff_psp_muxer; extern const FFOutputFormat ff_psp_muxer;
extern const AVInputFormat ff_pva_demuxer; extern const AVInputFormat ff_pva_demuxer;
extern const AVInputFormat ff_pvf_demuxer; extern const AVInputFormat ff_pvf_demuxer;
extern const AVInputFormat ff_qcp_demuxer; extern const AVInputFormat ff_qcp_demuxer;
extern const AVInputFormat ff_r3d_demuxer; extern const AVInputFormat ff_r3d_demuxer;
extern const AVInputFormat ff_rawvideo_demuxer; extern const AVInputFormat ff_rawvideo_demuxer;
extern const AVOutputFormat ff_rawvideo_muxer; extern const FFOutputFormat ff_rawvideo_muxer;
extern const AVInputFormat ff_realtext_demuxer; extern const AVInputFormat ff_realtext_demuxer;
extern const AVInputFormat ff_redspark_demuxer; extern const AVInputFormat ff_redspark_demuxer;
extern const AVInputFormat ff_rl2_demuxer; extern const AVInputFormat ff_rl2_demuxer;
extern const AVInputFormat ff_rm_demuxer; extern const AVInputFormat ff_rm_demuxer;
extern const AVOutputFormat ff_rm_muxer; extern const FFOutputFormat ff_rm_muxer;
extern const AVInputFormat ff_roq_demuxer; extern const AVInputFormat ff_roq_demuxer;
extern const AVOutputFormat ff_roq_muxer; extern const FFOutputFormat ff_roq_muxer;
extern const AVInputFormat ff_rpl_demuxer; extern const AVInputFormat ff_rpl_demuxer;
extern const AVInputFormat ff_rsd_demuxer; extern const AVInputFormat ff_rsd_demuxer;
extern const AVInputFormat ff_rso_demuxer; extern const AVInputFormat ff_rso_demuxer;
extern const AVOutputFormat ff_rso_muxer; extern const FFOutputFormat ff_rso_muxer;
extern const AVInputFormat ff_rtp_demuxer; extern const AVInputFormat ff_rtp_demuxer;
extern const AVOutputFormat ff_rtp_muxer; extern const FFOutputFormat ff_rtp_muxer;
extern const AVOutputFormat ff_rtp_mpegts_muxer; extern const FFOutputFormat ff_rtp_mpegts_muxer;
extern const AVInputFormat ff_rtsp_demuxer; extern const AVInputFormat ff_rtsp_demuxer;
extern const AVOutputFormat ff_rtsp_muxer; extern const FFOutputFormat ff_rtsp_muxer;
extern const AVInputFormat ff_s337m_demuxer; extern const AVInputFormat ff_s337m_demuxer;
extern const AVInputFormat ff_sami_demuxer; extern const AVInputFormat ff_sami_demuxer;
extern const AVInputFormat ff_sap_demuxer; extern const AVInputFormat ff_sap_demuxer;
extern const AVOutputFormat ff_sap_muxer; extern const FFOutputFormat ff_sap_muxer;
extern const AVInputFormat ff_sbc_demuxer; extern const AVInputFormat ff_sbc_demuxer;
extern const AVOutputFormat ff_sbc_muxer; extern const FFOutputFormat ff_sbc_muxer;
extern const AVInputFormat ff_sbg_demuxer; extern const AVInputFormat ff_sbg_demuxer;
extern const AVInputFormat ff_scc_demuxer; extern const AVInputFormat ff_scc_demuxer;
extern const AVOutputFormat ff_scc_muxer; extern const FFOutputFormat ff_scc_muxer;
extern const AVInputFormat ff_scd_demuxer; extern const AVInputFormat ff_scd_demuxer;
extern const AVInputFormat ff_sdp_demuxer; extern const AVInputFormat ff_sdp_demuxer;
extern const AVInputFormat ff_sdr2_demuxer; extern const AVInputFormat ff_sdr2_demuxer;
extern const AVInputFormat ff_sds_demuxer; extern const AVInputFormat ff_sds_demuxer;
extern const AVInputFormat ff_sdx_demuxer; extern const AVInputFormat ff_sdx_demuxer;
extern const AVInputFormat ff_segafilm_demuxer; extern const AVInputFormat ff_segafilm_demuxer;
extern const AVOutputFormat ff_segafilm_muxer; extern const FFOutputFormat ff_segafilm_muxer;
extern const AVOutputFormat ff_segment_muxer; extern const FFOutputFormat ff_segment_muxer;
extern const AVOutputFormat ff_stream_segment_muxer; extern const FFOutputFormat ff_stream_segment_muxer;
extern const AVInputFormat ff_ser_demuxer; extern const AVInputFormat ff_ser_demuxer;
extern const AVInputFormat ff_sga_demuxer; extern const AVInputFormat ff_sga_demuxer;
extern const AVInputFormat ff_shorten_demuxer; extern const AVInputFormat ff_shorten_demuxer;
@ -420,86 +421,86 @@ extern const AVInputFormat ff_simbiosis_imx_demuxer;
extern const AVInputFormat ff_sln_demuxer; extern const AVInputFormat ff_sln_demuxer;
extern const AVInputFormat ff_smacker_demuxer; extern const AVInputFormat ff_smacker_demuxer;
extern const AVInputFormat ff_smjpeg_demuxer; extern const AVInputFormat ff_smjpeg_demuxer;
extern const AVOutputFormat ff_smjpeg_muxer; extern const FFOutputFormat ff_smjpeg_muxer;
extern const AVOutputFormat ff_smoothstreaming_muxer; extern const FFOutputFormat ff_smoothstreaming_muxer;
extern const AVInputFormat ff_smush_demuxer; extern const AVInputFormat ff_smush_demuxer;
extern const AVInputFormat ff_sol_demuxer; extern const AVInputFormat ff_sol_demuxer;
extern const AVInputFormat ff_sox_demuxer; extern const AVInputFormat ff_sox_demuxer;
extern const AVOutputFormat ff_sox_muxer; extern const FFOutputFormat ff_sox_muxer;
extern const AVOutputFormat ff_spx_muxer; extern const FFOutputFormat ff_spx_muxer;
extern const AVInputFormat ff_spdif_demuxer; extern const AVInputFormat ff_spdif_demuxer;
extern const AVOutputFormat ff_spdif_muxer; extern const FFOutputFormat ff_spdif_muxer;
extern const AVInputFormat ff_srt_demuxer; extern const AVInputFormat ff_srt_demuxer;
extern const AVOutputFormat ff_srt_muxer; extern const FFOutputFormat ff_srt_muxer;
extern const AVInputFormat ff_str_demuxer; extern const AVInputFormat ff_str_demuxer;
extern const AVInputFormat ff_stl_demuxer; extern const AVInputFormat ff_stl_demuxer;
extern const AVOutputFormat ff_streamhash_muxer; extern const FFOutputFormat ff_streamhash_muxer;
extern const AVInputFormat ff_subviewer1_demuxer; extern const AVInputFormat ff_subviewer1_demuxer;
extern const AVInputFormat ff_subviewer_demuxer; extern const AVInputFormat ff_subviewer_demuxer;
extern const AVInputFormat ff_sup_demuxer; extern const AVInputFormat ff_sup_demuxer;
extern const AVOutputFormat ff_sup_muxer; extern const FFOutputFormat ff_sup_muxer;
extern const AVInputFormat ff_svag_demuxer; extern const AVInputFormat ff_svag_demuxer;
extern const AVInputFormat ff_svs_demuxer; extern const AVInputFormat ff_svs_demuxer;
extern const AVInputFormat ff_swf_demuxer; extern const AVInputFormat ff_swf_demuxer;
extern const AVOutputFormat ff_swf_muxer; extern const FFOutputFormat ff_swf_muxer;
extern const AVInputFormat ff_tak_demuxer; extern const AVInputFormat ff_tak_demuxer;
extern const AVOutputFormat ff_tee_muxer; extern const FFOutputFormat ff_tee_muxer;
extern const AVInputFormat ff_tedcaptions_demuxer; extern const AVInputFormat ff_tedcaptions_demuxer;
extern const AVOutputFormat ff_tg2_muxer; extern const FFOutputFormat ff_tg2_muxer;
extern const AVOutputFormat ff_tgp_muxer; extern const FFOutputFormat ff_tgp_muxer;
extern const AVInputFormat ff_thp_demuxer; extern const AVInputFormat ff_thp_demuxer;
extern const AVInputFormat ff_threedostr_demuxer; extern const AVInputFormat ff_threedostr_demuxer;
extern const AVInputFormat ff_tiertexseq_demuxer; extern const AVInputFormat ff_tiertexseq_demuxer;
extern const AVOutputFormat ff_mkvtimestamp_v2_muxer; extern const FFOutputFormat ff_mkvtimestamp_v2_muxer;
extern const AVInputFormat ff_tmv_demuxer; extern const AVInputFormat ff_tmv_demuxer;
extern const AVInputFormat ff_truehd_demuxer; extern const AVInputFormat ff_truehd_demuxer;
extern const AVOutputFormat ff_truehd_muxer; extern const FFOutputFormat ff_truehd_muxer;
extern const AVInputFormat ff_tta_demuxer; extern const AVInputFormat ff_tta_demuxer;
extern const AVOutputFormat ff_tta_muxer; extern const FFOutputFormat ff_tta_muxer;
extern const AVOutputFormat ff_ttml_muxer; extern const FFOutputFormat ff_ttml_muxer;
extern const AVInputFormat ff_txd_demuxer; extern const AVInputFormat ff_txd_demuxer;
extern const AVInputFormat ff_tty_demuxer; extern const AVInputFormat ff_tty_demuxer;
extern const AVInputFormat ff_ty_demuxer; extern const AVInputFormat ff_ty_demuxer;
extern const AVOutputFormat ff_uncodedframecrc_muxer; extern const FFOutputFormat ff_uncodedframecrc_muxer;
extern const AVInputFormat ff_v210_demuxer; extern const AVInputFormat ff_v210_demuxer;
extern const AVInputFormat ff_v210x_demuxer; extern const AVInputFormat ff_v210x_demuxer;
extern const AVInputFormat ff_vag_demuxer; extern const AVInputFormat ff_vag_demuxer;
extern const AVInputFormat ff_vc1_demuxer; extern const AVInputFormat ff_vc1_demuxer;
extern const AVOutputFormat ff_vc1_muxer; extern const FFOutputFormat ff_vc1_muxer;
extern const AVInputFormat ff_vc1t_demuxer; extern const AVInputFormat ff_vc1t_demuxer;
extern const AVOutputFormat ff_vc1t_muxer; extern const FFOutputFormat ff_vc1t_muxer;
extern const AVInputFormat ff_vividas_demuxer; extern const AVInputFormat ff_vividas_demuxer;
extern const AVInputFormat ff_vivo_demuxer; extern const AVInputFormat ff_vivo_demuxer;
extern const AVInputFormat ff_vmd_demuxer; extern const AVInputFormat ff_vmd_demuxer;
extern const AVInputFormat ff_vobsub_demuxer; extern const AVInputFormat ff_vobsub_demuxer;
extern const AVInputFormat ff_voc_demuxer; extern const AVInputFormat ff_voc_demuxer;
extern const AVOutputFormat ff_voc_muxer; extern const FFOutputFormat ff_voc_muxer;
extern const AVInputFormat ff_vpk_demuxer; extern const AVInputFormat ff_vpk_demuxer;
extern const AVInputFormat ff_vplayer_demuxer; extern const AVInputFormat ff_vplayer_demuxer;
extern const AVInputFormat ff_vqf_demuxer; extern const AVInputFormat ff_vqf_demuxer;
extern const AVInputFormat ff_w64_demuxer; extern const AVInputFormat ff_w64_demuxer;
extern const AVOutputFormat ff_w64_muxer; extern const FFOutputFormat ff_w64_muxer;
extern const AVInputFormat ff_wady_demuxer; extern const AVInputFormat ff_wady_demuxer;
extern const AVInputFormat ff_wavarc_demuxer; extern const AVInputFormat ff_wavarc_demuxer;
extern const AVInputFormat ff_wav_demuxer; extern const AVInputFormat ff_wav_demuxer;
extern const AVOutputFormat ff_wav_muxer; extern const FFOutputFormat ff_wav_muxer;
extern const AVInputFormat ff_wc3_demuxer; extern const AVInputFormat ff_wc3_demuxer;
extern const AVOutputFormat ff_webm_muxer; extern const FFOutputFormat ff_webm_muxer;
extern const AVInputFormat ff_webm_dash_manifest_demuxer; extern const AVInputFormat ff_webm_dash_manifest_demuxer;
extern const AVOutputFormat ff_webm_dash_manifest_muxer; extern const FFOutputFormat ff_webm_dash_manifest_muxer;
extern const AVOutputFormat ff_webm_chunk_muxer; extern const FFOutputFormat ff_webm_chunk_muxer;
extern const AVOutputFormat ff_webp_muxer; extern const FFOutputFormat ff_webp_muxer;
extern const AVInputFormat ff_webvtt_demuxer; extern const AVInputFormat ff_webvtt_demuxer;
extern const AVOutputFormat ff_webvtt_muxer; extern const FFOutputFormat ff_webvtt_muxer;
extern const AVInputFormat ff_wsaud_demuxer; extern const AVInputFormat ff_wsaud_demuxer;
extern const AVOutputFormat ff_wsaud_muxer; extern const FFOutputFormat ff_wsaud_muxer;
extern const AVInputFormat ff_wsd_demuxer; extern const AVInputFormat ff_wsd_demuxer;
extern const AVInputFormat ff_wsvqa_demuxer; extern const AVInputFormat ff_wsvqa_demuxer;
extern const AVInputFormat ff_wtv_demuxer; extern const AVInputFormat ff_wtv_demuxer;
extern const AVOutputFormat ff_wtv_muxer; extern const FFOutputFormat ff_wtv_muxer;
extern const AVInputFormat ff_wve_demuxer; extern const AVInputFormat ff_wve_demuxer;
extern const AVInputFormat ff_wv_demuxer; extern const AVInputFormat ff_wv_demuxer;
extern const AVOutputFormat ff_wv_muxer; extern const FFOutputFormat ff_wv_muxer;
extern const AVInputFormat ff_xa_demuxer; extern const AVInputFormat ff_xa_demuxer;
extern const AVInputFormat ff_xbin_demuxer; extern const AVInputFormat ff_xbin_demuxer;
extern const AVInputFormat ff_xmd_demuxer; extern const AVInputFormat ff_xmd_demuxer;
@ -508,7 +509,7 @@ extern const AVInputFormat ff_xvag_demuxer;
extern const AVInputFormat ff_xwma_demuxer; extern const AVInputFormat ff_xwma_demuxer;
extern const AVInputFormat ff_yop_demuxer; extern const AVInputFormat ff_yop_demuxer;
extern const AVInputFormat ff_yuv4mpegpipe_demuxer; extern const AVInputFormat ff_yuv4mpegpipe_demuxer;
extern const AVOutputFormat ff_yuv4mpegpipe_muxer; extern const FFOutputFormat ff_yuv4mpegpipe_muxer;
/* image demuxers */ /* image demuxers */
extern const AVInputFormat ff_image_bmp_pipe_demuxer; extern const AVInputFormat ff_image_bmp_pipe_demuxer;
extern const AVInputFormat ff_image_cri_pipe_demuxer; extern const AVInputFormat ff_image_cri_pipe_demuxer;
@ -548,7 +549,7 @@ extern const AVInputFormat ff_image_xpm_pipe_demuxer;
extern const AVInputFormat ff_image_xwd_pipe_demuxer; extern const AVInputFormat ff_image_xwd_pipe_demuxer;
/* external libraries */ /* external libraries */
extern const AVOutputFormat ff_chromaprint_muxer; extern const FFOutputFormat ff_chromaprint_muxer;
extern const AVInputFormat ff_libgme_demuxer; extern const AVInputFormat ff_libgme_demuxer;
extern const AVInputFormat ff_libmodplug_demuxer; extern const AVInputFormat ff_libmodplug_demuxer;
extern const AVInputFormat ff_libopenmpt_demuxer; extern const AVInputFormat ff_libopenmpt_demuxer;
@ -564,19 +565,21 @@ const AVOutputFormat *av_muxer_iterate(void **opaque)
{ {
static const uintptr_t size = sizeof(muxer_list)/sizeof(muxer_list[0]) - 1; static const uintptr_t size = sizeof(muxer_list)/sizeof(muxer_list[0]) - 1;
uintptr_t i = (uintptr_t)*opaque; uintptr_t i = (uintptr_t)*opaque;
const AVOutputFormat *f = NULL; const FFOutputFormat *f = NULL;
uintptr_t tmp; uintptr_t tmp;
if (i < size) { if (i < size) {
f = muxer_list[i]; f = muxer_list[i];
} else if (tmp = atomic_load_explicit(&outdev_list_intptr, memory_order_relaxed)) { } else if (tmp = atomic_load_explicit(&outdev_list_intptr, memory_order_relaxed)) {
const AVOutputFormat *const *outdev_list = (const AVOutputFormat *const *)tmp; const FFOutputFormat *const *outdev_list = (const FFOutputFormat *const *)tmp;
f = outdev_list[i - size]; f = outdev_list[i - size];
} }
if (f) if (f) {
*opaque = (void*)(i + 1); *opaque = (void*)(i + 1);
return f; return &f->p;
}
return NULL;
} }
const AVInputFormat *av_demuxer_iterate(void **opaque) const AVInputFormat *av_demuxer_iterate(void **opaque)
@ -598,7 +601,7 @@ const AVInputFormat *av_demuxer_iterate(void **opaque)
return f; return f;
} }
void avpriv_register_devices(const AVOutputFormat * const o[], const AVInputFormat * const i[]) void avpriv_register_devices(const FFOutputFormat * const o[], const AVInputFormat * const i[])
{ {
atomic_store_explicit(&outdev_list_intptr, (uintptr_t)o, memory_order_relaxed); atomic_store_explicit(&outdev_list_intptr, (uintptr_t)o, memory_order_relaxed);
atomic_store_explicit(&indev_list_intptr, (uintptr_t)i, memory_order_relaxed); atomic_store_explicit(&indev_list_intptr, (uintptr_t)i, memory_order_relaxed);

View File

@ -25,6 +25,7 @@
#include "libavutil/channel_layout.h" #include "libavutil/channel_layout.h"
#include "avformat.h" #include "avformat.h"
#include "internal.h" #include "internal.h"
#include "mux.h"
#include "rawenc.h" #include "rawenc.h"
#include "libavutil/intreadwrite.h" #include "libavutil/intreadwrite.h"
#include "libavutil/internal.h" #include "libavutil/internal.h"
@ -290,16 +291,16 @@ static const AVClass alp_muxer_class = {
.version = LIBAVUTIL_VERSION_INT .version = LIBAVUTIL_VERSION_INT
}; };
const AVOutputFormat ff_alp_muxer = { const FFOutputFormat ff_alp_muxer = {
.name = "alp", .p.name = "alp",
.long_name = NULL_IF_CONFIG_SMALL("LEGO Racers ALP"), .p.long_name = NULL_IF_CONFIG_SMALL("LEGO Racers ALP"),
.extensions = "tun,pcm", .p.extensions = "tun,pcm",
.audio_codec = AV_CODEC_ID_ADPCM_IMA_ALP, .p.audio_codec = AV_CODEC_ID_ADPCM_IMA_ALP,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.p.priv_class = &alp_muxer_class,
.init = alp_write_init, .init = alp_write_init,
.write_header = alp_write_header, .write_header = alp_write_header,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.priv_class = &alp_muxer_class,
.priv_data_size = sizeof(ALPMuxContext) .priv_data_size = sizeof(ALPMuxContext)
}; };
#endif #endif

View File

@ -30,6 +30,7 @@ Write and read amr data according to RFC3267, http://www.ietf.org/rfc/rfc3267.tx
#include "avformat.h" #include "avformat.h"
#include "avio_internal.h" #include "avio_internal.h"
#include "internal.h" #include "internal.h"
#include "mux.h"
#include "rawdec.h" #include "rawdec.h"
#include "rawenc.h" #include "rawenc.h"
@ -266,15 +267,15 @@ const AVInputFormat ff_amrwb_demuxer = {
#endif #endif
#if CONFIG_AMR_MUXER #if CONFIG_AMR_MUXER
const AVOutputFormat ff_amr_muxer = { const FFOutputFormat ff_amr_muxer = {
.name = "amr", .p.name = "amr",
.long_name = NULL_IF_CONFIG_SMALL("3GPP AMR"), .p.long_name = NULL_IF_CONFIG_SMALL("3GPP AMR"),
.mime_type = "audio/amr", .p.mime_type = "audio/amr",
.extensions = "amr", .p.extensions = "amr",
.audio_codec = AV_CODEC_ID_AMR_NB, .p.audio_codec = AV_CODEC_ID_AMR_NB,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.p.flags = AVFMT_NOTIMESTAMPS,
.write_header = amr_write_header, .write_header = amr_write_header,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif

View File

@ -20,6 +20,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/ */
#include "avformat.h" #include "avformat.h"
#include "mux.h"
#include "riff.h" #include "riff.h"
#include "internal.h" #include "internal.h"
#include "avio_internal.h" #include "avio_internal.h"
@ -401,14 +402,14 @@ static int amv_write_trailer(AVFormatContext *s)
return 0; return 0;
} }
const AVOutputFormat ff_amv_muxer = { const FFOutputFormat ff_amv_muxer = {
.name = "amv", .p.name = "amv",
.long_name = NULL_IF_CONFIG_SMALL("AMV"), .p.long_name = NULL_IF_CONFIG_SMALL("AMV"),
.mime_type = "video/amv", .p.mime_type = "video/amv",
.extensions = "amv", .p.extensions = "amv",
.priv_data_size = sizeof(AMVContext), .priv_data_size = sizeof(AMVContext),
.audio_codec = AV_CODEC_ID_ADPCM_IMA_AMV, .p.audio_codec = AV_CODEC_ID_ADPCM_IMA_AMV,
.video_codec = AV_CODEC_ID_AMV, .p.video_codec = AV_CODEC_ID_AMV,
.init = amv_init, .init = amv_init,
.deinit = amv_deinit, .deinit = amv_deinit,
.write_header = amv_write_header, .write_header = amv_write_header,

View File

@ -24,6 +24,7 @@
#include "avformat.h" #include "avformat.h"
#include "internal.h" #include "internal.h"
#include "mux.h"
#include "rawenc.h" #include "rawenc.h"
#include "libavutil/channel_layout.h" #include "libavutil/channel_layout.h"
#include "libavutil/internal.h" #include "libavutil/internal.h"
@ -303,12 +304,12 @@ static int apm_write_trailer(AVFormatContext *s)
return 0; return 0;
} }
const AVOutputFormat ff_apm_muxer = { const FFOutputFormat ff_apm_muxer = {
.name = "apm", .p.name = "apm",
.long_name = NULL_IF_CONFIG_SMALL("Ubisoft Rayman 2 APM"), .p.long_name = NULL_IF_CONFIG_SMALL("Ubisoft Rayman 2 APM"),
.extensions = "apm", .p.extensions = "apm",
.audio_codec = AV_CODEC_ID_ADPCM_IMA_APM, .p.audio_codec = AV_CODEC_ID_ADPCM_IMA_APM,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.init = apm_write_init, .init = apm_write_init,
.write_header = apm_write_header, .write_header = apm_write_header,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,

View File

@ -22,6 +22,7 @@
*/ */
#include "avformat.h" #include "avformat.h"
#include "mux.h"
#include "libavutil/avassert.h" #include "libavutil/avassert.h"
#include "libavutil/crc.h" #include "libavutil/crc.h"
#include "libavutil/intreadwrite.h" #include "libavutil/intreadwrite.h"
@ -306,18 +307,18 @@ static const AVClass apng_muxer_class = {
.option = options, .option = options,
}; };
const AVOutputFormat ff_apng_muxer = { const FFOutputFormat ff_apng_muxer = {
.name = "apng", .p.name = "apng",
.long_name = NULL_IF_CONFIG_SMALL("Animated Portable Network Graphics"), .p.long_name = NULL_IF_CONFIG_SMALL("Animated Portable Network Graphics"),
.mime_type = "image/png", .p.mime_type = "image/png",
.extensions = "apng", .p.extensions = "apng",
.priv_data_size = sizeof(APNGMuxContext), .priv_data_size = sizeof(APNGMuxContext),
.audio_codec = AV_CODEC_ID_NONE, .p.audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_APNG, .p.video_codec = AV_CODEC_ID_APNG,
.write_header = apng_write_header, .write_header = apng_write_header,
.write_packet = apng_write_packet, .write_packet = apng_write_packet,
.write_trailer = apng_write_trailer, .write_trailer = apng_write_trailer,
.deinit = apng_deinit, .deinit = apng_deinit,
.priv_class = &apng_muxer_class, .p.priv_class = &apng_muxer_class,
.flags = AVFMT_VARIABLE_FPS, .p.flags = AVFMT_VARIABLE_FPS,
}; };

View File

@ -25,6 +25,7 @@
#include "libavutil/avstring.h" #include "libavutil/avstring.h"
#include "avformat.h" #include "avformat.h"
#include "internal.h" #include "internal.h"
#include "mux.h"
#include "libavutil/channel_layout.h" #include "libavutil/channel_layout.h"
#include "libavutil/intreadwrite.h" #include "libavutil/intreadwrite.h"
#include "libavutil/avassert.h" #include "libavutil/avassert.h"
@ -470,20 +471,20 @@ static const AVClass argo_asf_muxer_class = {
.version = LIBAVUTIL_VERSION_INT .version = LIBAVUTIL_VERSION_INT
}; };
const AVOutputFormat ff_argo_asf_muxer = { const FFOutputFormat ff_argo_asf_muxer = {
.name = "argo_asf", .p.name = "argo_asf",
.long_name = NULL_IF_CONFIG_SMALL("Argonaut Games ASF"), .p.long_name = NULL_IF_CONFIG_SMALL("Argonaut Games ASF"),
/* /*
* NB: Can't do this as it conflicts with the actual ASF format. * NB: Can't do this as it conflicts with the actual ASF format.
* .extensions = "asf", * .p.extensions = "asf",
*/ */
.audio_codec = AV_CODEC_ID_ADPCM_ARGO, .p.audio_codec = AV_CODEC_ID_ADPCM_ARGO,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.p.priv_class = &argo_asf_muxer_class,
.init = argo_asf_write_init, .init = argo_asf_write_init,
.write_header = argo_asf_write_header, .write_header = argo_asf_write_header,
.write_packet = argo_asf_write_packet, .write_packet = argo_asf_write_packet,
.write_trailer = argo_asf_write_trailer, .write_trailer = argo_asf_write_trailer,
.priv_class = &argo_asf_muxer_class,
.priv_data_size = sizeof(ArgoASFMuxContext) .priv_data_size = sizeof(ArgoASFMuxContext)
}; };
#endif #endif

View File

@ -26,6 +26,7 @@
#include "libavutil/channel_layout.h" #include "libavutil/channel_layout.h"
#include "avformat.h" #include "avformat.h"
#include "internal.h" #include "internal.h"
#include "mux.h"
#include "libavutil/opt.h" #include "libavutil/opt.h"
#include "libavutil/intreadwrite.h" #include "libavutil/intreadwrite.h"
@ -400,17 +401,17 @@ static const AVClass argo_cvg_muxer_class = {
.version = LIBAVUTIL_VERSION_INT .version = LIBAVUTIL_VERSION_INT
}; };
const AVOutputFormat ff_argo_cvg_muxer = { const FFOutputFormat ff_argo_cvg_muxer = {
.name = "argo_cvg", .p.name = "argo_cvg",
.long_name = NULL_IF_CONFIG_SMALL("Argonaut Games CVG"), .p.long_name = NULL_IF_CONFIG_SMALL("Argonaut Games CVG"),
.extensions = "cvg", .p.extensions = "cvg",
.audio_codec = AV_CODEC_ID_ADPCM_PSX, .p.audio_codec = AV_CODEC_ID_ADPCM_PSX,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.p.priv_class = &argo_cvg_muxer_class,
.init = argo_cvg_write_init, .init = argo_cvg_write_init,
.write_header = argo_cvg_write_header, .write_header = argo_cvg_write_header,
.write_packet = argo_cvg_write_packet, .write_packet = argo_cvg_write_packet,
.write_trailer = argo_cvg_write_trailer, .write_trailer = argo_cvg_write_trailer,
.priv_class = &argo_cvg_muxer_class,
.priv_data_size = sizeof(ArgoCVGMuxContext), .priv_data_size = sizeof(ArgoCVGMuxContext),
}; };
#endif #endif

View File

@ -1129,39 +1129,39 @@ static const AVClass asf_muxer_class = {
}; };
#if CONFIG_ASF_MUXER #if CONFIG_ASF_MUXER
const AVOutputFormat ff_asf_muxer = { const FFOutputFormat ff_asf_muxer = {
.name = "asf", .p.name = "asf",
.long_name = NULL_IF_CONFIG_SMALL("ASF (Advanced / Active Streaming Format)"), .p.long_name = NULL_IF_CONFIG_SMALL("ASF (Advanced / Active Streaming Format)"),
.mime_type = "video/x-ms-asf", .p.mime_type = "video/x-ms-asf",
.extensions = "asf,wmv,wma", .p.extensions = "asf,wmv,wma",
.p.audio_codec = AV_CODEC_ID_WMAV2,
.p.video_codec = AV_CODEC_ID_MSMPEG4V3,
.p.flags = AVFMT_GLOBALHEADER,
.p.codec_tag = asf_codec_tags,
.p.priv_class = &asf_muxer_class,
.priv_data_size = sizeof(ASFContext), .priv_data_size = sizeof(ASFContext),
.audio_codec = AV_CODEC_ID_WMAV2,
.video_codec = AV_CODEC_ID_MSMPEG4V3,
.write_header = asf_write_header, .write_header = asf_write_header,
.write_packet = asf_write_packet, .write_packet = asf_write_packet,
.write_trailer = asf_write_trailer, .write_trailer = asf_write_trailer,
.flags = AVFMT_GLOBALHEADER,
.codec_tag = asf_codec_tags,
.priv_class = &asf_muxer_class,
.deinit = asf_deinit, .deinit = asf_deinit,
}; };
#endif /* CONFIG_ASF_MUXER */ #endif /* CONFIG_ASF_MUXER */
#if CONFIG_ASF_STREAM_MUXER #if CONFIG_ASF_STREAM_MUXER
const AVOutputFormat ff_asf_stream_muxer = { const FFOutputFormat ff_asf_stream_muxer = {
.name = "asf_stream", .p.name = "asf_stream",
.long_name = NULL_IF_CONFIG_SMALL("ASF (Advanced / Active Streaming Format)"), .p.long_name = NULL_IF_CONFIG_SMALL("ASF (Advanced / Active Streaming Format)"),
.mime_type = "video/x-ms-asf", .p.mime_type = "video/x-ms-asf",
.extensions = "asf,wmv,wma", .p.extensions = "asf,wmv,wma",
.priv_data_size = sizeof(ASFContext), .priv_data_size = sizeof(ASFContext),
.audio_codec = AV_CODEC_ID_WMAV2, .p.audio_codec = AV_CODEC_ID_WMAV2,
.video_codec = AV_CODEC_ID_MSMPEG4V3, .p.video_codec = AV_CODEC_ID_MSMPEG4V3,
.write_header = asf_write_stream_header, .write_header = asf_write_stream_header,
.write_packet = asf_write_packet, .write_packet = asf_write_packet,
.write_trailer = asf_write_trailer, .write_trailer = asf_write_trailer,
.flags = AVFMT_GLOBALHEADER, .p.flags = AVFMT_GLOBALHEADER,
.codec_tag = asf_codec_tags, .p.codec_tag = asf_codec_tags,
.priv_class = &asf_muxer_class, .p.priv_class = &asf_muxer_class,
.deinit = asf_deinit, .deinit = asf_deinit,
}; };
#endif /* CONFIG_ASF_STREAM_MUXER */ #endif /* CONFIG_ASF_STREAM_MUXER */

View File

@ -22,6 +22,7 @@
#include "libavutil/avstring.h" #include "libavutil/avstring.h"
#include "avformat.h" #include "avformat.h"
#include "internal.h" #include "internal.h"
#include "mux.h"
#include "libavutil/opt.h" #include "libavutil/opt.h"
@ -226,16 +227,16 @@ static const AVClass ass_class = {
.version = LIBAVUTIL_VERSION_INT, .version = LIBAVUTIL_VERSION_INT,
}; };
const AVOutputFormat ff_ass_muxer = { const FFOutputFormat ff_ass_muxer = {
.name = "ass", .p.name = "ass",
.long_name = NULL_IF_CONFIG_SMALL("SSA (SubStation Alpha) subtitle"), .p.long_name = NULL_IF_CONFIG_SMALL("SSA (SubStation Alpha) subtitle"),
.mime_type = "text/x-ass", .p.mime_type = "text/x-ass",
.extensions = "ass,ssa", .p.extensions = "ass,ssa",
.p.subtitle_codec = AV_CODEC_ID_ASS,
.p.flags = AVFMT_GLOBALHEADER | AVFMT_NOTIMESTAMPS | AVFMT_TS_NONSTRICT,
.p.priv_class = &ass_class,
.priv_data_size = sizeof(ASSContext), .priv_data_size = sizeof(ASSContext),
.subtitle_codec = AV_CODEC_ID_ASS,
.write_header = write_header, .write_header = write_header,
.write_packet = write_packet, .write_packet = write_packet,
.write_trailer = write_trailer, .write_trailer = write_trailer,
.flags = AVFMT_GLOBALHEADER | AVFMT_NOTIMESTAMPS | AVFMT_TS_NONSTRICT,
.priv_class = &ass_class,
}; };

View File

@ -23,6 +23,7 @@
#include "avio_internal.h" #include "avio_internal.h"
#include "internal.h" #include "internal.h"
#include "ast.h" #include "ast.h"
#include "mux.h"
#include "libavutil/mathematics.h" #include "libavutil/mathematics.h"
#include "libavutil/opt.h" #include "libavutil/opt.h"
@ -194,16 +195,16 @@ static const AVClass ast_muxer_class = {
.version = LIBAVUTIL_VERSION_INT, .version = LIBAVUTIL_VERSION_INT,
}; };
const AVOutputFormat ff_ast_muxer = { const FFOutputFormat ff_ast_muxer = {
.name = "ast", .p.name = "ast",
.long_name = NULL_IF_CONFIG_SMALL("AST (Audio Stream)"), .p.long_name = NULL_IF_CONFIG_SMALL("AST (Audio Stream)"),
.extensions = "ast", .p.extensions = "ast",
.priv_data_size = sizeof(ASTMuxContext), .priv_data_size = sizeof(ASTMuxContext),
.audio_codec = AV_CODEC_ID_PCM_S16BE_PLANAR, .p.audio_codec = AV_CODEC_ID_PCM_S16BE_PLANAR,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.write_header = ast_write_header, .write_header = ast_write_header,
.write_packet = ast_write_packet, .write_packet = ast_write_packet,
.write_trailer = ast_write_trailer, .write_trailer = ast_write_trailer,
.priv_class = &ast_muxer_class, .p.priv_class = &ast_muxer_class,
.codec_tag = ff_ast_codec_tags_list, .p.codec_tag = ff_ast_codec_tags_list,
}; };

View File

@ -33,6 +33,7 @@
#include "avformat.h" #include "avformat.h"
#include "internal.h" #include "internal.h"
#include "avio_internal.h" #include "avio_internal.h"
#include "mux.h"
#include "pcm.h" #include "pcm.h"
#include "libavutil/avassert.h" #include "libavutil/avassert.h"
@ -331,19 +332,19 @@ static int au_write_trailer(AVFormatContext *s)
return 0; return 0;
} }
const AVOutputFormat ff_au_muxer = { const FFOutputFormat ff_au_muxer = {
.name = "au", .p.name = "au",
.long_name = NULL_IF_CONFIG_SMALL("Sun AU"), .p.long_name = NULL_IF_CONFIG_SMALL("Sun AU"),
.mime_type = "audio/basic", .p.mime_type = "audio/basic",
.extensions = "au", .p.extensions = "au",
.p.codec_tag = au_codec_tags,
.p.audio_codec = AV_CODEC_ID_PCM_S16BE,
.p.video_codec = AV_CODEC_ID_NONE,
.p.flags = AVFMT_NOTIMESTAMPS,
.priv_data_size = sizeof(AUContext), .priv_data_size = sizeof(AUContext),
.audio_codec = AV_CODEC_ID_PCM_S16BE,
.video_codec = AV_CODEC_ID_NONE,
.write_header = au_write_header, .write_header = au_write_header,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.write_trailer = au_write_trailer, .write_trailer = au_write_trailer,
.codec_tag = au_codec_tags,
.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif /* CONFIG_AU_MUXER */ #endif /* CONFIG_AU_MUXER */

View File

@ -35,6 +35,7 @@
#include "avformat.h" #include "avformat.h"
#include "avio.h" #include "avio.h"
#include "demux.h" #include "demux.h"
#include "mux.h"
#include "internal.h" #include "internal.h"
void ff_free_stream(AVStream **pst) void ff_free_stream(AVStream **pst)
@ -100,8 +101,8 @@ void avformat_free_context(AVFormatContext *s)
return; return;
si = ffformatcontext(s); si = ffformatcontext(s);
if (s->oformat && s->oformat->deinit && si->initialized) if (s->oformat && ffofmt(s->oformat)->deinit && si->initialized)
s->oformat->deinit(s); ffofmt(s->oformat)->deinit(s);
av_opt_free(s); av_opt_free(s);
if (s->iformat && s->iformat->priv_class && s->priv_data) if (s->iformat && s->iformat->priv_class && s->priv_data)

View File

@ -328,10 +328,8 @@
#endif #endif
struct AVFormatContext; struct AVFormatContext;
struct AVStream;
struct AVDeviceInfoList; struct AVDeviceInfoList;
struct AVDeviceCapabilitiesQuery;
/** /**
* @defgroup metadata_api Public Metadata API * @defgroup metadata_api Public Metadata API
@ -536,113 +534,6 @@ typedef struct AVOutputFormat {
const AVClass *priv_class; ///< AVClass for the private context const AVClass *priv_class; ///< AVClass for the private context
/*****************************************************************
* No fields below this line are part of the public API. They
* may not be used outside of libavformat and can be changed and
* removed at will.
* New public fields should be added right above.
*****************************************************************
*/
/**
* size of private data so that it can be allocated in the wrapper
*/
int priv_data_size;
/**
* Internal flags. See FF_FMT_FLAG_* in internal.h.
*/
int flags_internal;
int (*write_header)(struct AVFormatContext *);
/**
* Write a packet. If AVFMT_ALLOW_FLUSH is set in flags,
* pkt can be NULL in order to flush data buffered in the muxer.
* When flushing, return 0 if there still is more data to flush,
* or 1 if everything was flushed and there is no more buffered
* data.
*/
int (*write_packet)(struct AVFormatContext *, AVPacket *pkt);
int (*write_trailer)(struct AVFormatContext *);
/**
* A format-specific function for interleavement.
* If unset, packets will be interleaved by dts.
*
* @param s An AVFormatContext for output. pkt will be added to
* resp. taken from its packet buffer.
* @param[in,out] pkt A packet to be interleaved if has_packet is set;
* also used to return packets. If no packet is returned
* (e.g. on error), pkt is blank on return.
* @param flush 1 if no further packets are available as input and
* all remaining packets should be output.
* @param has_packet If set, pkt contains a packet to be interleaved
* on input; otherwise pkt is blank on input.
* @return 1 if a packet was output, 0 if no packet could be output,
* < 0 if an error occurred
*/
int (*interleave_packet)(struct AVFormatContext *s, AVPacket *pkt,
int flush, int has_packet);
/**
* Test if the given codec can be stored in this container.
*
* @return 1 if the codec is supported, 0 if it is not.
* A negative number if unknown.
* MKTAG('A', 'P', 'I', 'C') if the codec is only supported as AV_DISPOSITION_ATTACHED_PIC
*/
int (*query_codec)(enum AVCodecID id, int std_compliance);
void (*get_output_timestamp)(struct AVFormatContext *s, int stream,
int64_t *dts, int64_t *wall);
/**
* Allows sending messages from application to device.
*/
int (*control_message)(struct AVFormatContext *s, int type,
void *data, size_t data_size);
/**
* Write an uncoded AVFrame.
*
* See av_write_uncoded_frame() for details.
*
* The library will free *frame afterwards, but the muxer can prevent it
* by setting the pointer to NULL.
*/
int (*write_uncoded_frame)(struct AVFormatContext *, int stream_index,
AVFrame **frame, unsigned flags);
/**
* Returns device list with it properties.
* @see avdevice_list_devices() for more details.
*/
int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list);
/**
* Initialize format. May allocate data here, and set any AVFormatContext or
* AVStream parameters that need to be set before packets are sent.
* This method must not write output.
*
* Return 0 if streams were fully configured, 1 if not, negative AVERROR on failure
*
* Any allocations made here must be freed in deinit().
*/
int (*init)(struct AVFormatContext *);
/**
* Deinitialize format. If present, this is called whenever the muxer is being
* destroyed, regardless of whether or not the header has been written.
*
* If a trailer is being written, this is called after write_trailer().
*
* This is called if init() fails as well.
*/
void (*deinit)(struct AVFormatContext *);
/**
* Set up any necessary bitstream filtering and extract any extra data needed
* for the global header.
*
* @note pkt might have been directly forwarded by a meta-muxer; therefore
* pkt->stream_index as well as the pkt's timebase might be invalid.
* Return 0 if more packets from this stream must be checked; 1 if not.
*/
int (*check_bitstream)(struct AVFormatContext *s, struct AVStream *st,
const AVPacket *pkt);
} AVOutputFormat; } AVOutputFormat;
/** /**
* @} * @}

View File

@ -28,6 +28,7 @@
#include "config_components.h" #include "config_components.h"
#include "riff.h" #include "riff.h"
#include "mpegts.h" #include "mpegts.h"
#include "mux.h"
#include "rawutils.h" #include "rawutils.h"
#include "libavformat/avlanguage.h" #include "libavformat/avlanguage.h"
#include "libavutil/avstring.h" #include "libavutil/avstring.h"
@ -1003,19 +1004,19 @@ static const AVClass avi_muxer_class = {
.version = LIBAVUTIL_VERSION_INT, .version = LIBAVUTIL_VERSION_INT,
}; };
const AVOutputFormat ff_avi_muxer = { const FFOutputFormat ff_avi_muxer = {
.name = "avi", .p.name = "avi",
.long_name = NULL_IF_CONFIG_SMALL("AVI (Audio Video Interleaved)"), .p.long_name = NULL_IF_CONFIG_SMALL("AVI (Audio Video Interleaved)"),
.mime_type = "video/x-msvideo", .p.mime_type = "video/x-msvideo",
.extensions = "avi", .p.extensions = "avi",
.priv_data_size = sizeof(AVIContext), .priv_data_size = sizeof(AVIContext),
.audio_codec = CONFIG_LIBMP3LAME ? AV_CODEC_ID_MP3 : AV_CODEC_ID_AC3, .p.audio_codec = CONFIG_LIBMP3LAME ? AV_CODEC_ID_MP3 : AV_CODEC_ID_AC3,
.video_codec = AV_CODEC_ID_MPEG4, .p.video_codec = AV_CODEC_ID_MPEG4,
.init = avi_init, .init = avi_init,
.deinit = avi_deinit, .deinit = avi_deinit,
.write_header = avi_write_header, .write_header = avi_write_header,
.write_packet = avi_write_packet, .write_packet = avi_write_packet,
.write_trailer = avi_write_trailer, .write_trailer = avi_write_trailer,
.codec_tag = ff_riff_codec_tags_list, .p.codec_tag = ff_riff_codec_tags_list,
.priv_class = &avi_muxer_class, .p.priv_class = &avi_muxer_class,
}; };

View File

@ -23,6 +23,7 @@
#include "avformat.h" #include "avformat.h"
#include "internal.h" #include "internal.h"
#include "mux.h"
#include "libavcodec/get_bits.h" #include "libavcodec/get_bits.h"
#include "libavcodec/put_bits.h" #include "libavcodec/put_bits.h"
@ -158,13 +159,13 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt)
return 0; return 0;
} }
const AVOutputFormat ff_bit_muxer = { const FFOutputFormat ff_bit_muxer = {
.name = "bit", .p.name = "bit",
.long_name = NULL_IF_CONFIG_SMALL("G.729 BIT file format"), .p.long_name = NULL_IF_CONFIG_SMALL("G.729 BIT file format"),
.mime_type = "audio/bit", .p.mime_type = "audio/bit",
.extensions = "bit", .p.extensions = "bit",
.audio_codec = AV_CODEC_ID_G729, .p.audio_codec = AV_CODEC_ID_G729,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.write_header = write_header, .write_header = write_header,
.write_packet = write_packet, .write_packet = write_packet,
}; };

View File

@ -276,16 +276,16 @@ static int caf_write_trailer(AVFormatContext *s)
return 0; return 0;
} }
const AVOutputFormat ff_caf_muxer = { const FFOutputFormat ff_caf_muxer = {
.name = "caf", .p.name = "caf",
.long_name = NULL_IF_CONFIG_SMALL("Apple CAF (Core Audio Format)"), .p.long_name = NULL_IF_CONFIG_SMALL("Apple CAF (Core Audio Format)"),
.mime_type = "audio/x-caf", .p.mime_type = "audio/x-caf",
.extensions = "caf", .p.extensions = "caf",
.priv_data_size = sizeof(CAFContext), .priv_data_size = sizeof(CAFContext),
.audio_codec = AV_CODEC_ID_PCM_S16BE, .p.audio_codec = AV_CODEC_ID_PCM_S16BE,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.write_header = caf_write_header, .write_header = caf_write_header,
.write_packet = caf_write_packet, .write_packet = caf_write_packet,
.write_trailer = caf_write_trailer, .write_trailer = caf_write_trailer,
.codec_tag = ff_caf_codec_tags_list, .p.codec_tag = ff_caf_codec_tags_list,
}; };

View File

@ -21,6 +21,7 @@
#include "avformat.h" #include "avformat.h"
#include "internal.h" #include "internal.h"
#include "mux.h"
#include "libavutil/opt.h" #include "libavutil/opt.h"
#include <chromaprint.h> #include <chromaprint.h>
@ -176,15 +177,15 @@ static const AVClass chromaprint_class = {
.version = LIBAVUTIL_VERSION_INT, .version = LIBAVUTIL_VERSION_INT,
}; };
const AVOutputFormat ff_chromaprint_muxer = { const FFOutputFormat ff_chromaprint_muxer = {
.name = "chromaprint", .p.name = "chromaprint",
.long_name = NULL_IF_CONFIG_SMALL("Chromaprint"), .p.long_name = NULL_IF_CONFIG_SMALL("Chromaprint"),
.priv_data_size = sizeof(ChromaprintMuxContext), .priv_data_size = sizeof(ChromaprintMuxContext),
.audio_codec = AV_NE(AV_CODEC_ID_PCM_S16BE, AV_CODEC_ID_PCM_S16LE), .p.audio_codec = AV_NE(AV_CODEC_ID_PCM_S16BE, AV_CODEC_ID_PCM_S16LE),
.write_header = write_header, .write_header = write_header,
.write_packet = write_packet, .write_packet = write_packet,
.write_trailer = write_trailer, .write_trailer = write_trailer,
.deinit = deinit, .deinit = deinit,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
.priv_class = &chromaprint_class, .p.priv_class = &chromaprint_class,
}; };

View File

@ -28,6 +28,7 @@
#include "avio_internal.h" #include "avio_internal.h"
#include "avformat.h" #include "avformat.h"
#include "internal.h" #include "internal.h"
#include "mux.h"
#include "rawenc.h" #include "rawenc.h"
#include "pcm.h" #include "pcm.h"
@ -309,16 +310,16 @@ const AVInputFormat ff_codec2_demuxer = {
#endif #endif
#if CONFIG_CODEC2_MUXER #if CONFIG_CODEC2_MUXER
const AVOutputFormat ff_codec2_muxer = { const FFOutputFormat ff_codec2_muxer = {
.name = "codec2", .p.name = "codec2",
.long_name = NULL_IF_CONFIG_SMALL("codec2 .c2 muxer"), .p.long_name = NULL_IF_CONFIG_SMALL("codec2 .c2 muxer"),
.p.extensions = "c2",
.p.audio_codec = AV_CODEC_ID_CODEC2,
.p.video_codec = AV_CODEC_ID_NONE,
.p.flags = AVFMT_NOTIMESTAMPS,
.priv_data_size = sizeof(Codec2Context), .priv_data_size = sizeof(Codec2Context),
.extensions = "c2",
.audio_codec = AV_CODEC_ID_CODEC2,
.video_codec = AV_CODEC_ID_NONE,
.write_header = codec2_write_header, .write_header = codec2_write_header,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif

View File

@ -23,6 +23,7 @@
#include "libavutil/adler32.h" #include "libavutil/adler32.h"
#include "avformat.h" #include "avformat.h"
#include "mux.h"
typedef struct CRCState { typedef struct CRCState {
uint32_t crcval; uint32_t crcval;
@ -54,14 +55,14 @@ static int crc_write_trailer(struct AVFormatContext *s)
return 0; return 0;
} }
const AVOutputFormat ff_crc_muxer = { const FFOutputFormat ff_crc_muxer = {
.name = "crc", .p.name = "crc",
.long_name = NULL_IF_CONFIG_SMALL("CRC testing"), .p.long_name = NULL_IF_CONFIG_SMALL("CRC testing"),
.priv_data_size = sizeof(CRCState), .priv_data_size = sizeof(CRCState),
.audio_codec = AV_CODEC_ID_PCM_S16LE, .p.audio_codec = AV_CODEC_ID_PCM_S16LE,
.video_codec = AV_CODEC_ID_RAWVIDEO, .p.video_codec = AV_CODEC_ID_RAWVIDEO,
.init = crc_init, .init = crc_init,
.write_packet = crc_write_packet, .write_packet = crc_write_packet,
.write_trailer = crc_write_trailer, .write_trailer = crc_write_trailer,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };

View File

@ -2346,10 +2346,10 @@ static int dash_check_bitstream(AVFormatContext *s, AVStream *st,
DASHContext *c = s->priv_data; DASHContext *c = s->priv_data;
OutputStream *os = &c->streams[st->index]; OutputStream *os = &c->streams[st->index];
AVFormatContext *oc = os->ctx; AVFormatContext *oc = os->ctx;
if (oc->oformat->check_bitstream) { if (ffofmt(oc->oformat)->check_bitstream) {
AVStream *const ost = oc->streams[0]; AVStream *const ost = oc->streams[0];
int ret; int ret;
ret = oc->oformat->check_bitstream(oc, ost, avpkt); ret = ffofmt(oc->oformat)->check_bitstream(oc, ost, avpkt);
if (ret == 1) { if (ret == 1) {
FFStream *const sti = ffstream(st); FFStream *const sti = ffstream(st);
FFStream *const osti = ffstream(ost); FFStream *const osti = ffstream(ost);
@ -2419,19 +2419,19 @@ static const AVClass dash_class = {
.version = LIBAVUTIL_VERSION_INT, .version = LIBAVUTIL_VERSION_INT,
}; };
const AVOutputFormat ff_dash_muxer = { const FFOutputFormat ff_dash_muxer = {
.name = "dash", .p.name = "dash",
.long_name = NULL_IF_CONFIG_SMALL("DASH Muxer"), .p.long_name = NULL_IF_CONFIG_SMALL("DASH Muxer"),
.extensions = "mpd", .p.extensions = "mpd",
.p.audio_codec = AV_CODEC_ID_AAC,
.p.video_codec = AV_CODEC_ID_H264,
.p.flags = AVFMT_GLOBALHEADER | AVFMT_NOFILE | AVFMT_TS_NEGATIVE,
.p.priv_class = &dash_class,
.priv_data_size = sizeof(DASHContext), .priv_data_size = sizeof(DASHContext),
.audio_codec = AV_CODEC_ID_AAC,
.video_codec = AV_CODEC_ID_H264,
.flags = AVFMT_GLOBALHEADER | AVFMT_NOFILE | AVFMT_TS_NEGATIVE,
.init = dash_init, .init = dash_init,
.write_header = dash_write_header, .write_header = dash_write_header,
.write_packet = dash_write_packet, .write_packet = dash_write_packet,
.write_trailer = dash_write_trailer, .write_trailer = dash_write_trailer,
.deinit = dash_free, .deinit = dash_free,
.check_bitstream = dash_check_bitstream, .check_bitstream = dash_check_bitstream,
.priv_class = &dash_class,
}; };

View File

@ -20,6 +20,7 @@
*/ */
#include "avformat.h" #include "avformat.h"
#include "mux.h"
static int daud_init(struct AVFormatContext *s) static int daud_init(struct AVFormatContext *s)
{ {
@ -42,13 +43,13 @@ static int daud_write_packet(struct AVFormatContext *s, AVPacket *pkt)
return 0; return 0;
} }
const AVOutputFormat ff_daud_muxer = { const FFOutputFormat ff_daud_muxer = {
.name = "daud", .p.name = "daud",
.long_name = NULL_IF_CONFIG_SMALL("D-Cinema audio"), .p.long_name = NULL_IF_CONFIG_SMALL("D-Cinema audio"),
.extensions = "302", .p.extensions = "302",
.audio_codec = AV_CODEC_ID_PCM_S24DAUD, .p.audio_codec = AV_CODEC_ID_PCM_S24DAUD,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.p.flags = AVFMT_NOTIMESTAMPS,
.init = daud_init, .init = daud_init,
.write_packet = daud_write_packet, .write_packet = daud_write_packet,
.flags = AVFMT_NOTIMESTAMPS,
}; };

View File

@ -442,13 +442,13 @@ static void dv_deinit(AVFormatContext *s)
av_fifo_freep2(&c->audio_data[i]); av_fifo_freep2(&c->audio_data[i]);
} }
const AVOutputFormat ff_dv_muxer = { const FFOutputFormat ff_dv_muxer = {
.name = "dv", .p.name = "dv",
.long_name = NULL_IF_CONFIG_SMALL("DV (Digital Video)"), .p.long_name = NULL_IF_CONFIG_SMALL("DV (Digital Video)"),
.extensions = "dv", .p.extensions = "dv",
.priv_data_size = sizeof(DVMuxContext), .priv_data_size = sizeof(DVMuxContext),
.audio_codec = AV_CODEC_ID_PCM_S16LE, .p.audio_codec = AV_CODEC_ID_PCM_S16LE,
.video_codec = AV_CODEC_ID_DVVIDEO, .p.video_codec = AV_CODEC_ID_DVVIDEO,
.write_header = dv_write_header, .write_header = dv_write_header,
.write_packet = dv_write_packet, .write_packet = dv_write_packet,
.deinit = dv_deinit, .deinit = dv_deinit,

View File

@ -23,6 +23,7 @@
#include "avformat.h" #include "avformat.h"
#include "ffmeta.h" #include "ffmeta.h"
#include "mux.h"
#include "libavutil/dict.h" #include "libavutil/dict.h"
@ -87,12 +88,12 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt)
return 0; return 0;
} }
const AVOutputFormat ff_ffmetadata_muxer = { const FFOutputFormat ff_ffmetadata_muxer = {
.name = "ffmetadata", .p.name = "ffmetadata",
.long_name = NULL_IF_CONFIG_SMALL("FFmpeg metadata in text"), .p.long_name = NULL_IF_CONFIG_SMALL("FFmpeg metadata in text"),
.extensions = "ffmeta", .p.extensions = "ffmeta",
.write_header = write_header, .write_header = write_header,
.write_packet = write_packet, .write_packet = write_packet,
.write_trailer = write_trailer, .write_trailer = write_trailer,
.flags = AVFMT_NOTIMESTAMPS | AVFMT_NOSTREAMS, .p.flags = AVFMT_NOTIMESTAMPS | AVFMT_NOSTREAMS,
}; };

View File

@ -707,15 +707,15 @@ static const AVClass fifo_muxer_class = {
.version = LIBAVUTIL_VERSION_INT, .version = LIBAVUTIL_VERSION_INT,
}; };
const AVOutputFormat ff_fifo_muxer = { const FFOutputFormat ff_fifo_muxer = {
.name = "fifo", .p.name = "fifo",
.long_name = NULL_IF_CONFIG_SMALL("FIFO queue pseudo-muxer"), .p.long_name = NULL_IF_CONFIG_SMALL("FIFO queue pseudo-muxer"),
.p.priv_class = &fifo_muxer_class,
.p.flags = AVFMT_NOFILE | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE,
.priv_data_size = sizeof(FifoContext), .priv_data_size = sizeof(FifoContext),
.init = fifo_init, .init = fifo_init,
.write_header = fifo_write_header, .write_header = fifo_write_header,
.write_packet = fifo_write_packet, .write_packet = fifo_write_packet,
.write_trailer = fifo_write_trailer, .write_trailer = fifo_write_trailer,
.deinit = fifo_deinit, .deinit = fifo_deinit,
.priv_class = &fifo_muxer_class,
.flags = AVFMT_NOFILE | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE,
}; };

View File

@ -25,6 +25,7 @@
#include "libavutil/time.h" #include "libavutil/time.h"
#include "avformat.h" #include "avformat.h"
#include "mux.h"
#include "url.h" #include "url.h"
/* Implementation of mock muxer to simulate real muxer failures */ /* Implementation of mock muxer to simulate real muxer failures */
@ -137,15 +138,15 @@ static const AVClass failing_muxer_class = {
.version = LIBAVUTIL_VERSION_INT, .version = LIBAVUTIL_VERSION_INT,
}; };
const AVOutputFormat ff_fifo_test_muxer = { const FFOutputFormat ff_fifo_test_muxer = {
.name = "fifo_test", .p.name = "fifo_test",
.long_name = NULL_IF_CONFIG_SMALL("Fifo test muxer"), .p.long_name = NULL_IF_CONFIG_SMALL("Fifo test muxer"),
.priv_data_size = sizeof(FailingMuxerContext), .priv_data_size = sizeof(FailingMuxerContext),
.write_header = failing_write_header, .write_header = failing_write_header,
.write_packet = failing_write_packet, .write_packet = failing_write_packet,
.write_trailer = failing_write_trailer, .write_trailer = failing_write_trailer,
.deinit = failing_deinit, .deinit = failing_deinit,
.priv_class = &failing_muxer_class, .p.priv_class = &failing_muxer_class,
.flags = AVFMT_NOFILE | AVFMT_ALLOW_FLUSH, .p.flags = AVFMT_NOFILE | AVFMT_ALLOW_FLUSH,
}; };

View File

@ -27,6 +27,7 @@
#include "libavutil/intreadwrite.h" #include "libavutil/intreadwrite.h"
#include "avformat.h" #include "avformat.h"
#include "avio_internal.h" #include "avio_internal.h"
#include "mux.h"
#include "rawenc.h" #include "rawenc.h"
#define RAND_TAG MKBETAG('R','a','n','d') #define RAND_TAG MKBETAG('R','a','n','d')
@ -59,12 +60,12 @@ static int write_trailer(AVFormatContext *s)
return 0; return 0;
} }
const AVOutputFormat ff_filmstrip_muxer = { const FFOutputFormat ff_filmstrip_muxer = {
.name = "filmstrip", .p.name = "filmstrip",
.long_name = NULL_IF_CONFIG_SMALL("Adobe Filmstrip"), .p.long_name = NULL_IF_CONFIG_SMALL("Adobe Filmstrip"),
.extensions = "flm", .p.extensions = "flm",
.audio_codec = AV_CODEC_ID_NONE, .p.audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_RAWVIDEO, .p.video_codec = AV_CODEC_ID_RAWVIDEO,
.write_header = write_header, .write_header = write_header,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.write_trailer = write_trailer, .write_trailer = write_trailer,

View File

@ -26,6 +26,7 @@
#include "avio_internal.h" #include "avio_internal.h"
#include "internal.h" #include "internal.h"
#include "mux.h"
typedef struct FITSContext { typedef struct FITSContext {
int first_image; int first_image;
@ -191,13 +192,13 @@ static int fits_write_packet(AVFormatContext *s, AVPacket *pkt)
return 0; return 0;
} }
const AVOutputFormat ff_fits_muxer = { const FFOutputFormat ff_fits_muxer = {
.name = "fits", .p.name = "fits",
.long_name = NULL_IF_CONFIG_SMALL("Flexible Image Transport System"), .p.long_name = NULL_IF_CONFIG_SMALL("Flexible Image Transport System"),
.extensions = "fits", .p.extensions = "fits",
.p.audio_codec = AV_CODEC_ID_NONE,
.p.video_codec = AV_CODEC_ID_FITS,
.priv_data_size = sizeof(FITSContext), .priv_data_size = sizeof(FITSContext),
.audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_FITS,
.write_header = fits_write_header, .write_header = fits_write_header,
.write_packet = fits_write_packet, .write_packet = fits_write_packet,
}; };

View File

@ -30,6 +30,7 @@
#include "flacenc.h" #include "flacenc.h"
#include "id3v2.h" #include "id3v2.h"
#include "internal.h" #include "internal.h"
#include "mux.h"
#include "version.h" #include "version.h"
#include "vorbiscomment.h" #include "vorbiscomment.h"
@ -413,19 +414,19 @@ static const AVClass flac_muxer_class = {
.version = LIBAVUTIL_VERSION_INT, .version = LIBAVUTIL_VERSION_INT,
}; };
const AVOutputFormat ff_flac_muxer = { const FFOutputFormat ff_flac_muxer = {
.name = "flac", .p.name = "flac",
.long_name = NULL_IF_CONFIG_SMALL("raw FLAC"), .p.long_name = NULL_IF_CONFIG_SMALL("raw FLAC"),
.priv_data_size = sizeof(FlacMuxerContext), .priv_data_size = sizeof(FlacMuxerContext),
.mime_type = "audio/x-flac", .p.mime_type = "audio/x-flac",
.extensions = "flac", .p.extensions = "flac",
.audio_codec = AV_CODEC_ID_FLAC, .p.audio_codec = AV_CODEC_ID_FLAC,
.video_codec = AV_CODEC_ID_PNG, .p.video_codec = AV_CODEC_ID_PNG,
.init = flac_init, .init = flac_init,
.write_header = flac_write_header, .write_header = flac_write_header,
.write_packet = flac_write_packet, .write_packet = flac_write_packet,
.write_trailer = flac_write_trailer, .write_trailer = flac_write_trailer,
.deinit = flac_deinit, .deinit = flac_deinit,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
.priv_class = &flac_muxer_class, .p.priv_class = &flac_muxer_class,
}; };

View File

@ -1060,24 +1060,24 @@ static const AVClass flv_muxer_class = {
.version = LIBAVUTIL_VERSION_INT, .version = LIBAVUTIL_VERSION_INT,
}; };
const AVOutputFormat ff_flv_muxer = { const FFOutputFormat ff_flv_muxer = {
.name = "flv", .p.name = "flv",
.long_name = NULL_IF_CONFIG_SMALL("FLV (Flash Video)"), .p.long_name = NULL_IF_CONFIG_SMALL("FLV (Flash Video)"),
.mime_type = "video/x-flv", .p.mime_type = "video/x-flv",
.extensions = "flv", .p.extensions = "flv",
.priv_data_size = sizeof(FLVContext), .priv_data_size = sizeof(FLVContext),
.audio_codec = CONFIG_LIBMP3LAME ? AV_CODEC_ID_MP3 : AV_CODEC_ID_ADPCM_SWF, .p.audio_codec = CONFIG_LIBMP3LAME ? AV_CODEC_ID_MP3 : AV_CODEC_ID_ADPCM_SWF,
.video_codec = AV_CODEC_ID_FLV1, .p.video_codec = AV_CODEC_ID_FLV1,
.init = flv_init, .init = flv_init,
.write_header = flv_write_header, .write_header = flv_write_header,
.write_packet = flv_write_packet, .write_packet = flv_write_packet,
.write_trailer = flv_write_trailer, .write_trailer = flv_write_trailer,
.deinit = flv_deinit, .deinit = flv_deinit,
.check_bitstream= flv_check_bitstream, .check_bitstream= flv_check_bitstream,
.codec_tag = (const AVCodecTag* const []) { .p.codec_tag = (const AVCodecTag* const []) {
flv_video_codec_ids, flv_audio_codec_ids, 0 flv_video_codec_ids, flv_audio_codec_ids, 0
}, },
.flags = AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS | .p.flags = AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS |
AVFMT_TS_NONSTRICT, AVFMT_TS_NONSTRICT,
.priv_class = &flv_muxer_class, .p.priv_class = &flv_muxer_class,
}; };

View File

@ -30,6 +30,7 @@
#include "avformat.h" #include "avformat.h"
#include "internal.h" #include "internal.h"
#include "mux.h"
static int framecrc_write_header(struct AVFormatContext *s) static int framecrc_write_header(struct AVFormatContext *s)
{ {
@ -69,13 +70,13 @@ static int framecrc_write_packet(struct AVFormatContext *s, AVPacket *pkt)
return 0; return 0;
} }
const AVOutputFormat ff_framecrc_muxer = { const FFOutputFormat ff_framecrc_muxer = {
.name = "framecrc", .p.name = "framecrc",
.long_name = NULL_IF_CONFIG_SMALL("framecrc testing"), .p.long_name = NULL_IF_CONFIG_SMALL("framecrc testing"),
.audio_codec = AV_CODEC_ID_PCM_S16LE, .p.audio_codec = AV_CODEC_ID_PCM_S16LE,
.video_codec = AV_CODEC_ID_RAWVIDEO, .p.video_codec = AV_CODEC_ID_RAWVIDEO,
.write_header = framecrc_write_header, .write_header = framecrc_write_header,
.write_packet = framecrc_write_packet, .write_packet = framecrc_write_packet,
.flags = AVFMT_VARIABLE_FPS | AVFMT_TS_NONSTRICT | .p.flags = AVFMT_VARIABLE_FPS | AVFMT_TS_NONSTRICT |
AVFMT_TS_NEGATIVE, AVFMT_TS_NEGATIVE,
}; };

View File

@ -23,6 +23,7 @@
#include "avformat.h" #include "avformat.h"
#include "internal.h" #include "internal.h"
#include "mux.h"
#include "libavutil/imgutils.h" #include "libavutil/imgutils.h"
#include "libavutil/log.h" #include "libavutil/log.h"
#include "libavutil/opt.h" #include "libavutil/opt.h"
@ -202,17 +203,17 @@ static const AVClass gif_muxer_class = {
.option = options, .option = options,
}; };
const AVOutputFormat ff_gif_muxer = { const FFOutputFormat ff_gif_muxer = {
.name = "gif", .p.name = "gif",
.long_name = NULL_IF_CONFIG_SMALL("CompuServe Graphics Interchange Format (GIF)"), .p.long_name = NULL_IF_CONFIG_SMALL("CompuServe Graphics Interchange Format (GIF)"),
.mime_type = "image/gif", .p.mime_type = "image/gif",
.extensions = "gif", .p.extensions = "gif",
.priv_data_size = sizeof(GIFContext), .priv_data_size = sizeof(GIFContext),
.audio_codec = AV_CODEC_ID_NONE, .p.audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_GIF, .p.video_codec = AV_CODEC_ID_GIF,
.write_header = gif_write_header, .write_header = gif_write_header,
.write_packet = gif_write_packet, .write_packet = gif_write_packet,
.write_trailer = gif_write_trailer, .write_trailer = gif_write_trailer,
.priv_class = &gif_muxer_class, .p.priv_class = &gif_muxer_class,
.flags = AVFMT_VARIABLE_FPS, .p.flags = AVFMT_VARIABLE_FPS,
}; };

View File

@ -1009,13 +1009,13 @@ static int gxf_interleave_packet(AVFormatContext *s, AVPacket *pkt,
return ff_interleave_packet_per_dts(s, pkt, flush, 0); return ff_interleave_packet_per_dts(s, pkt, flush, 0);
} }
const AVOutputFormat ff_gxf_muxer = { const FFOutputFormat ff_gxf_muxer = {
.name = "gxf", .p.name = "gxf",
.long_name = NULL_IF_CONFIG_SMALL("GXF (General eXchange Format)"), .p.long_name = NULL_IF_CONFIG_SMALL("GXF (General eXchange Format)"),
.extensions = "gxf", .p.extensions = "gxf",
.priv_data_size = sizeof(GXFContext), .priv_data_size = sizeof(GXFContext),
.audio_codec = AV_CODEC_ID_PCM_S16LE, .p.audio_codec = AV_CODEC_ID_PCM_S16LE,
.video_codec = AV_CODEC_ID_MPEG2VIDEO, .p.video_codec = AV_CODEC_ID_MPEG2VIDEO,
.write_header = gxf_write_header, .write_header = gxf_write_header,
.write_packet = gxf_write_packet, .write_packet = gxf_write_packet,
.write_trailer = gxf_write_trailer, .write_trailer = gxf_write_trailer,

View File

@ -27,6 +27,7 @@
#include "libavutil/opt.h" #include "libavutil/opt.h"
#include "avformat.h" #include "avformat.h"
#include "internal.h" #include "internal.h"
#include "mux.h"
struct HashContext { struct HashContext {
const AVClass *avclass; const AVClass *avclass;
@ -172,19 +173,19 @@ static void hash_free(struct AVFormatContext *s)
} }
#if CONFIG_HASH_MUXER #if CONFIG_HASH_MUXER
const AVOutputFormat ff_hash_muxer = { const FFOutputFormat ff_hash_muxer = {
.name = "hash", .p.name = "hash",
.long_name = NULL_IF_CONFIG_SMALL("Hash testing"), .p.long_name = NULL_IF_CONFIG_SMALL("Hash testing"),
.priv_data_size = sizeof(struct HashContext), .priv_data_size = sizeof(struct HashContext),
.audio_codec = AV_CODEC_ID_PCM_S16LE, .p.audio_codec = AV_CODEC_ID_PCM_S16LE,
.video_codec = AV_CODEC_ID_RAWVIDEO, .p.video_codec = AV_CODEC_ID_RAWVIDEO,
.init = hash_init, .init = hash_init,
.write_packet = hash_write_packet, .write_packet = hash_write_packet,
.write_trailer = hash_write_trailer, .write_trailer = hash_write_trailer,
.deinit = hash_free, .deinit = hash_free,
.flags = AVFMT_VARIABLE_FPS | AVFMT_TS_NONSTRICT | .p.flags = AVFMT_VARIABLE_FPS | AVFMT_TS_NONSTRICT |
AVFMT_TS_NEGATIVE, AVFMT_TS_NEGATIVE,
.priv_class = &hash_streamhashenc_class, .p.priv_class = &hash_streamhashenc_class,
}; };
#endif #endif
@ -196,36 +197,36 @@ static const AVClass md5enc_class = {
.version = LIBAVUTIL_VERSION_INT, .version = LIBAVUTIL_VERSION_INT,
}; };
const AVOutputFormat ff_md5_muxer = { const FFOutputFormat ff_md5_muxer = {
.name = "md5", .p.name = "md5",
.long_name = NULL_IF_CONFIG_SMALL("MD5 testing"), .p.long_name = NULL_IF_CONFIG_SMALL("MD5 testing"),
.priv_data_size = sizeof(struct HashContext), .priv_data_size = sizeof(struct HashContext),
.audio_codec = AV_CODEC_ID_PCM_S16LE, .p.audio_codec = AV_CODEC_ID_PCM_S16LE,
.video_codec = AV_CODEC_ID_RAWVIDEO, .p.video_codec = AV_CODEC_ID_RAWVIDEO,
.init = hash_init, .init = hash_init,
.write_packet = hash_write_packet, .write_packet = hash_write_packet,
.write_trailer = hash_write_trailer, .write_trailer = hash_write_trailer,
.deinit = hash_free, .deinit = hash_free,
.flags = AVFMT_VARIABLE_FPS | AVFMT_TS_NONSTRICT | .p.flags = AVFMT_VARIABLE_FPS | AVFMT_TS_NONSTRICT |
AVFMT_TS_NEGATIVE, AVFMT_TS_NEGATIVE,
.priv_class = &md5enc_class, .p.priv_class = &md5enc_class,
}; };
#endif #endif
#if CONFIG_STREAMHASH_MUXER #if CONFIG_STREAMHASH_MUXER
const AVOutputFormat ff_streamhash_muxer = { const FFOutputFormat ff_streamhash_muxer = {
.name = "streamhash", .p.name = "streamhash",
.long_name = NULL_IF_CONFIG_SMALL("Per-stream hash testing"), .p.long_name = NULL_IF_CONFIG_SMALL("Per-stream hash testing"),
.priv_data_size = sizeof(struct HashContext), .priv_data_size = sizeof(struct HashContext),
.audio_codec = AV_CODEC_ID_PCM_S16LE, .p.audio_codec = AV_CODEC_ID_PCM_S16LE,
.video_codec = AV_CODEC_ID_RAWVIDEO, .p.video_codec = AV_CODEC_ID_RAWVIDEO,
.init = streamhash_init, .init = streamhash_init,
.write_packet = hash_write_packet, .write_packet = hash_write_packet,
.write_trailer = hash_write_trailer, .write_trailer = hash_write_trailer,
.deinit = hash_free, .deinit = hash_free,
.flags = AVFMT_VARIABLE_FPS | AVFMT_TS_NONSTRICT | .p.flags = AVFMT_VARIABLE_FPS | AVFMT_TS_NONSTRICT |
AVFMT_TS_NEGATIVE, AVFMT_TS_NEGATIVE,
.priv_class = &hash_streamhashenc_class, .p.priv_class = &hash_streamhashenc_class,
}; };
#endif #endif
@ -324,19 +325,19 @@ static const AVClass framehash_class = {
.version = LIBAVUTIL_VERSION_INT, .version = LIBAVUTIL_VERSION_INT,
}; };
const AVOutputFormat ff_framehash_muxer = { const FFOutputFormat ff_framehash_muxer = {
.name = "framehash", .p.name = "framehash",
.long_name = NULL_IF_CONFIG_SMALL("Per-frame hash testing"), .p.long_name = NULL_IF_CONFIG_SMALL("Per-frame hash testing"),
.priv_data_size = sizeof(struct HashContext), .priv_data_size = sizeof(struct HashContext),
.audio_codec = AV_CODEC_ID_PCM_S16LE, .p.audio_codec = AV_CODEC_ID_PCM_S16LE,
.video_codec = AV_CODEC_ID_RAWVIDEO, .p.video_codec = AV_CODEC_ID_RAWVIDEO,
.init = framehash_init, .init = framehash_init,
.write_header = framehash_write_header, .write_header = framehash_write_header,
.write_packet = framehash_write_packet, .write_packet = framehash_write_packet,
.deinit = hash_free, .deinit = hash_free,
.flags = AVFMT_VARIABLE_FPS | AVFMT_TS_NONSTRICT | .p.flags = AVFMT_VARIABLE_FPS | AVFMT_TS_NONSTRICT |
AVFMT_TS_NEGATIVE, AVFMT_TS_NEGATIVE,
.priv_class = &framehash_class, .p.priv_class = &framehash_class,
}; };
#endif #endif
@ -348,18 +349,18 @@ static const AVClass framemd5_class = {
.version = LIBAVUTIL_VERSION_INT, .version = LIBAVUTIL_VERSION_INT,
}; };
const AVOutputFormat ff_framemd5_muxer = { const FFOutputFormat ff_framemd5_muxer = {
.name = "framemd5", .p.name = "framemd5",
.long_name = NULL_IF_CONFIG_SMALL("Per-frame MD5 testing"), .p.long_name = NULL_IF_CONFIG_SMALL("Per-frame MD5 testing"),
.priv_data_size = sizeof(struct HashContext), .priv_data_size = sizeof(struct HashContext),
.audio_codec = AV_CODEC_ID_PCM_S16LE, .p.audio_codec = AV_CODEC_ID_PCM_S16LE,
.video_codec = AV_CODEC_ID_RAWVIDEO, .p.video_codec = AV_CODEC_ID_RAWVIDEO,
.init = framehash_init, .init = framehash_init,
.write_header = framehash_write_header, .write_header = framehash_write_header,
.write_packet = framehash_write_packet, .write_packet = framehash_write_packet,
.deinit = hash_free, .deinit = hash_free,
.flags = AVFMT_VARIABLE_FPS | AVFMT_TS_NONSTRICT | .p.flags = AVFMT_VARIABLE_FPS | AVFMT_TS_NONSTRICT |
AVFMT_TS_NEGATIVE, AVFMT_TS_NEGATIVE,
.priv_class = &framemd5_class, .p.priv_class = &framemd5_class,
}; };
#endif #endif

View File

@ -564,16 +564,16 @@ static const AVClass hds_class = {
.version = LIBAVUTIL_VERSION_INT, .version = LIBAVUTIL_VERSION_INT,
}; };
const AVOutputFormat ff_hds_muxer = { const FFOutputFormat ff_hds_muxer = {
.name = "hds", .p.name = "hds",
.long_name = NULL_IF_CONFIG_SMALL("HDS Muxer"), .p.long_name = NULL_IF_CONFIG_SMALL("HDS Muxer"),
.p.audio_codec = AV_CODEC_ID_AAC,
.p.video_codec = AV_CODEC_ID_H264,
.p.flags = AVFMT_GLOBALHEADER | AVFMT_NOFILE,
.p.priv_class = &hds_class,
.priv_data_size = sizeof(HDSContext), .priv_data_size = sizeof(HDSContext),
.audio_codec = AV_CODEC_ID_AAC,
.video_codec = AV_CODEC_ID_H264,
.flags = AVFMT_GLOBALHEADER | AVFMT_NOFILE,
.write_header = hds_write_header, .write_header = hds_write_header,
.write_packet = hds_write_packet, .write_packet = hds_write_packet,
.write_trailer = hds_write_trailer, .write_trailer = hds_write_trailer,
.deinit = hds_free, .deinit = hds_free,
.priv_class = &hds_class,
}; };

View File

@ -3183,19 +3183,19 @@ static const AVClass hls_class = {
}; };
const AVOutputFormat ff_hls_muxer = { const FFOutputFormat ff_hls_muxer = {
.name = "hls", .p.name = "hls",
.long_name = NULL_IF_CONFIG_SMALL("Apple HTTP Live Streaming"), .p.long_name = NULL_IF_CONFIG_SMALL("Apple HTTP Live Streaming"),
.extensions = "m3u8", .p.extensions = "m3u8",
.p.audio_codec = AV_CODEC_ID_AAC,
.p.video_codec = AV_CODEC_ID_H264,
.p.subtitle_codec = AV_CODEC_ID_WEBVTT,
.p.flags = AVFMT_NOFILE | AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_NODIMENSIONS,
.p.priv_class = &hls_class,
.priv_data_size = sizeof(HLSContext), .priv_data_size = sizeof(HLSContext),
.audio_codec = AV_CODEC_ID_AAC,
.video_codec = AV_CODEC_ID_H264,
.subtitle_codec = AV_CODEC_ID_WEBVTT,
.flags = AVFMT_NOFILE | AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_NODIMENSIONS,
.init = hls_init, .init = hls_init,
.write_header = hls_write_header, .write_header = hls_write_header,
.write_packet = hls_write_packet, .write_packet = hls_write_packet,
.write_trailer = hls_write_trailer, .write_trailer = hls_write_trailer,
.deinit = hls_deinit, .deinit = hls_deinit,
.priv_class = &hls_class,
}; };

View File

@ -31,6 +31,7 @@
#include "avformat.h" #include "avformat.h"
#include "avio_internal.h" #include "avio_internal.h"
#include "mux.h"
typedef struct { typedef struct {
int offset; int offset;
@ -193,17 +194,17 @@ static void ico_deinit(AVFormatContext *s)
av_freep(&ico->images); av_freep(&ico->images);
} }
const AVOutputFormat ff_ico_muxer = { const FFOutputFormat ff_ico_muxer = {
.name = "ico", .p.name = "ico",
.long_name = NULL_IF_CONFIG_SMALL("Microsoft Windows ICO"), .p.long_name = NULL_IF_CONFIG_SMALL("Microsoft Windows ICO"),
.priv_data_size = sizeof(IcoMuxContext), .priv_data_size = sizeof(IcoMuxContext),
.mime_type = "image/vnd.microsoft.icon", .p.mime_type = "image/vnd.microsoft.icon",
.extensions = "ico", .p.extensions = "ico",
.audio_codec = AV_CODEC_ID_NONE, .p.audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_BMP, .p.video_codec = AV_CODEC_ID_BMP,
.write_header = ico_write_header, .write_header = ico_write_header,
.write_packet = ico_write_packet, .write_packet = ico_write_packet,
.write_trailer = ico_write_trailer, .write_trailer = ico_write_trailer,
.deinit = ico_deinit, .deinit = ico_deinit,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };

View File

@ -20,6 +20,7 @@
*/ */
#include "avformat.h" #include "avformat.h"
#include "mux.h"
#include "rawenc.h" #include "rawenc.h"
@ -59,12 +60,12 @@ static int roq_write_header(struct AVFormatContext *s)
return 0; return 0;
} }
const AVOutputFormat ff_roq_muxer = { const FFOutputFormat ff_roq_muxer = {
.name = "roq", .p.name = "roq",
.long_name = NULL_IF_CONFIG_SMALL("raw id RoQ"), .p.long_name = NULL_IF_CONFIG_SMALL("raw id RoQ"),
.extensions = "roq", .p.extensions = "roq",
.audio_codec = AV_CODEC_ID_ROQ_DPCM, .p.audio_codec = AV_CODEC_ID_ROQ_DPCM,
.video_codec = AV_CODEC_ID_ROQ, .p.video_codec = AV_CODEC_ID_ROQ,
.write_header = roq_write_header, .write_header = roq_write_header,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
}; };

View File

@ -23,6 +23,7 @@
#include "avformat.h" #include "avformat.h"
#include "internal.h" #include "internal.h"
#include "mux.h"
#include "rawenc.h" #include "rawenc.h"
static const char mode20_header[] = "#!iLBC20\n"; static const char mode20_header[] = "#!iLBC20\n";
@ -120,14 +121,14 @@ const AVInputFormat ff_ilbc_demuxer = {
}; };
#if CONFIG_ILBC_MUXER #if CONFIG_ILBC_MUXER
const AVOutputFormat ff_ilbc_muxer = { const FFOutputFormat ff_ilbc_muxer = {
.name = "ilbc", .p.name = "ilbc",
.long_name = NULL_IF_CONFIG_SMALL("iLBC storage"), .p.long_name = NULL_IF_CONFIG_SMALL("iLBC storage"),
.mime_type = "audio/iLBC", .p.mime_type = "audio/iLBC",
.extensions = "lbc", .p.extensions = "lbc",
.audio_codec = AV_CODEC_ID_ILBC, .p.audio_codec = AV_CODEC_ID_ILBC,
.p.flags = AVFMT_NOTIMESTAMPS,
.write_header = ilbc_write_header, .write_header = ilbc_write_header,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif

View File

@ -33,6 +33,7 @@
#include "avio_internal.h" #include "avio_internal.h"
#include "internal.h" #include "internal.h"
#include "img2.h" #include "img2.h"
#include "mux.h"
typedef struct VideoMuxData { typedef struct VideoMuxData {
const AVClass *class; /**< Class for private options. */ const AVClass *class; /**< Class for private options. */
@ -268,30 +269,30 @@ static const AVClass img2mux_class = {
.version = LIBAVUTIL_VERSION_INT, .version = LIBAVUTIL_VERSION_INT,
}; };
const AVOutputFormat ff_image2_muxer = { const FFOutputFormat ff_image2_muxer = {
.name = "image2", .p.name = "image2",
.long_name = NULL_IF_CONFIG_SMALL("image2 sequence"), .p.long_name = NULL_IF_CONFIG_SMALL("image2 sequence"),
.extensions = "bmp,dpx,exr,jls,jpeg,jpg,jxl,ljpg,pam,pbm,pcx,pfm,pgm,pgmyuv,phm," .p.extensions = "bmp,dpx,exr,jls,jpeg,jpg,jxl,ljpg,pam,pbm,pcx,pfm,pgm,pgmyuv,phm,"
"png,ppm,sgi,tga,tif,tiff,jp2,j2c,j2k,xwd,sun,ras,rs,im1,im8," "png,ppm,sgi,tga,tif,tiff,jp2,j2c,j2k,xwd,sun,ras,rs,im1,im8,"
"im24,sunras,vbn,xbm,xface,pix,y,avif,qoi,hdr,wbmp", "im24,sunras,vbn,xbm,xface,pix,y,avif,qoi,hdr,wbmp",
.priv_data_size = sizeof(VideoMuxData), .priv_data_size = sizeof(VideoMuxData),
.video_codec = AV_CODEC_ID_MJPEG, .p.video_codec = AV_CODEC_ID_MJPEG,
.write_header = write_header, .write_header = write_header,
.write_packet = write_packet, .write_packet = write_packet,
.query_codec = query_codec, .query_codec = query_codec,
.flags = AVFMT_NOTIMESTAMPS | AVFMT_NODIMENSIONS | AVFMT_NOFILE, .p.flags = AVFMT_NOTIMESTAMPS | AVFMT_NODIMENSIONS | AVFMT_NOFILE,
.priv_class = &img2mux_class, .p.priv_class = &img2mux_class,
}; };
#endif #endif
#if CONFIG_IMAGE2PIPE_MUXER #if CONFIG_IMAGE2PIPE_MUXER
const AVOutputFormat ff_image2pipe_muxer = { const FFOutputFormat ff_image2pipe_muxer = {
.name = "image2pipe", .p.name = "image2pipe",
.long_name = NULL_IF_CONFIG_SMALL("piped image2 sequence"), .p.long_name = NULL_IF_CONFIG_SMALL("piped image2 sequence"),
.priv_data_size = sizeof(VideoMuxData), .priv_data_size = sizeof(VideoMuxData),
.video_codec = AV_CODEC_ID_MJPEG, .p.video_codec = AV_CODEC_ID_MJPEG,
.write_header = write_header, .write_header = write_header,
.write_packet = write_packet_pipe, .write_packet = write_packet_pipe,
.query_codec = query_codec, .query_codec = query_codec,
.flags = AVFMT_NOTIMESTAMPS | AVFMT_NODIMENSIONS .p.flags = AVFMT_NOTIMESTAMPS | AVFMT_NODIMENSIONS
}; };
#endif #endif

View File

@ -705,6 +705,7 @@ int ff_unlock_avformat(void);
*/ */
void ff_format_set_url(AVFormatContext *s, char *url); void ff_format_set_url(AVFormatContext *s, char *url);
void avpriv_register_devices(const AVOutputFormat * const o[], const AVInputFormat * const i[]); struct FFOutputFormat;
void avpriv_register_devices(const struct FFOutputFormat * const o[], const AVInputFormat * const i[]);
#endif /* AVFORMAT_INTERNAL_H */ #endif /* AVFORMAT_INTERNAL_H */

View File

@ -23,6 +23,7 @@
#include "avformat.h" #include "avformat.h"
#include "avio_internal.h" #include "avio_internal.h"
#include "internal.h" #include "internal.h"
#include "mux.h"
#include "rawenc.h" #include "rawenc.h"
#include "ircam.h" #include "ircam.h"
@ -50,13 +51,13 @@ static int ircam_write_header(AVFormatContext *s)
return 0; return 0;
} }
const AVOutputFormat ff_ircam_muxer = { const FFOutputFormat ff_ircam_muxer = {
.name = "ircam", .p.name = "ircam",
.extensions = "sf,ircam", .p.extensions = "sf,ircam",
.long_name = NULL_IF_CONFIG_SMALL("Berkeley/IRCAM/CARL Sound Format"), .p.long_name = NULL_IF_CONFIG_SMALL("Berkeley/IRCAM/CARL Sound Format"),
.audio_codec = AV_CODEC_ID_PCM_S16LE, .p.audio_codec = AV_CODEC_ID_PCM_S16LE,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.write_header = ircam_write_header, .write_header = ircam_write_header,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.codec_tag = (const AVCodecTag *const []){ ff_codec_ircam_le_tags, 0 }, .p.codec_tag = (const AVCodecTag *const []){ ff_codec_ircam_le_tags, 0 },
}; };

View File

@ -122,16 +122,16 @@ static const AVCodecTag codec_ivf_tags[] = {
{ AV_CODEC_ID_NONE, 0 } { AV_CODEC_ID_NONE, 0 }
}; };
const AVOutputFormat ff_ivf_muxer = { const FFOutputFormat ff_ivf_muxer = {
.p.name = "ivf",
.p.long_name = NULL_IF_CONFIG_SMALL("On2 IVF"),
.p.extensions = "ivf",
.p.audio_codec = AV_CODEC_ID_NONE,
.p.video_codec = AV_CODEC_ID_VP8,
.p.codec_tag = (const AVCodecTag* const []){ codec_ivf_tags, 0 },
.priv_data_size = sizeof(IVFEncContext), .priv_data_size = sizeof(IVFEncContext),
.name = "ivf",
.long_name = NULL_IF_CONFIG_SMALL("On2 IVF"),
.extensions = "ivf",
.audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_VP8,
.init = ivf_init, .init = ivf_init,
.write_header = ivf_write_header, .write_header = ivf_write_header,
.write_packet = ivf_write_packet, .write_packet = ivf_write_packet,
.write_trailer = ivf_write_trailer, .write_trailer = ivf_write_trailer,
.codec_tag = (const AVCodecTag* const []){ codec_ivf_tags, 0 },
}; };

View File

@ -17,6 +17,7 @@
*/ */
#include "avformat.h" #include "avformat.h"
#include "mux.h"
#include "rawenc.h" #include "rawenc.h"
static int jacosub_write_header(AVFormatContext *s) static int jacosub_write_header(AVFormatContext *s)
@ -29,13 +30,13 @@ static int jacosub_write_header(AVFormatContext *s)
return 0; return 0;
} }
const AVOutputFormat ff_jacosub_muxer = { const FFOutputFormat ff_jacosub_muxer = {
.name = "jacosub", .p.name = "jacosub",
.long_name = NULL_IF_CONFIG_SMALL("JACOsub subtitle format"), .p.long_name = NULL_IF_CONFIG_SMALL("JACOsub subtitle format"),
.mime_type = "text/x-jacosub", .p.mime_type = "text/x-jacosub",
.extensions = "jss,js", .p.extensions = "jss,js",
.p.flags = AVFMT_TS_NONSTRICT,
.p.subtitle_codec = AV_CODEC_ID_JACOSUB,
.write_header = jacosub_write_header, .write_header = jacosub_write_header,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_TS_NONSTRICT,
.subtitle_codec = AV_CODEC_ID_JACOSUB,
}; };

View File

@ -26,6 +26,7 @@
#include "avformat.h" #include "avformat.h"
#include "avio_internal.h" #include "avio_internal.h"
#include "internal.h" #include "internal.h"
#include "mux.h"
#include "rawenc.h" #include "rawenc.h"
#include "libavutil/intreadwrite.h" #include "libavutil/intreadwrite.h"
@ -188,12 +189,12 @@ static int kvag_write_trailer(AVFormatContext *s)
return 0; return 0;
} }
const AVOutputFormat ff_kvag_muxer = { const FFOutputFormat ff_kvag_muxer = {
.name = "kvag", .p.name = "kvag",
.long_name = NULL_IF_CONFIG_SMALL("Simon & Schuster Interactive VAG"), .p.long_name = NULL_IF_CONFIG_SMALL("Simon & Schuster Interactive VAG"),
.extensions = "vag", .p.extensions = "vag",
.audio_codec = AV_CODEC_ID_ADPCM_IMA_SSI, .p.audio_codec = AV_CODEC_ID_ADPCM_IMA_SSI,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.init = kvag_write_init, .init = kvag_write_init,
.write_header = kvag_write_header, .write_header = kvag_write_header,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,

View File

@ -260,17 +260,17 @@ static int latm_check_bitstream(AVFormatContext *s, AVStream *st,
return ret; return ret;
} }
const AVOutputFormat ff_latm_muxer = { const FFOutputFormat ff_latm_muxer = {
.name = "latm", .p.name = "latm",
.long_name = NULL_IF_CONFIG_SMALL("LOAS/LATM"), .p.long_name = NULL_IF_CONFIG_SMALL("LOAS/LATM"),
.mime_type = "audio/MP4A-LATM", .p.mime_type = "audio/MP4A-LATM",
.extensions = "latm,loas", .p.extensions = "latm,loas",
.priv_data_size = sizeof(LATMContext), .priv_data_size = sizeof(LATMContext),
.audio_codec = AV_CODEC_ID_AAC, .p.audio_codec = AV_CODEC_ID_AAC,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.write_header = latm_write_header, .write_header = latm_write_header,
.write_packet = latm_write_packet, .write_packet = latm_write_packet,
.priv_class = &latm_muxer_class, .p.priv_class = &latm_muxer_class,
.check_bitstream= latm_check_bitstream, .check_bitstream= latm_check_bitstream,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };

View File

@ -125,14 +125,14 @@ static int lrc_write_packet(AVFormatContext *s, AVPacket *pkt)
return 0; return 0;
} }
const AVOutputFormat ff_lrc_muxer = { const FFOutputFormat ff_lrc_muxer = {
.name = "lrc", .p.name = "lrc",
.long_name = NULL_IF_CONFIG_SMALL("LRC lyrics"), .p.long_name = NULL_IF_CONFIG_SMALL("LRC lyrics"),
.extensions = "lrc", .p.extensions = "lrc",
.p.flags = AVFMT_VARIABLE_FPS | AVFMT_GLOBALHEADER |
AVFMT_TS_NEGATIVE | AVFMT_TS_NONSTRICT,
.p.subtitle_codec = AV_CODEC_ID_SUBRIP,
.priv_data_size = 0, .priv_data_size = 0,
.write_header = lrc_write_header, .write_header = lrc_write_header,
.write_packet = lrc_write_packet, .write_packet = lrc_write_packet,
.flags = AVFMT_VARIABLE_FPS | AVFMT_GLOBALHEADER |
AVFMT_TS_NEGATIVE | AVFMT_TS_NONSTRICT,
.subtitle_codec = AV_CODEC_ID_SUBRIP
}; };

View File

@ -3321,31 +3321,31 @@ static int mkv_query_codec(enum AVCodecID codec_id, int std_compliance)
return 0; return 0;
} }
const AVOutputFormat ff_matroska_muxer = { const FFOutputFormat ff_matroska_muxer = {
.name = "matroska", .p.name = "matroska",
.long_name = NULL_IF_CONFIG_SMALL("Matroska"), .p.long_name = NULL_IF_CONFIG_SMALL("Matroska"),
.mime_type = "video/x-matroska", .p.mime_type = "video/x-matroska",
.extensions = "mkv", .p.extensions = "mkv",
.priv_data_size = sizeof(MatroskaMuxContext), .priv_data_size = sizeof(MatroskaMuxContext),
.audio_codec = CONFIG_LIBVORBIS_ENCODER ? .p.audio_codec = CONFIG_LIBVORBIS_ENCODER ?
AV_CODEC_ID_VORBIS : AV_CODEC_ID_AC3, AV_CODEC_ID_VORBIS : AV_CODEC_ID_AC3,
.video_codec = CONFIG_LIBX264_ENCODER ? .p.video_codec = CONFIG_LIBX264_ENCODER ?
AV_CODEC_ID_H264 : AV_CODEC_ID_MPEG4, AV_CODEC_ID_H264 : AV_CODEC_ID_MPEG4,
.init = mkv_init, .init = mkv_init,
.deinit = mkv_deinit, .deinit = mkv_deinit,
.write_header = mkv_write_header, .write_header = mkv_write_header,
.write_packet = mkv_write_flush_packet, .write_packet = mkv_write_flush_packet,
.write_trailer = mkv_write_trailer, .write_trailer = mkv_write_trailer,
.flags = AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS | .p.flags = AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS |
AVFMT_TS_NONSTRICT | AVFMT_ALLOW_FLUSH, AVFMT_TS_NONSTRICT | AVFMT_ALLOW_FLUSH,
.codec_tag = (const AVCodecTag* const []){ .p.codec_tag = (const AVCodecTag* const []){
ff_codec_bmp_tags, ff_codec_wav_tags, ff_codec_bmp_tags, ff_codec_wav_tags,
additional_audio_tags, additional_video_tags, additional_subtitle_tags, 0 additional_audio_tags, additional_video_tags, additional_subtitle_tags, 0
}, },
.subtitle_codec = AV_CODEC_ID_ASS, .p.subtitle_codec = AV_CODEC_ID_ASS,
.query_codec = mkv_query_codec, .query_codec = mkv_query_codec,
.check_bitstream = mkv_check_bitstream, .check_bitstream = mkv_check_bitstream,
.priv_class = &matroska_webm_class, .p.priv_class = &matroska_webm_class,
}; };
#endif #endif
@ -3359,15 +3359,15 @@ static int webm_query_codec(enum AVCodecID codec_id, int std_compliance)
return 0; return 0;
} }
const AVOutputFormat ff_webm_muxer = { const FFOutputFormat ff_webm_muxer = {
.name = "webm", .p.name = "webm",
.long_name = NULL_IF_CONFIG_SMALL("WebM"), .p.long_name = NULL_IF_CONFIG_SMALL("WebM"),
.mime_type = "video/webm", .p.mime_type = "video/webm",
.extensions = "webm", .p.extensions = "webm",
.priv_data_size = sizeof(MatroskaMuxContext), .priv_data_size = sizeof(MatroskaMuxContext),
.audio_codec = CONFIG_LIBOPUS_ENCODER ? AV_CODEC_ID_OPUS : AV_CODEC_ID_VORBIS, .p.audio_codec = CONFIG_LIBOPUS_ENCODER ? AV_CODEC_ID_OPUS : AV_CODEC_ID_VORBIS,
.video_codec = CONFIG_LIBVPX_VP9_ENCODER? AV_CODEC_ID_VP9 : AV_CODEC_ID_VP8, .p.video_codec = CONFIG_LIBVPX_VP9_ENCODER? AV_CODEC_ID_VP9 : AV_CODEC_ID_VP8,
.subtitle_codec = AV_CODEC_ID_WEBVTT, .p.subtitle_codec = AV_CODEC_ID_WEBVTT,
.init = mkv_init, .init = mkv_init,
.deinit = mkv_deinit, .deinit = mkv_deinit,
.write_header = mkv_write_header, .write_header = mkv_write_header,
@ -3375,33 +3375,33 @@ const AVOutputFormat ff_webm_muxer = {
.write_trailer = mkv_write_trailer, .write_trailer = mkv_write_trailer,
.query_codec = webm_query_codec, .query_codec = webm_query_codec,
.check_bitstream = mkv_check_bitstream, .check_bitstream = mkv_check_bitstream,
.flags = AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS | .p.flags = AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS |
AVFMT_TS_NONSTRICT | AVFMT_ALLOW_FLUSH, AVFMT_TS_NONSTRICT | AVFMT_ALLOW_FLUSH,
.priv_class = &matroska_webm_class, .p.priv_class = &matroska_webm_class,
}; };
#endif #endif
#if CONFIG_MATROSKA_AUDIO_MUXER #if CONFIG_MATROSKA_AUDIO_MUXER
const AVOutputFormat ff_matroska_audio_muxer = { const FFOutputFormat ff_matroska_audio_muxer = {
.name = "matroska", .p.name = "matroska",
.long_name = NULL_IF_CONFIG_SMALL("Matroska Audio"), .p.long_name = NULL_IF_CONFIG_SMALL("Matroska Audio"),
.mime_type = "audio/x-matroska", .p.mime_type = "audio/x-matroska",
.extensions = "mka", .p.extensions = "mka",
.priv_data_size = sizeof(MatroskaMuxContext), .priv_data_size = sizeof(MatroskaMuxContext),
.audio_codec = CONFIG_LIBVORBIS_ENCODER ? .p.audio_codec = CONFIG_LIBVORBIS_ENCODER ?
AV_CODEC_ID_VORBIS : AV_CODEC_ID_AC3, AV_CODEC_ID_VORBIS : AV_CODEC_ID_AC3,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.init = mkv_init, .init = mkv_init,
.deinit = mkv_deinit, .deinit = mkv_deinit,
.write_header = mkv_write_header, .write_header = mkv_write_header,
.write_packet = mkv_write_flush_packet, .write_packet = mkv_write_flush_packet,
.write_trailer = mkv_write_trailer, .write_trailer = mkv_write_trailer,
.check_bitstream = mkv_check_bitstream, .check_bitstream = mkv_check_bitstream,
.flags = AVFMT_GLOBALHEADER | AVFMT_TS_NONSTRICT | .p.flags = AVFMT_GLOBALHEADER | AVFMT_TS_NONSTRICT |
AVFMT_ALLOW_FLUSH, AVFMT_ALLOW_FLUSH,
.codec_tag = (const AVCodecTag* const []){ .p.codec_tag = (const AVCodecTag* const []){
ff_codec_wav_tags, additional_audio_tags, 0 ff_codec_wav_tags, additional_audio_tags, 0
}, },
.priv_class = &matroska_webm_class, .p.priv_class = &matroska_webm_class,
}; };
#endif #endif

View File

@ -22,6 +22,7 @@
#include <inttypes.h> #include <inttypes.h>
#include "avformat.h" #include "avformat.h"
#include "internal.h" #include "internal.h"
#include "mux.h"
static int microdvd_write_header(struct AVFormatContext *s) static int microdvd_write_header(struct AVFormatContext *s)
{ {
@ -55,13 +56,13 @@ static int microdvd_write_packet(AVFormatContext *avf, AVPacket *pkt)
return 0; return 0;
} }
const AVOutputFormat ff_microdvd_muxer = { const FFOutputFormat ff_microdvd_muxer = {
.name = "microdvd", .p.name = "microdvd",
.long_name = NULL_IF_CONFIG_SMALL("MicroDVD subtitle format"), .p.long_name = NULL_IF_CONFIG_SMALL("MicroDVD subtitle format"),
.mime_type = "text/x-microdvd", .p.mime_type = "text/x-microdvd",
.extensions = "sub", .p.extensions = "sub",
.p.flags = AVFMT_NOTIMESTAMPS,
.p.subtitle_codec = AV_CODEC_ID_MICRODVD,
.write_header = microdvd_write_header, .write_header = microdvd_write_header,
.write_packet = microdvd_write_packet, .write_packet = microdvd_write_packet,
.flags = AVFMT_NOTIMESTAMPS,
.subtitle_codec = AV_CODEC_ID_MICRODVD,
}; };

View File

@ -21,6 +21,7 @@
#include "avformat.h" #include "avformat.h"
#include "internal.h" #include "internal.h"
#include "mux.h"
static int write_header(AVFormatContext *s) static int write_header(AVFormatContext *s)
{ {
@ -40,11 +41,11 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt)
return 0; return 0;
} }
const AVOutputFormat ff_mkvtimestamp_v2_muxer = { const FFOutputFormat ff_mkvtimestamp_v2_muxer = {
.name = "mkvtimestamp_v2", .p.name = "mkvtimestamp_v2",
.long_name = NULL_IF_CONFIG_SMALL("extract pts as timecode v2 format, as defined by mkvtoolnix"), .p.long_name = NULL_IF_CONFIG_SMALL("extract pts as timecode v2 format, as defined by mkvtoolnix"),
.audio_codec = AV_CODEC_ID_NONE, .p.audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_RAWVIDEO, .p.video_codec = AV_CODEC_ID_RAWVIDEO,
.write_header = write_header, .write_header = write_header,
.write_packet = write_packet, .write_packet = write_packet,
}; };

View File

@ -25,6 +25,7 @@
#include "avformat.h" #include "avformat.h"
#include "avio_internal.h" #include "avio_internal.h"
#include "internal.h" #include "internal.h"
#include "mux.h"
#include "pcm.h" #include "pcm.h"
#include "rawenc.h" #include "rawenc.h"
#include "riff.h" #include "riff.h"
@ -309,14 +310,14 @@ const AVInputFormat ff_mmf_demuxer = {
#endif #endif
#if CONFIG_MMF_MUXER #if CONFIG_MMF_MUXER
const AVOutputFormat ff_mmf_muxer = { const FFOutputFormat ff_mmf_muxer = {
.name = "mmf", .p.name = "mmf",
.long_name = NULL_IF_CONFIG_SMALL("Yamaha SMAF"), .p.long_name = NULL_IF_CONFIG_SMALL("Yamaha SMAF"),
.mime_type = "application/vnd.smaf", .p.mime_type = "application/vnd.smaf",
.extensions = "mmf", .p.extensions = "mmf",
.priv_data_size = sizeof(MMFContext), .priv_data_size = sizeof(MMFContext),
.audio_codec = AV_CODEC_ID_ADPCM_YAMAHA, .p.audio_codec = AV_CODEC_ID_ADPCM_YAMAHA,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.write_header = mmf_write_header, .write_header = mmf_write_header,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.write_trailer = mmf_write_trailer, .write_trailer = mmf_write_trailer,

View File

@ -7805,182 +7805,182 @@ static const AVClass mov_avif_muxer_class = {
#endif #endif
#if CONFIG_MOV_MUXER #if CONFIG_MOV_MUXER
const AVOutputFormat ff_mov_muxer = { const FFOutputFormat ff_mov_muxer = {
.name = "mov", .p.name = "mov",
.long_name = NULL_IF_CONFIG_SMALL("QuickTime / MOV"), .p.long_name = NULL_IF_CONFIG_SMALL("QuickTime / MOV"),
.extensions = "mov", .p.extensions = "mov",
.priv_data_size = sizeof(MOVMuxContext), .priv_data_size = sizeof(MOVMuxContext),
.audio_codec = AV_CODEC_ID_AAC, .p.audio_codec = AV_CODEC_ID_AAC,
.video_codec = CONFIG_LIBX264_ENCODER ? .p.video_codec = CONFIG_LIBX264_ENCODER ?
AV_CODEC_ID_H264 : AV_CODEC_ID_MPEG4, AV_CODEC_ID_H264 : AV_CODEC_ID_MPEG4,
.init = mov_init, .init = mov_init,
.write_header = mov_write_header, .write_header = mov_write_header,
.write_packet = mov_write_packet, .write_packet = mov_write_packet,
.write_trailer = mov_write_trailer, .write_trailer = mov_write_trailer,
.deinit = mov_free, .deinit = mov_free,
.flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE, .p.flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE,
.codec_tag = (const AVCodecTag* const []){ .p.codec_tag = (const AVCodecTag* const []){
ff_codec_movvideo_tags, ff_codec_movaudio_tags, ff_codec_movsubtitle_tags, 0 ff_codec_movvideo_tags, ff_codec_movaudio_tags, ff_codec_movsubtitle_tags, 0
}, },
.check_bitstream = mov_check_bitstream, .check_bitstream = mov_check_bitstream,
.priv_class = &mov_isobmff_muxer_class, .p.priv_class = &mov_isobmff_muxer_class,
}; };
#endif #endif
#if CONFIG_TGP_MUXER #if CONFIG_TGP_MUXER
const AVOutputFormat ff_tgp_muxer = { const FFOutputFormat ff_tgp_muxer = {
.name = "3gp", .p.name = "3gp",
.long_name = NULL_IF_CONFIG_SMALL("3GP (3GPP file format)"), .p.long_name = NULL_IF_CONFIG_SMALL("3GP (3GPP file format)"),
.extensions = "3gp", .p.extensions = "3gp",
.priv_data_size = sizeof(MOVMuxContext), .priv_data_size = sizeof(MOVMuxContext),
.audio_codec = AV_CODEC_ID_AMR_NB, .p.audio_codec = AV_CODEC_ID_AMR_NB,
.video_codec = AV_CODEC_ID_H263, .p.video_codec = AV_CODEC_ID_H263,
.init = mov_init, .init = mov_init,
.write_header = mov_write_header, .write_header = mov_write_header,
.write_packet = mov_write_packet, .write_packet = mov_write_packet,
.write_trailer = mov_write_trailer, .write_trailer = mov_write_trailer,
.deinit = mov_free, .deinit = mov_free,
.flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE, .p.flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE,
.codec_tag = codec_3gp_tags_list, .p.codec_tag = codec_3gp_tags_list,
.check_bitstream = mov_check_bitstream, .check_bitstream = mov_check_bitstream,
.priv_class = &mov_isobmff_muxer_class, .p.priv_class = &mov_isobmff_muxer_class,
}; };
#endif #endif
#if CONFIG_MP4_MUXER #if CONFIG_MP4_MUXER
const AVOutputFormat ff_mp4_muxer = { const FFOutputFormat ff_mp4_muxer = {
.name = "mp4", .p.name = "mp4",
.long_name = NULL_IF_CONFIG_SMALL("MP4 (MPEG-4 Part 14)"), .p.long_name = NULL_IF_CONFIG_SMALL("MP4 (MPEG-4 Part 14)"),
.mime_type = "video/mp4", .p.mime_type = "video/mp4",
.extensions = "mp4", .p.extensions = "mp4",
.priv_data_size = sizeof(MOVMuxContext), .priv_data_size = sizeof(MOVMuxContext),
.audio_codec = AV_CODEC_ID_AAC, .p.audio_codec = AV_CODEC_ID_AAC,
.video_codec = CONFIG_LIBX264_ENCODER ? .p.video_codec = CONFIG_LIBX264_ENCODER ?
AV_CODEC_ID_H264 : AV_CODEC_ID_MPEG4, AV_CODEC_ID_H264 : AV_CODEC_ID_MPEG4,
.init = mov_init, .init = mov_init,
.write_header = mov_write_header, .write_header = mov_write_header,
.write_packet = mov_write_packet, .write_packet = mov_write_packet,
.write_trailer = mov_write_trailer, .write_trailer = mov_write_trailer,
.deinit = mov_free, .deinit = mov_free,
.flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE, .p.flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE,
.codec_tag = mp4_codec_tags_list, .p.codec_tag = mp4_codec_tags_list,
.check_bitstream = mov_check_bitstream, .check_bitstream = mov_check_bitstream,
.priv_class = &mov_isobmff_muxer_class, .p.priv_class = &mov_isobmff_muxer_class,
}; };
#endif #endif
#if CONFIG_PSP_MUXER #if CONFIG_PSP_MUXER
const AVOutputFormat ff_psp_muxer = { const FFOutputFormat ff_psp_muxer = {
.name = "psp", .p.name = "psp",
.long_name = NULL_IF_CONFIG_SMALL("PSP MP4 (MPEG-4 Part 14)"), .p.long_name = NULL_IF_CONFIG_SMALL("PSP MP4 (MPEG-4 Part 14)"),
.extensions = "mp4,psp", .p.extensions = "mp4,psp",
.priv_data_size = sizeof(MOVMuxContext), .priv_data_size = sizeof(MOVMuxContext),
.audio_codec = AV_CODEC_ID_AAC, .p.audio_codec = AV_CODEC_ID_AAC,
.video_codec = CONFIG_LIBX264_ENCODER ? .p.video_codec = CONFIG_LIBX264_ENCODER ?
AV_CODEC_ID_H264 : AV_CODEC_ID_MPEG4, AV_CODEC_ID_H264 : AV_CODEC_ID_MPEG4,
.init = mov_init, .init = mov_init,
.write_header = mov_write_header, .write_header = mov_write_header,
.write_packet = mov_write_packet, .write_packet = mov_write_packet,
.write_trailer = mov_write_trailer, .write_trailer = mov_write_trailer,
.deinit = mov_free, .deinit = mov_free,
.flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE, .p.flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE,
.codec_tag = mp4_codec_tags_list, .p.codec_tag = mp4_codec_tags_list,
.check_bitstream = mov_check_bitstream, .check_bitstream = mov_check_bitstream,
.priv_class = &mov_isobmff_muxer_class, .p.priv_class = &mov_isobmff_muxer_class,
}; };
#endif #endif
#if CONFIG_TG2_MUXER #if CONFIG_TG2_MUXER
const AVOutputFormat ff_tg2_muxer = { const FFOutputFormat ff_tg2_muxer = {
.name = "3g2", .p.name = "3g2",
.long_name = NULL_IF_CONFIG_SMALL("3GP2 (3GPP2 file format)"), .p.long_name = NULL_IF_CONFIG_SMALL("3GP2 (3GPP2 file format)"),
.extensions = "3g2", .p.extensions = "3g2",
.priv_data_size = sizeof(MOVMuxContext), .priv_data_size = sizeof(MOVMuxContext),
.audio_codec = AV_CODEC_ID_AMR_NB, .p.audio_codec = AV_CODEC_ID_AMR_NB,
.video_codec = AV_CODEC_ID_H263, .p.video_codec = AV_CODEC_ID_H263,
.init = mov_init, .init = mov_init,
.write_header = mov_write_header, .write_header = mov_write_header,
.write_packet = mov_write_packet, .write_packet = mov_write_packet,
.write_trailer = mov_write_trailer, .write_trailer = mov_write_trailer,
.deinit = mov_free, .deinit = mov_free,
.flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE, .p.flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE,
.codec_tag = codec_3gp_tags_list, .p.codec_tag = codec_3gp_tags_list,
.check_bitstream = mov_check_bitstream, .check_bitstream = mov_check_bitstream,
.priv_class = &mov_isobmff_muxer_class, .p.priv_class = &mov_isobmff_muxer_class,
}; };
#endif #endif
#if CONFIG_IPOD_MUXER #if CONFIG_IPOD_MUXER
const AVOutputFormat ff_ipod_muxer = { const FFOutputFormat ff_ipod_muxer = {
.name = "ipod", .p.name = "ipod",
.long_name = NULL_IF_CONFIG_SMALL("iPod H.264 MP4 (MPEG-4 Part 14)"), .p.long_name = NULL_IF_CONFIG_SMALL("iPod H.264 MP4 (MPEG-4 Part 14)"),
.mime_type = "video/mp4", .p.mime_type = "video/mp4",
.extensions = "m4v,m4a,m4b", .p.extensions = "m4v,m4a,m4b",
.priv_data_size = sizeof(MOVMuxContext), .priv_data_size = sizeof(MOVMuxContext),
.audio_codec = AV_CODEC_ID_AAC, .p.audio_codec = AV_CODEC_ID_AAC,
.video_codec = AV_CODEC_ID_H264, .p.video_codec = AV_CODEC_ID_H264,
.init = mov_init, .init = mov_init,
.write_header = mov_write_header, .write_header = mov_write_header,
.write_packet = mov_write_packet, .write_packet = mov_write_packet,
.write_trailer = mov_write_trailer, .write_trailer = mov_write_trailer,
.deinit = mov_free, .deinit = mov_free,
.flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE, .p.flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE,
.codec_tag = (const AVCodecTag* const []){ codec_ipod_tags, 0 }, .p.codec_tag = (const AVCodecTag* const []){ codec_ipod_tags, 0 },
.check_bitstream = mov_check_bitstream, .check_bitstream = mov_check_bitstream,
.priv_class = &mov_isobmff_muxer_class, .p.priv_class = &mov_isobmff_muxer_class,
}; };
#endif #endif
#if CONFIG_ISMV_MUXER #if CONFIG_ISMV_MUXER
const AVOutputFormat ff_ismv_muxer = { const FFOutputFormat ff_ismv_muxer = {
.name = "ismv", .p.name = "ismv",
.long_name = NULL_IF_CONFIG_SMALL("ISMV/ISMA (Smooth Streaming)"), .p.long_name = NULL_IF_CONFIG_SMALL("ISMV/ISMA (Smooth Streaming)"),
.mime_type = "video/mp4", .p.mime_type = "video/mp4",
.extensions = "ismv,isma", .p.extensions = "ismv,isma",
.priv_data_size = sizeof(MOVMuxContext), .priv_data_size = sizeof(MOVMuxContext),
.audio_codec = AV_CODEC_ID_AAC, .p.audio_codec = AV_CODEC_ID_AAC,
.video_codec = AV_CODEC_ID_H264, .p.video_codec = AV_CODEC_ID_H264,
.init = mov_init, .init = mov_init,
.write_header = mov_write_header, .write_header = mov_write_header,
.write_packet = mov_write_packet, .write_packet = mov_write_packet,
.write_trailer = mov_write_trailer, .write_trailer = mov_write_trailer,
.deinit = mov_free, .deinit = mov_free,
.flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE, .p.flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE,
.codec_tag = (const AVCodecTag* const []){ .p.codec_tag = (const AVCodecTag* const []){
codec_mp4_tags, codec_ism_tags, 0 }, codec_mp4_tags, codec_ism_tags, 0 },
.check_bitstream = mov_check_bitstream, .check_bitstream = mov_check_bitstream,
.priv_class = &mov_isobmff_muxer_class, .p.priv_class = &mov_isobmff_muxer_class,
}; };
#endif #endif
#if CONFIG_F4V_MUXER #if CONFIG_F4V_MUXER
const AVOutputFormat ff_f4v_muxer = { const FFOutputFormat ff_f4v_muxer = {
.name = "f4v", .p.name = "f4v",
.long_name = NULL_IF_CONFIG_SMALL("F4V Adobe Flash Video"), .p.long_name = NULL_IF_CONFIG_SMALL("F4V Adobe Flash Video"),
.mime_type = "application/f4v", .p.mime_type = "application/f4v",
.extensions = "f4v", .p.extensions = "f4v",
.priv_data_size = sizeof(MOVMuxContext), .priv_data_size = sizeof(MOVMuxContext),
.audio_codec = AV_CODEC_ID_AAC, .p.audio_codec = AV_CODEC_ID_AAC,
.video_codec = AV_CODEC_ID_H264, .p.video_codec = AV_CODEC_ID_H264,
.init = mov_init, .init = mov_init,
.write_header = mov_write_header, .write_header = mov_write_header,
.write_packet = mov_write_packet, .write_packet = mov_write_packet,
.write_trailer = mov_write_trailer, .write_trailer = mov_write_trailer,
.deinit = mov_free, .deinit = mov_free,
.flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH, .p.flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH,
.codec_tag = (const AVCodecTag* const []){ codec_f4v_tags, 0 }, .p.codec_tag = (const AVCodecTag* const []){ codec_f4v_tags, 0 },
.check_bitstream = mov_check_bitstream, .check_bitstream = mov_check_bitstream,
.priv_class = &mov_isobmff_muxer_class, .p.priv_class = &mov_isobmff_muxer_class,
}; };
#endif #endif
#if CONFIG_AVIF_MUXER #if CONFIG_AVIF_MUXER
const AVOutputFormat ff_avif_muxer = { const FFOutputFormat ff_avif_muxer = {
.name = "avif", .p.name = "avif",
.long_name = NULL_IF_CONFIG_SMALL("AVIF"), .p.long_name = NULL_IF_CONFIG_SMALL("AVIF"),
.mime_type = "image/avif", .p.mime_type = "image/avif",
.extensions = "avif", .p.extensions = "avif",
.priv_data_size = sizeof(MOVMuxContext), .priv_data_size = sizeof(MOVMuxContext),
.video_codec = AV_CODEC_ID_AV1, .p.video_codec = AV_CODEC_ID_AV1,
.init = mov_init, .init = mov_init,
.write_header = mov_write_header, .write_header = mov_write_header,
.write_packet = mov_write_packet, .write_packet = mov_write_packet,
.write_trailer = avif_write_trailer, .write_trailer = avif_write_trailer,
.deinit = mov_free, .deinit = mov_free,
.flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH, .p.flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH,
.codec_tag = codec_avif_tags_list, .p.codec_tag = codec_avif_tags_list,
.priv_class = &mov_avif_muxer_class, .p.priv_class = &mov_avif_muxer_class,
}; };
#endif #endif

View File

@ -23,6 +23,7 @@
#include "avio_internal.h" #include "avio_internal.h"
#include "id3v1.h" #include "id3v1.h"
#include "id3v2.h" #include "id3v2.h"
#include "mux.h"
#include "rawenc.h" #include "rawenc.h"
#include "libavutil/avstring.h" #include "libavutil/avstring.h"
#include "libavcodec/mpegaudio.h" #include "libavcodec/mpegaudio.h"
@ -636,20 +637,20 @@ static void mp3_deinit(struct AVFormatContext *s)
av_freep(&mp3->xing_frame); av_freep(&mp3->xing_frame);
} }
const AVOutputFormat ff_mp3_muxer = { const FFOutputFormat ff_mp3_muxer = {
.name = "mp3", .p.name = "mp3",
.long_name = NULL_IF_CONFIG_SMALL("MP3 (MPEG audio layer 3)"), .p.long_name = NULL_IF_CONFIG_SMALL("MP3 (MPEG audio layer 3)"),
.mime_type = "audio/mpeg", .p.mime_type = "audio/mpeg",
.extensions = "mp3", .p.extensions = "mp3",
.priv_data_size = sizeof(MP3Context), .priv_data_size = sizeof(MP3Context),
.audio_codec = AV_CODEC_ID_MP3, .p.audio_codec = AV_CODEC_ID_MP3,
.video_codec = AV_CODEC_ID_PNG, .p.video_codec = AV_CODEC_ID_PNG,
.init = mp3_init, .init = mp3_init,
.write_header = mp3_write_header, .write_header = mp3_write_header,
.write_packet = mp3_write_packet, .write_packet = mp3_write_packet,
.write_trailer = mp3_write_trailer, .write_trailer = mp3_write_trailer,
.deinit = mp3_deinit, .deinit = mp3_deinit,
.query_codec = query_codec, .query_codec = query_codec,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
.priv_class = &mp3_muxer_class, .p.priv_class = &mp3_muxer_class,
}; };

View File

@ -35,6 +35,7 @@
#include "avio_internal.h" #include "avio_internal.h"
#include "internal.h" #include "internal.h"
#include "mpeg.h" #include "mpeg.h"
#include "mux.h"
#define MAX_PAYLOAD_SIZE 4096 #define MAX_PAYLOAD_SIZE 4096
@ -86,10 +87,10 @@ typedef struct MpegMuxContext {
int preload; int preload;
} MpegMuxContext; } MpegMuxContext;
extern const AVOutputFormat ff_mpeg1vcd_muxer; extern const FFOutputFormat ff_mpeg1vcd_muxer;
extern const AVOutputFormat ff_mpeg2dvd_muxer; extern const FFOutputFormat ff_mpeg2dvd_muxer;
extern const AVOutputFormat ff_mpeg2svcd_muxer; extern const FFOutputFormat ff_mpeg2svcd_muxer;
extern const AVOutputFormat ff_mpeg2vob_muxer; extern const FFOutputFormat ff_mpeg2vob_muxer;
static int put_pack_header(AVFormatContext *ctx, uint8_t *buf, static int put_pack_header(AVFormatContext *ctx, uint8_t *buf,
int64_t timestamp) int64_t timestamp)
@ -307,12 +308,12 @@ static av_cold int mpeg_mux_init(AVFormatContext *ctx)
int video_bitrate; int video_bitrate;
s->packet_number = 0; s->packet_number = 0;
s->is_vcd = (CONFIG_MPEG1VCD_MUXER && ctx->oformat == &ff_mpeg1vcd_muxer); s->is_vcd = (CONFIG_MPEG1VCD_MUXER && ctx->oformat == &ff_mpeg1vcd_muxer.p);
s->is_svcd = (CONFIG_MPEG2SVCD_MUXER && ctx->oformat == &ff_mpeg2svcd_muxer); s->is_svcd = (CONFIG_MPEG2SVCD_MUXER && ctx->oformat == &ff_mpeg2svcd_muxer.p);
s->is_mpeg2 = ((CONFIG_MPEG2VOB_MUXER && ctx->oformat == &ff_mpeg2vob_muxer) || s->is_mpeg2 = ((CONFIG_MPEG2VOB_MUXER && ctx->oformat == &ff_mpeg2vob_muxer.p) ||
(CONFIG_MPEG2DVD_MUXER && ctx->oformat == &ff_mpeg2dvd_muxer) || (CONFIG_MPEG2DVD_MUXER && ctx->oformat == &ff_mpeg2dvd_muxer.p) ||
(CONFIG_MPEG2SVCD_MUXER && ctx->oformat == &ff_mpeg2svcd_muxer)); (CONFIG_MPEG2SVCD_MUXER && ctx->oformat == &ff_mpeg2svcd_muxer.p));
s->is_dvd = (CONFIG_MPEG2DVD_MUXER && ctx->oformat == &ff_mpeg2dvd_muxer); s->is_dvd = (CONFIG_MPEG2DVD_MUXER && ctx->oformat == &ff_mpeg2dvd_muxer.p);
if (ctx->packet_size) { if (ctx->packet_size) {
if (ctx->packet_size < 20 || ctx->packet_size > (1 << 23) + 10) { if (ctx->packet_size < 20 || ctx->packet_size > (1 << 23) + 10) {
@ -1293,87 +1294,87 @@ static const AVClass mpeg_class = {
}; };
#if CONFIG_MPEG1SYSTEM_MUXER #if CONFIG_MPEG1SYSTEM_MUXER
const AVOutputFormat ff_mpeg1system_muxer = { const FFOutputFormat ff_mpeg1system_muxer = {
.name = "mpeg", .p.name = "mpeg",
.long_name = NULL_IF_CONFIG_SMALL("MPEG-1 Systems / MPEG program stream"), .p.long_name = NULL_IF_CONFIG_SMALL("MPEG-1 Systems / MPEG program stream"),
.mime_type = "video/mpeg", .p.mime_type = "video/mpeg",
.extensions = "mpg,mpeg", .p.extensions = "mpg,mpeg",
.priv_data_size = sizeof(MpegMuxContext), .priv_data_size = sizeof(MpegMuxContext),
.audio_codec = AV_CODEC_ID_MP2, .p.audio_codec = AV_CODEC_ID_MP2,
.video_codec = AV_CODEC_ID_MPEG1VIDEO, .p.video_codec = AV_CODEC_ID_MPEG1VIDEO,
.write_header = mpeg_mux_init, .write_header = mpeg_mux_init,
.write_packet = mpeg_mux_write_packet, .write_packet = mpeg_mux_write_packet,
.write_trailer = mpeg_mux_end, .write_trailer = mpeg_mux_end,
.deinit = mpeg_mux_deinit, .deinit = mpeg_mux_deinit,
.priv_class = &mpeg_class, .p.priv_class = &mpeg_class,
}; };
#endif #endif
#if CONFIG_MPEG1VCD_MUXER #if CONFIG_MPEG1VCD_MUXER
const AVOutputFormat ff_mpeg1vcd_muxer = { const FFOutputFormat ff_mpeg1vcd_muxer = {
.name = "vcd", .p.name = "vcd",
.long_name = NULL_IF_CONFIG_SMALL("MPEG-1 Systems / MPEG program stream (VCD)"), .p.long_name = NULL_IF_CONFIG_SMALL("MPEG-1 Systems / MPEG program stream (VCD)"),
.mime_type = "video/mpeg", .p.mime_type = "video/mpeg",
.priv_data_size = sizeof(MpegMuxContext), .priv_data_size = sizeof(MpegMuxContext),
.audio_codec = AV_CODEC_ID_MP2, .p.audio_codec = AV_CODEC_ID_MP2,
.video_codec = AV_CODEC_ID_MPEG1VIDEO, .p.video_codec = AV_CODEC_ID_MPEG1VIDEO,
.write_header = mpeg_mux_init, .write_header = mpeg_mux_init,
.write_packet = mpeg_mux_write_packet, .write_packet = mpeg_mux_write_packet,
.write_trailer = mpeg_mux_end, .write_trailer = mpeg_mux_end,
.deinit = mpeg_mux_deinit, .deinit = mpeg_mux_deinit,
.priv_class = &mpeg_class, .p.priv_class = &mpeg_class,
}; };
#endif #endif
#if CONFIG_MPEG2VOB_MUXER #if CONFIG_MPEG2VOB_MUXER
const AVOutputFormat ff_mpeg2vob_muxer = { const FFOutputFormat ff_mpeg2vob_muxer = {
.name = "vob", .p.name = "vob",
.long_name = NULL_IF_CONFIG_SMALL("MPEG-2 PS (VOB)"), .p.long_name = NULL_IF_CONFIG_SMALL("MPEG-2 PS (VOB)"),
.mime_type = "video/mpeg", .p.mime_type = "video/mpeg",
.extensions = "vob", .p.extensions = "vob",
.priv_data_size = sizeof(MpegMuxContext), .priv_data_size = sizeof(MpegMuxContext),
.audio_codec = AV_CODEC_ID_MP2, .p.audio_codec = AV_CODEC_ID_MP2,
.video_codec = AV_CODEC_ID_MPEG2VIDEO, .p.video_codec = AV_CODEC_ID_MPEG2VIDEO,
.write_header = mpeg_mux_init, .write_header = mpeg_mux_init,
.write_packet = mpeg_mux_write_packet, .write_packet = mpeg_mux_write_packet,
.write_trailer = mpeg_mux_end, .write_trailer = mpeg_mux_end,
.deinit = mpeg_mux_deinit, .deinit = mpeg_mux_deinit,
.priv_class = &mpeg_class, .p.priv_class = &mpeg_class,
}; };
#endif #endif
/* Same as mpeg2vob_mux except that the pack size is 2324 */ /* Same as mpeg2vob_mux except that the pack size is 2324 */
#if CONFIG_MPEG2SVCD_MUXER #if CONFIG_MPEG2SVCD_MUXER
const AVOutputFormat ff_mpeg2svcd_muxer = { const FFOutputFormat ff_mpeg2svcd_muxer = {
.name = "svcd", .p.name = "svcd",
.long_name = NULL_IF_CONFIG_SMALL("MPEG-2 PS (SVCD)"), .p.long_name = NULL_IF_CONFIG_SMALL("MPEG-2 PS (SVCD)"),
.mime_type = "video/mpeg", .p.mime_type = "video/mpeg",
.extensions = "vob", .p.extensions = "vob",
.priv_data_size = sizeof(MpegMuxContext), .priv_data_size = sizeof(MpegMuxContext),
.audio_codec = AV_CODEC_ID_MP2, .p.audio_codec = AV_CODEC_ID_MP2,
.video_codec = AV_CODEC_ID_MPEG2VIDEO, .p.video_codec = AV_CODEC_ID_MPEG2VIDEO,
.write_header = mpeg_mux_init, .write_header = mpeg_mux_init,
.write_packet = mpeg_mux_write_packet, .write_packet = mpeg_mux_write_packet,
.write_trailer = mpeg_mux_end, .write_trailer = mpeg_mux_end,
.deinit = mpeg_mux_deinit, .deinit = mpeg_mux_deinit,
.priv_class = &mpeg_class, .p.priv_class = &mpeg_class,
}; };
#endif #endif
/* Same as mpeg2vob_mux except the 'is_dvd' flag is set to produce NAV pkts */ /* Same as mpeg2vob_mux except the 'is_dvd' flag is set to produce NAV pkts */
#if CONFIG_MPEG2DVD_MUXER #if CONFIG_MPEG2DVD_MUXER
const AVOutputFormat ff_mpeg2dvd_muxer = { const FFOutputFormat ff_mpeg2dvd_muxer = {
.name = "dvd", .p.name = "dvd",
.long_name = NULL_IF_CONFIG_SMALL("MPEG-2 PS (DVD VOB)"), .p.long_name = NULL_IF_CONFIG_SMALL("MPEG-2 PS (DVD VOB)"),
.mime_type = "video/mpeg", .p.mime_type = "video/mpeg",
.extensions = "dvd", .p.extensions = "dvd",
.priv_data_size = sizeof(MpegMuxContext), .priv_data_size = sizeof(MpegMuxContext),
.audio_codec = AV_CODEC_ID_MP2, .p.audio_codec = AV_CODEC_ID_MP2,
.video_codec = AV_CODEC_ID_MPEG2VIDEO, .p.video_codec = AV_CODEC_ID_MPEG2VIDEO,
.write_header = mpeg_mux_init, .write_header = mpeg_mux_init,
.write_packet = mpeg_mux_write_packet, .write_packet = mpeg_mux_write_packet,
.write_trailer = mpeg_mux_end, .write_trailer = mpeg_mux_end,
.deinit = mpeg_mux_deinit, .deinit = mpeg_mux_deinit,
.priv_class = &mpeg_class, .p.priv_class = &mpeg_class,
}; };
#endif #endif

View File

@ -2308,19 +2308,19 @@ static const AVClass mpegts_muxer_class = {
.version = LIBAVUTIL_VERSION_INT, .version = LIBAVUTIL_VERSION_INT,
}; };
const AVOutputFormat ff_mpegts_muxer = { const FFOutputFormat ff_mpegts_muxer = {
.name = "mpegts", .p.name = "mpegts",
.long_name = NULL_IF_CONFIG_SMALL("MPEG-TS (MPEG-2 Transport Stream)"), .p.long_name = NULL_IF_CONFIG_SMALL("MPEG-TS (MPEG-2 Transport Stream)"),
.mime_type = "video/MP2T", .p.mime_type = "video/MP2T",
.extensions = "ts,m2t,m2ts,mts", .p.extensions = "ts,m2t,m2ts,mts",
.priv_data_size = sizeof(MpegTSWrite), .priv_data_size = sizeof(MpegTSWrite),
.audio_codec = AV_CODEC_ID_MP2, .p.audio_codec = AV_CODEC_ID_MP2,
.video_codec = AV_CODEC_ID_MPEG2VIDEO, .p.video_codec = AV_CODEC_ID_MPEG2VIDEO,
.init = mpegts_init, .init = mpegts_init,
.write_packet = mpegts_write_packet, .write_packet = mpegts_write_packet,
.write_trailer = mpegts_write_end, .write_trailer = mpegts_write_end,
.deinit = mpegts_deinit, .deinit = mpegts_deinit,
.check_bitstream = mpegts_check_bitstream, .check_bitstream = mpegts_check_bitstream,
.flags = AVFMT_ALLOW_FLUSH | AVFMT_VARIABLE_FPS | AVFMT_NODIMENSIONS, .p.flags = AVFMT_ALLOW_FLUSH | AVFMT_VARIABLE_FPS | AVFMT_NODIMENSIONS,
.priv_class = &mpegts_muxer_class, .p.priv_class = &mpegts_muxer_class,
}; };

View File

@ -20,6 +20,7 @@
*/ */
#include "libavutil/opt.h" #include "libavutil/opt.h"
#include "avformat.h" #include "avformat.h"
#include "mux.h"
/* Multipart JPEG */ /* Multipart JPEG */
@ -61,16 +62,16 @@ static const AVClass mpjpeg_muxer_class = {
.version = LIBAVUTIL_VERSION_INT, .version = LIBAVUTIL_VERSION_INT,
}; };
const AVOutputFormat ff_mpjpeg_muxer = { const FFOutputFormat ff_mpjpeg_muxer = {
.name = "mpjpeg", .p.name = "mpjpeg",
.long_name = NULL_IF_CONFIG_SMALL("MIME multipart JPEG"), .p.long_name = NULL_IF_CONFIG_SMALL("MIME multipart JPEG"),
.mime_type = "multipart/x-mixed-replace;boundary=" BOUNDARY_TAG, .p.mime_type = "multipart/x-mixed-replace;boundary=" BOUNDARY_TAG,
.extensions = "mjpg", .p.extensions = "mjpg",
.priv_data_size = sizeof(MPJPEGContext), .priv_data_size = sizeof(MPJPEGContext),
.audio_codec = AV_CODEC_ID_NONE, .p.audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_MJPEG, .p.video_codec = AV_CODEC_ID_MJPEG,
.write_header = mpjpeg_write_header, .write_header = mpjpeg_write_header,
.write_packet = mpjpeg_write_packet, .write_packet = mpjpeg_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
.priv_class = &mpjpeg_muxer_class, .p.priv_class = &mpjpeg_muxer_class,
}; };

View File

@ -118,8 +118,8 @@ int avformat_alloc_output_context2(AVFormatContext **avctx, const AVOutputFormat
} }
s->oformat = oformat; s->oformat = oformat;
if (s->oformat->priv_data_size > 0) { if (ffofmt(s->oformat)->priv_data_size > 0) {
s->priv_data = av_mallocz(s->oformat->priv_data_size); s->priv_data = av_mallocz(ffofmt(s->oformat)->priv_data_size);
if (!s->priv_data) if (!s->priv_data)
goto nomem; goto nomem;
if (s->oformat->priv_class) { if (s->oformat->priv_class) {
@ -182,7 +182,7 @@ static int init_muxer(AVFormatContext *s, AVDictionary **options)
{ {
FFFormatContext *const si = ffformatcontext(s); FFFormatContext *const si = ffformatcontext(s);
AVDictionary *tmp = NULL; AVDictionary *tmp = NULL;
const AVOutputFormat *of = s->oformat; const FFOutputFormat *of = ffofmt(s->oformat);
AVDictionaryEntry *e; AVDictionaryEntry *e;
int ret = 0; int ret = 0;
@ -201,7 +201,7 @@ static int init_muxer(AVFormatContext *s, AVDictionary **options)
} }
// some sanity checks // some sanity checks
if (s->nb_streams == 0 && !(of->flags & AVFMT_NOSTREAMS)) { if (s->nb_streams == 0 && !(of->p.flags & AVFMT_NOSTREAMS)) {
av_log(s, AV_LOG_ERROR, "No streams to mux were specified\n"); av_log(s, AV_LOG_ERROR, "No streams to mux were specified\n");
ret = AVERROR(EINVAL); ret = AVERROR(EINVAL);
goto fail; goto fail;
@ -251,7 +251,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
break; break;
case AVMEDIA_TYPE_VIDEO: case AVMEDIA_TYPE_VIDEO:
if ((par->width <= 0 || par->height <= 0) && if ((par->width <= 0 || par->height <= 0) &&
!(of->flags & AVFMT_NODIMENSIONS)) { !(of->p.flags & AVFMT_NODIMENSIONS)) {
av_log(s, AV_LOG_ERROR, "dimensions not set\n"); av_log(s, AV_LOG_ERROR, "dimensions not set\n");
ret = AVERROR(EINVAL); ret = AVERROR(EINVAL);
goto fail; goto fail;
@ -281,11 +281,11 @@ FF_ENABLE_DEPRECATION_WARNINGS
sti->is_intra_only = ff_is_intra_only(par->codec_id); sti->is_intra_only = ff_is_intra_only(par->codec_id);
if (of->codec_tag) { if (of->p.codec_tag) {
if ( par->codec_tag if ( par->codec_tag
&& par->codec_id == AV_CODEC_ID_RAWVIDEO && par->codec_id == AV_CODEC_ID_RAWVIDEO
&& ( av_codec_get_tag(of->codec_tag, par->codec_id) == 0 && ( av_codec_get_tag(of->p.codec_tag, par->codec_id) == 0
|| av_codec_get_tag(of->codec_tag, par->codec_id) == MKTAG('r', 'a', 'w', ' ')) || av_codec_get_tag(of->p.codec_tag, par->codec_id) == MKTAG('r', 'a', 'w', ' '))
&& !validate_codec_tag(s, st)) { && !validate_codec_tag(s, st)) {
// the current rawvideo encoding system ends up setting // the current rawvideo encoding system ends up setting
// the wrong codec_tag for avi/mov, we override it here // the wrong codec_tag for avi/mov, we override it here
@ -301,7 +301,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
goto fail; goto fail;
} }
} else } else
par->codec_tag = av_codec_get_tag(of->codec_tag, par->codec_id); par->codec_tag = av_codec_get_tag(of->p.codec_tag, par->codec_id);
} }
if (par->codec_type != AVMEDIA_TYPE_ATTACHMENT) if (par->codec_type != AVMEDIA_TYPE_ATTACHMENT)
@ -319,8 +319,8 @@ FF_ENABLE_DEPRECATION_WARNINGS
ret = AVERROR(ENOMEM); ret = AVERROR(ENOMEM);
goto fail; goto fail;
} }
if (of->priv_class) { if (of->p.priv_class) {
*(const AVClass **)s->priv_data = of->priv_class; *(const AVClass **)s->priv_data = of->p.priv_class;
av_opt_set_defaults(s->priv_data); av_opt_set_defaults(s->priv_data);
if ((ret = av_opt_set_dict2(s->priv_data, &tmp, AV_OPT_SEARCH_CHILDREN)) < 0) if ((ret = av_opt_set_dict2(s->priv_data, &tmp, AV_OPT_SEARCH_CHILDREN)) < 0)
goto fail; goto fail;
@ -343,10 +343,10 @@ FF_ENABLE_DEPRECATION_WARNINGS
*options = tmp; *options = tmp;
} }
if (s->oformat->init) { if (of->init) {
if ((ret = s->oformat->init(s)) < 0) { if ((ret = of->init(s)) < 0) {
if (s->oformat->deinit) if (of->deinit)
s->oformat->deinit(s); of->deinit(s);
return ret; return ret;
} }
return ret == 0; return ret == 0;
@ -420,8 +420,9 @@ static void flush_if_needed(AVFormatContext *s)
static void deinit_muxer(AVFormatContext *s) static void deinit_muxer(AVFormatContext *s)
{ {
FFFormatContext *const si = ffformatcontext(s); FFFormatContext *const si = ffformatcontext(s);
if (s->oformat && s->oformat->deinit && si->initialized) const FFOutputFormat *const of = ffofmt(s->oformat);
s->oformat->deinit(s); if (of && of->deinit && si->initialized)
of->deinit(s);
si->initialized = si->initialized =
si->streams_initialized = 0; si->streams_initialized = 0;
} }
@ -437,7 +438,7 @@ int avformat_init_output(AVFormatContext *s, AVDictionary **options)
si->initialized = 1; si->initialized = 1;
si->streams_initialized = ret; si->streams_initialized = ret;
if (s->oformat->init && ret) { if (ffofmt(s->oformat)->init && ret) {
if ((ret = init_pts(s)) < 0) if ((ret = init_pts(s)) < 0)
return ret; return ret;
@ -460,8 +461,8 @@ int avformat_write_header(AVFormatContext *s, AVDictionary **options)
if (!(s->oformat->flags & AVFMT_NOFILE) && s->pb) if (!(s->oformat->flags & AVFMT_NOFILE) && s->pb)
avio_write_marker(s->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_HEADER); avio_write_marker(s->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_HEADER);
if (s->oformat->write_header) { if (ffofmt(s->oformat)->write_header) {
ret = s->oformat->write_header(s); ret = ffofmt(s->oformat)->write_header(s);
if (ret >= 0 && s->pb && s->pb->error < 0) if (ret >= 0 && s->pb && s->pb->error < 0)
ret = s->pb->error; ret = s->pb->error;
if (ret < 0) if (ret < 0)
@ -724,9 +725,9 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt)
if ((pkt->flags & AV_PKT_FLAG_UNCODED_FRAME)) { if ((pkt->flags & AV_PKT_FLAG_UNCODED_FRAME)) {
AVFrame **frame = (AVFrame **)pkt->data; AVFrame **frame = (AVFrame **)pkt->data;
av_assert0(pkt->size == sizeof(*frame)); av_assert0(pkt->size == sizeof(*frame));
ret = s->oformat->write_uncoded_frame(s, pkt->stream_index, frame, 0); ret = ffofmt(s->oformat)->write_uncoded_frame(s, pkt->stream_index, frame, 0);
} else { } else {
ret = s->oformat->write_packet(s, pkt); ret = ffofmt(s->oformat)->write_packet(s, pkt);
} }
if (s->pb && ret >= 0) { if (s->pb && ret >= 0) {
@ -1078,9 +1079,9 @@ static int check_bitstream(AVFormatContext *s, FFStream *sti, AVPacket *pkt)
if (!(s->flags & AVFMT_FLAG_AUTO_BSF)) if (!(s->flags & AVFMT_FLAG_AUTO_BSF))
return 1; return 1;
if (s->oformat->check_bitstream) { if (ffofmt(s->oformat)->check_bitstream) {
if (!sti->bitstream_checked) { if (!sti->bitstream_checked) {
if ((ret = s->oformat->check_bitstream(s, &sti->pub, pkt)) < 0) if ((ret = ffofmt(s->oformat)->check_bitstream(s, &sti->pub, pkt)) < 0)
return ret; return ret;
else if (ret == 1) else if (ret == 1)
sti->bitstream_checked = 1; sti->bitstream_checked = 1;
@ -1198,7 +1199,7 @@ int av_write_frame(AVFormatContext *s, AVPacket *in)
if (!in) { if (!in) {
if (s->oformat->flags & AVFMT_ALLOW_FLUSH) { if (s->oformat->flags & AVFMT_ALLOW_FLUSH) {
ret = s->oformat->write_packet(s, NULL); ret = ffofmt(s->oformat)->write_packet(s, NULL);
flush_if_needed(s); flush_if_needed(s);
if (ret >= 0 && s->pb && s->pb->error < 0) if (ret >= 0 && s->pb && s->pb->error < 0)
ret = s->pb->error; ret = s->pb->error;
@ -1273,14 +1274,12 @@ int av_write_trailer(AVFormatContext *s)
if (ret >= 0) if (ret >= 0)
ret = ret1; ret = ret1;
if (s->oformat->write_trailer) { if (ffofmt(s->oformat)->write_trailer) {
if (!(s->oformat->flags & AVFMT_NOFILE) && s->pb) if (!(s->oformat->flags & AVFMT_NOFILE) && s->pb)
avio_write_marker(s->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_TRAILER); avio_write_marker(s->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_TRAILER);
if (ret >= 0) { ret1 = ffofmt(s->oformat)->write_trailer(s);
ret = s->oformat->write_trailer(s); if (ret >= 0)
} else { ret = ret1;
s->oformat->write_trailer(s);
}
} }
deinit_muxer(s); deinit_muxer(s);
@ -1303,9 +1302,10 @@ int av_write_trailer(AVFormatContext *s)
int av_get_output_timestamp(struct AVFormatContext *s, int stream, int av_get_output_timestamp(struct AVFormatContext *s, int stream,
int64_t *dts, int64_t *wall) int64_t *dts, int64_t *wall)
{ {
if (!s->oformat || !s->oformat->get_output_timestamp) const FFOutputFormat *const of = ffofmt(s->oformat);
if (!of || !of->get_output_timestamp)
return AVERROR(ENOSYS); return AVERROR(ENOSYS);
s->oformat->get_output_timestamp(s, stream, dts, wall); of->get_output_timestamp(s, stream, dts, wall);
return 0; return 0;
} }
@ -1395,7 +1395,7 @@ static int write_uncoded_frame_internal(AVFormatContext *s, int stream_index,
AVPacket *pkt = si->parse_pkt; AVPacket *pkt = si->parse_pkt;
av_assert0(s->oformat); av_assert0(s->oformat);
if (!s->oformat->write_uncoded_frame) { if (!ffofmt(s->oformat)->write_uncoded_frame) {
av_frame_free(&frame); av_frame_free(&frame);
return AVERROR(ENOSYS); return AVERROR(ENOSYS);
} }
@ -1452,9 +1452,10 @@ int av_interleaved_write_uncoded_frame(AVFormatContext *s, int stream_index,
int av_write_uncoded_frame_query(AVFormatContext *s, int stream_index) int av_write_uncoded_frame_query(AVFormatContext *s, int stream_index)
{ {
av_assert0(s->oformat); const FFOutputFormat *const of = ffofmt(s->oformat);
if (!s->oformat->write_uncoded_frame) av_assert0(of);
if (!of->write_uncoded_frame)
return AVERROR(ENOSYS); return AVERROR(ENOSYS);
return s->oformat->write_uncoded_frame(s, stream_index, NULL, return of->write_uncoded_frame(s, stream_index, NULL,
AV_WRITE_UNCODED_FRAME_QUERY); AV_WRITE_UNCODED_FRAME_QUERY);
} }

View File

@ -25,6 +25,119 @@
#include "libavcodec/packet.h" #include "libavcodec/packet.h"
#include "avformat.h" #include "avformat.h"
struct AVDeviceInfoList;
typedef struct FFOutputFormat {
/**
* The public AVOutputFormat. See avformat.h for it.
*/
AVOutputFormat p;
/**
* size of private data so that it can be allocated in the wrapper
*/
int priv_data_size;
/**
* Internal flags. See FF_FMT_FLAG_* in internal.h.
*/
int flags_internal;
int (*write_header)(AVFormatContext *);
/**
* Write a packet. If AVFMT_ALLOW_FLUSH is set in flags,
* pkt can be NULL in order to flush data buffered in the muxer.
* When flushing, return 0 if there still is more data to flush,
* or 1 if everything was flushed and there is no more buffered
* data.
*/
int (*write_packet)(AVFormatContext *, AVPacket *pkt);
int (*write_trailer)(AVFormatContext *);
/**
* A format-specific function for interleavement.
* If unset, packets will be interleaved by dts.
*
* @param s An AVFormatContext for output. pkt will be added to
* resp. taken from its packet buffer.
* @param[in,out] pkt A packet to be interleaved if has_packet is set;
* also used to return packets. If no packet is returned
* (e.g. on error), pkt is blank on return.
* @param flush 1 if no further packets are available as input and
* all remaining packets should be output.
* @param has_packet If set, pkt contains a packet to be interleaved
* on input; otherwise pkt is blank on input.
* @return 1 if a packet was output, 0 if no packet could be output,
* < 0 if an error occurred
*/
int (*interleave_packet)(AVFormatContext *s, AVPacket *pkt,
int flush, int has_packet);
/**
* Test if the given codec can be stored in this container.
*
* @return 1 if the codec is supported, 0 if it is not.
* A negative number if unknown.
* MKTAG('A', 'P', 'I', 'C') if the codec is only supported as AV_DISPOSITION_ATTACHED_PIC
*/
int (*query_codec)(enum AVCodecID id, int std_compliance);
void (*get_output_timestamp)(AVFormatContext *s, int stream,
int64_t *dts, int64_t *wall);
/**
* Allows sending messages from application to device.
*/
int (*control_message)(AVFormatContext *s, int type,
void *data, size_t data_size);
/**
* Write an uncoded AVFrame.
*
* See av_write_uncoded_frame() for details.
*
* The library will free *frame afterwards, but the muxer can prevent it
* by setting the pointer to NULL.
*/
int (*write_uncoded_frame)(AVFormatContext *, int stream_index,
AVFrame **frame, unsigned flags);
/**
* Returns device list with it properties.
* @see avdevice_list_devices() for more details.
*/
int (*get_device_list)(AVFormatContext *s, struct AVDeviceInfoList *device_list);
/**
* Initialize format. May allocate data here, and set any AVFormatContext or
* AVStream parameters that need to be set before packets are sent.
* This method must not write output.
*
* Return 0 if streams were fully configured, 1 if not, negative AVERROR on failure
*
* Any allocations made here must be freed in deinit().
*/
int (*init)(AVFormatContext *);
/**
* Deinitialize format. If present, this is called whenever the muxer is being
* destroyed, regardless of whether or not the header has been written.
*
* If a trailer is being written, this is called after write_trailer().
*
* This is called if init() fails as well.
*/
void (*deinit)(AVFormatContext *);
/**
* Set up any necessary bitstream filtering and extract any extra data needed
* for the global header.
*
* @note pkt might have been directly forwarded by a meta-muxer; therefore
* pkt->stream_index as well as the pkt's timebase might be invalid.
* Return 0 if more packets from this stream must be checked; 1 if not.
*/
int (*check_bitstream)(AVFormatContext *s, AVStream *st,
const AVPacket *pkt);
} FFOutputFormat;
static inline const FFOutputFormat *ffofmt(const AVOutputFormat *fmt)
{
return (const FFOutputFormat*)fmt;
}
/** /**
* Add packet to an AVFormatContext's packet_buffer list, determining its * Add packet to an AVFormatContext's packet_buffer list, determining its
* interleaved position using compare() function argument. * interleaved position using compare() function argument.

View File

@ -45,8 +45,8 @@ int avformat_query_codec(const AVOutputFormat *ofmt, enum AVCodecID codec_id,
{ {
if (ofmt) { if (ofmt) {
unsigned int codec_tag; unsigned int codec_tag;
if (ofmt->query_codec) if (ffofmt(ofmt)->query_codec)
return ofmt->query_codec(codec_id, std_compliance); return ffofmt(ofmt)->query_codec(codec_id, std_compliance);
else if (ofmt->codec_tag) else if (ofmt->codec_tag)
return !!av_codec_get_tag2(ofmt->codec_tag, codec_id, &codec_tag); return !!av_codec_get_tag2(ofmt->codec_tag, codec_id, &codec_tag);
else if (codec_id == ofmt->video_codec || else if (codec_id == ofmt->video_codec ||

View File

@ -61,8 +61,11 @@
#include "config.h" #include "config.h"
#include "version.h" #include "version.h"
extern const AVOutputFormat ff_mxf_d10_muxer; extern const FFOutputFormat ff_mxf_d10_muxer;
extern const AVOutputFormat ff_mxf_opatom_muxer; extern const FFOutputFormat ff_mxf_opatom_muxer;
#define IS_D10(s) ((s)->oformat == &ff_mxf_d10_muxer.p)
#define IS_OPATOM(s) ((s)->oformat == &ff_mxf_opatom_muxer.p)
#define EDIT_UNITS_PER_BODY 250 #define EDIT_UNITS_PER_BODY 250
#define KAG_SIZE 512 #define KAG_SIZE 512
@ -667,7 +670,7 @@ static void mxf_write_preface(AVFormatContext *s)
// operational pattern // operational pattern
mxf_write_local_tag(s, 16, 0x3B09); mxf_write_local_tag(s, 16, 0x3B09);
if (s->oformat == &ff_mxf_opatom_muxer) if (IS_OPATOM(s))
avio_write(pb, opatom_ul, 16); avio_write(pb, opatom_ul, 16);
else else
avio_write(pb, op1a_ul, 16); avio_write(pb, op1a_ul, 16);
@ -765,7 +768,7 @@ static void mxf_write_identification(AVFormatContext *s)
AVDictionaryEntry *product_entry = av_dict_get(s->metadata, "product_name", NULL, 0); AVDictionaryEntry *product_entry = av_dict_get(s->metadata, "product_name", NULL, 0);
AVDictionaryEntry *version_entry = av_dict_get(s->metadata, "product_version", NULL, 0); AVDictionaryEntry *version_entry = av_dict_get(s->metadata, "product_version", NULL, 0);
const char *company = com_entry ? com_entry->value : "FFmpeg"; const char *company = com_entry ? com_entry->value : "FFmpeg";
const char *product = product_entry ? product_entry->value : s->oformat != &ff_mxf_opatom_muxer ? "OP1a Muxer" : "OPAtom Muxer"; const char *product = product_entry ? product_entry->value : !IS_OPATOM(s) ? "OP1a Muxer" : "OPAtom Muxer";
const char *platform = s->flags & AVFMT_FLAG_BITEXACT ? "Lavf" : PLATFORM_IDENT; const char *platform = s->flags & AVFMT_FLAG_BITEXACT ? "Lavf" : PLATFORM_IDENT;
const char *version = version_entry ? version_entry->value : const char *version = version_entry ? version_entry->value :
s->flags & AVFMT_FLAG_BITEXACT ? "0.0.0" : s->flags & AVFMT_FLAG_BITEXACT ? "0.0.0" :
@ -866,7 +869,7 @@ static void mxf_write_track(AVFormatContext *s, AVStream *st, MXFPackage *packag
// write edit rate // write edit rate
mxf_write_local_tag(s, 8, 0x4B01); mxf_write_local_tag(s, 8, 0x4B01);
if (st == mxf->timecode_track && s->oformat == &ff_mxf_opatom_muxer) { if (st == mxf->timecode_track && IS_OPATOM(s)) {
avio_wb32(pb, mxf->tc.rate.num); avio_wb32(pb, mxf->tc.rate.num);
avio_wb32(pb, mxf->tc.rate.den); avio_wb32(pb, mxf->tc.rate.den);
} else { } else {
@ -902,7 +905,7 @@ static void mxf_write_common_fields(AVFormatContext *s, AVStream *st)
// write duration // write duration
mxf_write_local_tag(s, 8, 0x0202); mxf_write_local_tag(s, 8, 0x0202);
if (st != mxf->timecode_track && s->oformat == &ff_mxf_opatom_muxer && st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) { if (st != mxf->timecode_track && IS_OPATOM(s) && st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
avio_wb64(pb, mxf->body_offset / mxf->edit_unit_byte_count); avio_wb64(pb, mxf->body_offset / mxf->edit_unit_byte_count);
} else { } else {
avio_wb64(pb, mxf->duration); avio_wb64(pb, mxf->duration);
@ -1066,7 +1069,7 @@ static int64_t mxf_write_generic_desc(AVFormatContext *s, AVStream *st, const UI
avio_wb32(pb, st->index+2); avio_wb32(pb, st->index+2);
mxf_write_local_tag(s, 8, 0x3001); mxf_write_local_tag(s, 8, 0x3001);
if (s->oformat == &ff_mxf_d10_muxer) { if (IS_D10(s)) {
avio_wb32(pb, mxf->time_base.den); avio_wb32(pb, mxf->time_base.den);
avio_wb32(pb, mxf->time_base.num); avio_wb32(pb, mxf->time_base.num);
} else { } else {
@ -1138,7 +1141,7 @@ static int64_t mxf_write_cdci_common(AVFormatContext *s, AVStream *st, const UID
mxf_write_local_tag(s, 4, 0x3202); mxf_write_local_tag(s, 4, 0x3202);
avio_wb32(pb, stored_height>>sc->interlaced); avio_wb32(pb, stored_height>>sc->interlaced);
if (s->oformat == &ff_mxf_d10_muxer) { if (IS_D10(s)) {
//Stored F2 Offset //Stored F2 Offset
mxf_write_local_tag(s, 4, 0x3216); mxf_write_local_tag(s, 4, 0x3216);
avio_wb32(pb, 0); avio_wb32(pb, 0);
@ -1435,7 +1438,7 @@ static int64_t mxf_write_generic_sound_common(AVFormatContext *s, AVStream *st,
int show_warnings = !mxf->footer_partition_offset; int show_warnings = !mxf->footer_partition_offset;
int64_t pos = mxf_write_generic_desc(s, st, key); int64_t pos = mxf_write_generic_desc(s, st, key);
if (s->oformat == &ff_mxf_opatom_muxer) { if (IS_OPATOM(s)) {
mxf_write_local_tag(s, 8, 0x3002); mxf_write_local_tag(s, 8, 0x3002);
avio_wb64(pb, mxf->body_offset / mxf->edit_unit_byte_count); avio_wb64(pb, mxf->body_offset / mxf->edit_unit_byte_count);
} }
@ -1449,19 +1452,19 @@ static int64_t mxf_write_generic_sound_common(AVFormatContext *s, AVStream *st,
avio_wb32(pb, st->codecpar->sample_rate); avio_wb32(pb, st->codecpar->sample_rate);
avio_wb32(pb, 1); avio_wb32(pb, 1);
if (s->oformat == &ff_mxf_d10_muxer) { if (IS_D10(s)) {
mxf_write_local_tag(s, 1, 0x3D04); mxf_write_local_tag(s, 1, 0x3D04);
avio_w8(pb, 0); avio_w8(pb, 0);
} }
mxf_write_local_tag(s, 4, 0x3D07); mxf_write_local_tag(s, 4, 0x3D07);
if (mxf->channel_count == -1) { if (mxf->channel_count == -1) {
if (show_warnings && (s->oformat == &ff_mxf_d10_muxer) && if (show_warnings && IS_D10(s) &&
(st->codecpar->ch_layout.nb_channels != 4) && (st->codecpar->ch_layout.nb_channels != 4) &&
(st->codecpar->ch_layout.nb_channels != 8)) (st->codecpar->ch_layout.nb_channels != 8))
av_log(s, AV_LOG_WARNING, "the number of audio channels shall be 4 or 8 : the output will not comply to MXF D-10 specs, use -d10_channelcount to fix this\n"); av_log(s, AV_LOG_WARNING, "the number of audio channels shall be 4 or 8 : the output will not comply to MXF D-10 specs, use -d10_channelcount to fix this\n");
avio_wb32(pb, st->codecpar->ch_layout.nb_channels); avio_wb32(pb, st->codecpar->ch_layout.nb_channels);
} else if (s->oformat == &ff_mxf_d10_muxer) { } else if (IS_D10(s)) {
if (show_warnings && (mxf->channel_count < st->codecpar->ch_layout.nb_channels)) if (show_warnings && (mxf->channel_count < st->codecpar->ch_layout.nb_channels))
av_log(s, AV_LOG_WARNING, "d10_channelcount < actual number of audio channels : some channels will be discarded\n"); av_log(s, AV_LOG_WARNING, "d10_channelcount < actual number of audio channels : some channels will be discarded\n");
if (show_warnings && (mxf->channel_count != 4) && (mxf->channel_count != 8)) if (show_warnings && (mxf->channel_count != 4) && (mxf->channel_count != 8))
@ -1961,7 +1964,7 @@ static int mxf_write_partition(AVFormatContext *s, int bodysid,
avio_wb32(pb, index_byte_count ? indexsid : 0); // indexSID avio_wb32(pb, index_byte_count ? indexsid : 0); // indexSID
// BodyOffset // BodyOffset
if (bodysid && mxf->edit_units_count && mxf->body_partitions_count && s->oformat != &ff_mxf_opatom_muxer) if (bodysid && mxf->edit_units_count && mxf->body_partitions_count && !IS_OPATOM(s))
avio_wb64(pb, mxf->body_offset); avio_wb64(pb, mxf->body_offset);
else else
avio_wb64(pb, 0); avio_wb64(pb, 0);
@ -1969,7 +1972,7 @@ static int mxf_write_partition(AVFormatContext *s, int bodysid,
avio_wb32(pb, bodysid); // bodySID avio_wb32(pb, bodysid); // bodySID
// operational pattern // operational pattern
if (s->oformat == &ff_mxf_opatom_muxer) if (IS_OPATOM(s))
avio_write(pb, opatom_ul, 16); avio_write(pb, opatom_ul, 16);
else else
avio_write(pb, op1a_ul, 16); avio_write(pb, op1a_ul, 16);
@ -2436,7 +2439,7 @@ static int mxf_parse_mpeg2_frame(AVFormatContext *s, AVStream *st,
} }
} }
} }
if (s->oformat != &ff_mxf_d10_muxer) { if (!IS_D10(s)) {
const UID *codec_ul = mxf_get_mpeg2_codec_ul(st->codecpar); const UID *codec_ul = mxf_get_mpeg2_codec_ul(st->codecpar);
if (!codec_ul) if (!codec_ul)
return 0; return 0;
@ -2533,7 +2536,7 @@ static int mxf_init(AVFormatContext *s)
uint8_t present[FF_ARRAY_ELEMS(mxf_essence_container_uls)] = {0}; uint8_t present[FF_ARRAY_ELEMS(mxf_essence_container_uls)] = {0};
int64_t timestamp = 0; int64_t timestamp = 0;
if (s->oformat == &ff_mxf_opatom_muxer && s->nb_streams !=1) { if (IS_OPATOM(s) && s->nb_streams != 1) {
av_log(s, AV_LOG_ERROR, "there must be exactly one stream for mxf opatom\n"); av_log(s, AV_LOG_ERROR, "there must be exactly one stream for mxf opatom\n");
return -1; return -1;
} }
@ -2549,7 +2552,7 @@ static int mxf_init(AVFormatContext *s)
st->priv_data = sc; st->priv_data = sc;
sc->index = -1; sc->index = -1;
if (((i == 0) ^ (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)) && s->oformat != &ff_mxf_opatom_muxer) { if (((i == 0) ^ (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)) && !IS_OPATOM(s)) {
av_log(s, AV_LOG_ERROR, "there must be exactly one video stream and it must be the first one\n"); av_log(s, AV_LOG_ERROR, "there must be exactly one video stream and it must be the first one\n");
return -1; return -1;
} }
@ -2593,12 +2596,12 @@ static int mxf_init(AVFormatContext *s)
sc->video_bit_rate = st->codecpar->bit_rate; sc->video_bit_rate = st->codecpar->bit_rate;
if (s->oformat == &ff_mxf_d10_muxer || if (IS_D10(s) ||
st->codecpar->codec_id == AV_CODEC_ID_DNXHD || st->codecpar->codec_id == AV_CODEC_ID_DNXHD ||
st->codecpar->codec_id == AV_CODEC_ID_DVVIDEO) st->codecpar->codec_id == AV_CODEC_ID_DVVIDEO)
mxf->cbr_index = 1; mxf->cbr_index = 1;
if (s->oformat == &ff_mxf_d10_muxer) { if (IS_D10(s)) {
int ntsc = mxf->time_base.den != 25; int ntsc = mxf->time_base.den != 25;
int ul_index; int ul_index;
@ -2636,7 +2639,7 @@ static int mxf_init(AVFormatContext *s)
return -1; return -1;
} }
avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate); avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate);
if (s->oformat == &ff_mxf_d10_muxer) { if (IS_D10(s)) {
if (st->index != 1) { if (st->index != 1) {
av_log(s, AV_LOG_ERROR, "MXF D-10 only support one audio track\n"); av_log(s, AV_LOG_ERROR, "MXF D-10 only support one audio track\n");
return -1; return -1;
@ -2648,7 +2651,7 @@ static int mxf_init(AVFormatContext *s)
sc->index = INDEX_D10_AUDIO; sc->index = INDEX_D10_AUDIO;
sc->container_ul = ((MXFStreamContext*)s->streams[0]->priv_data)->container_ul; sc->container_ul = ((MXFStreamContext*)s->streams[0]->priv_data)->container_ul;
sc->frame_size = 4 + 8 * av_rescale_rnd(st->codecpar->sample_rate, mxf->time_base.num, mxf->time_base.den, AV_ROUND_UP) * 4; sc->frame_size = 4 + 8 * av_rescale_rnd(st->codecpar->sample_rate, mxf->time_base.num, mxf->time_base.den, AV_ROUND_UP) * 4;
} else if (s->oformat == &ff_mxf_opatom_muxer) { } else if (IS_OPATOM(s)) {
AVRational tbc = av_inv_q(mxf->audio_edit_rate); AVRational tbc = av_inv_q(mxf->audio_edit_rate);
if (st->codecpar->codec_id != AV_CODEC_ID_PCM_S16LE && if (st->codecpar->codec_id != AV_CODEC_ID_PCM_S16LE &&
@ -2707,7 +2710,7 @@ static int mxf_init(AVFormatContext *s)
memcpy(sc->track_essence_element_key, mxf_essence_container_uls[sc->index].element_ul, 15); memcpy(sc->track_essence_element_key, mxf_essence_container_uls[sc->index].element_ul, 15);
sc->track_essence_element_key[15] = present[sc->index]; sc->track_essence_element_key[15] = present[sc->index];
if (s->oformat == &ff_mxf_opatom_muxer && st->codecpar->codec_id == AV_CODEC_ID_DNXHD) { if (IS_OPATOM(s) && st->codecpar->codec_id == AV_CODEC_ID_DNXHD) {
// clip-wrapping requires 0x0D per ST2019-4:2009 or 0x06 per previous version ST2019-4:2008 // clip-wrapping requires 0x0D per ST2019-4:2009 or 0x06 per previous version ST2019-4:2008
// we choose to use 0x06 instead 0x0D to be compatible with AVID systems // we choose to use 0x06 instead 0x0D to be compatible with AVID systems
// and produce mxf files with the most relevant flavour for opatom // and produce mxf files with the most relevant flavour for opatom
@ -2720,7 +2723,7 @@ static int mxf_init(AVFormatContext *s)
present[sc->index]++; present[sc->index]++;
} }
if (s->oformat == &ff_mxf_d10_muxer || s->oformat == &ff_mxf_opatom_muxer) { if (IS_D10(s) || IS_OPATOM(s)) {
mxf->essence_container_count = 1; mxf->essence_container_count = 1;
} }
@ -2889,7 +2892,7 @@ static void mxf_compute_edit_unit_byte_count(AVFormatContext *s)
MXFContext *mxf = s->priv_data; MXFContext *mxf = s->priv_data;
int i; int i;
if (s->oformat == &ff_mxf_opatom_muxer) { if (IS_OPATOM(s)) {
MXFStreamContext *sc = s->streams[0]->priv_data; MXFStreamContext *sc = s->streams[0]->priv_data;
mxf->edit_unit_byte_count = sc->frame_size; mxf->edit_unit_byte_count = sc->frame_size;
return; return;
@ -2915,7 +2918,7 @@ static int mxf_write_packet(AVFormatContext *s, AVPacket *pkt)
int err; int err;
if (!mxf->header_written && pkt->stream_index != 0 && if (!mxf->header_written && pkt->stream_index != 0 &&
s->oformat != &ff_mxf_opatom_muxer) { !IS_OPATOM(s)) {
av_log(s, AV_LOG_ERROR, "Received non-video packet before " av_log(s, AV_LOG_ERROR, "Received non-video packet before "
"header has been written\n"); "header has been written\n");
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
@ -2967,7 +2970,7 @@ static int mxf_write_packet(AVFormatContext *s, AVPacket *pkt)
mxf_compute_edit_unit_byte_count(s); mxf_compute_edit_unit_byte_count(s);
} }
if (s->oformat == &ff_mxf_opatom_muxer) if (IS_OPATOM(s))
return mxf_write_opatom_packet(s, pkt, &ie); return mxf_write_opatom_packet(s, pkt, &ie);
if (!mxf->header_written) { if (!mxf->header_written) {
@ -3015,8 +3018,7 @@ static int mxf_write_packet(AVFormatContext *s, AVPacket *pkt)
mxf_write_klv_fill(s); mxf_write_klv_fill(s);
avio_write(pb, sc->track_essence_element_key, 16); // write key avio_write(pb, sc->track_essence_element_key, 16); // write key
if (s->oformat == &ff_mxf_d10_muxer && if (IS_D10(s) && st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
mxf_write_d10_audio_packet(s, st, pkt); mxf_write_d10_audio_packet(s, st, pkt);
} else { } else {
klv_encode_ber4_length(pb, pkt->size); // write length klv_encode_ber4_length(pb, pkt->size); // write length
@ -3037,7 +3039,7 @@ static void mxf_write_random_index_pack(AVFormatContext *s)
avio_write(pb, ff_mxf_random_index_pack_key, 16); avio_write(pb, ff_mxf_random_index_pack_key, 16);
klv_encode_ber_length(pb, 28 + 12LL*mxf->body_partitions_count); klv_encode_ber_length(pb, 28 + 12LL*mxf->body_partitions_count);
if (mxf->edit_unit_byte_count && s->oformat != &ff_mxf_opatom_muxer) if (mxf->edit_unit_byte_count && !IS_OPATOM(s))
avio_wb32(pb, 1); // BodySID of header partition avio_wb32(pb, 1); // BodySID of header partition
else else
avio_wb32(pb, 0); avio_wb32(pb, 0);
@ -3061,7 +3063,7 @@ static int mxf_write_footer(AVFormatContext *s)
int i, err; int i, err;
if (!mxf->header_written || if (!mxf->header_written ||
(s->oformat == &ff_mxf_opatom_muxer && !mxf->body_partition_offset)) { (IS_OPATOM(s) && !mxf->body_partition_offset)) {
/* reason could be invalid options/not supported codec/out of memory */ /* reason could be invalid options/not supported codec/out of memory */
return AVERROR_UNKNOWN; return AVERROR_UNKNOWN;
} }
@ -3070,7 +3072,7 @@ static int mxf_write_footer(AVFormatContext *s)
mxf_write_klv_fill(s); mxf_write_klv_fill(s);
mxf->footer_partition_offset = avio_tell(pb); mxf->footer_partition_offset = avio_tell(pb);
if (mxf->edit_unit_byte_count && s->oformat != &ff_mxf_opatom_muxer) { // no need to repeat index if (mxf->edit_unit_byte_count && !IS_OPATOM(s)) { // no need to repeat index
if ((err = mxf_write_partition(s, 0, 0, footer_partition_key, 0)) < 0) if ((err = mxf_write_partition(s, 0, 0, footer_partition_key, 0)) < 0)
return err; return err;
} else { } else {
@ -3084,7 +3086,7 @@ static int mxf_write_footer(AVFormatContext *s)
mxf_write_random_index_pack(s); mxf_write_random_index_pack(s);
if (s->pb->seekable & AVIO_SEEKABLE_NORMAL) { if (s->pb->seekable & AVIO_SEEKABLE_NORMAL) {
if (s->oformat == &ff_mxf_opatom_muxer) { if (IS_OPATOM(s)) {
/* rewrite body partition to update lengths */ /* rewrite body partition to update lengths */
avio_seek(pb, mxf->body_partition_offset[0], SEEK_SET); avio_seek(pb, mxf->body_partition_offset[0], SEEK_SET);
if ((err = mxf_write_opatom_body_partition(s)) < 0) if ((err = mxf_write_opatom_body_partition(s)) < 0)
@ -3092,7 +3094,7 @@ static int mxf_write_footer(AVFormatContext *s)
} }
avio_seek(pb, 0, SEEK_SET); avio_seek(pb, 0, SEEK_SET);
if (mxf->edit_unit_byte_count && s->oformat != &ff_mxf_opatom_muxer) { if (mxf->edit_unit_byte_count && !IS_OPATOM(s)) {
if ((err = mxf_write_partition(s, 1, 2, header_closed_partition_key, 1)) < 0) if ((err = mxf_write_partition(s, 1, 2, header_closed_partition_key, 1)) < 0)
return err; return err;
mxf_write_klv_fill(s); mxf_write_klv_fill(s);
@ -3260,52 +3262,52 @@ static const AVClass mxf_opatom_muxer_class = {
.version = LIBAVUTIL_VERSION_INT, .version = LIBAVUTIL_VERSION_INT,
}; };
const AVOutputFormat ff_mxf_muxer = { const FFOutputFormat ff_mxf_muxer = {
.name = "mxf", .p.name = "mxf",
.long_name = NULL_IF_CONFIG_SMALL("MXF (Material eXchange Format)"), .p.long_name = NULL_IF_CONFIG_SMALL("MXF (Material eXchange Format)"),
.mime_type = "application/mxf", .p.mime_type = "application/mxf",
.extensions = "mxf", .p.extensions = "mxf",
.priv_data_size = sizeof(MXFContext), .priv_data_size = sizeof(MXFContext),
.audio_codec = AV_CODEC_ID_PCM_S16LE, .p.audio_codec = AV_CODEC_ID_PCM_S16LE,
.video_codec = AV_CODEC_ID_MPEG2VIDEO, .p.video_codec = AV_CODEC_ID_MPEG2VIDEO,
.init = mxf_init, .init = mxf_init,
.write_packet = mxf_write_packet, .write_packet = mxf_write_packet,
.write_trailer = mxf_write_footer, .write_trailer = mxf_write_footer,
.deinit = mxf_deinit, .deinit = mxf_deinit,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
.interleave_packet = mxf_interleave, .interleave_packet = mxf_interleave,
.priv_class = &mxf_muxer_class, .p.priv_class = &mxf_muxer_class,
}; };
const AVOutputFormat ff_mxf_d10_muxer = { const FFOutputFormat ff_mxf_d10_muxer = {
.name = "mxf_d10", .p.name = "mxf_d10",
.long_name = NULL_IF_CONFIG_SMALL("MXF (Material eXchange Format) D-10 Mapping"), .p.long_name = NULL_IF_CONFIG_SMALL("MXF (Material eXchange Format) D-10 Mapping"),
.mime_type = "application/mxf", .p.mime_type = "application/mxf",
.priv_data_size = sizeof(MXFContext), .priv_data_size = sizeof(MXFContext),
.audio_codec = AV_CODEC_ID_PCM_S16LE, .p.audio_codec = AV_CODEC_ID_PCM_S16LE,
.video_codec = AV_CODEC_ID_MPEG2VIDEO, .p.video_codec = AV_CODEC_ID_MPEG2VIDEO,
.init = mxf_init, .init = mxf_init,
.write_packet = mxf_write_packet, .write_packet = mxf_write_packet,
.write_trailer = mxf_write_footer, .write_trailer = mxf_write_footer,
.deinit = mxf_deinit, .deinit = mxf_deinit,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
.interleave_packet = mxf_interleave, .interleave_packet = mxf_interleave,
.priv_class = &mxf_d10_muxer_class, .p.priv_class = &mxf_d10_muxer_class,
}; };
const AVOutputFormat ff_mxf_opatom_muxer = { const FFOutputFormat ff_mxf_opatom_muxer = {
.name = "mxf_opatom", .p.name = "mxf_opatom",
.long_name = NULL_IF_CONFIG_SMALL("MXF (Material eXchange Format) Operational Pattern Atom"), .p.long_name = NULL_IF_CONFIG_SMALL("MXF (Material eXchange Format) Operational Pattern Atom"),
.mime_type = "application/mxf", .p.mime_type = "application/mxf",
.extensions = "mxf", .p.extensions = "mxf",
.priv_data_size = sizeof(MXFContext), .priv_data_size = sizeof(MXFContext),
.audio_codec = AV_CODEC_ID_PCM_S16LE, .p.audio_codec = AV_CODEC_ID_PCM_S16LE,
.video_codec = AV_CODEC_ID_DNXHD, .p.video_codec = AV_CODEC_ID_DNXHD,
.init = mxf_init, .init = mxf_init,
.write_packet = mxf_write_packet, .write_packet = mxf_write_packet,
.write_trailer = mxf_write_footer, .write_trailer = mxf_write_footer,
.deinit = mxf_deinit, .deinit = mxf_deinit,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
.interleave_packet = mxf_interleave, .interleave_packet = mxf_interleave,
.priv_class = &mxf_opatom_muxer_class, .p.priv_class = &mxf_opatom_muxer_class,
}; };

View File

@ -27,12 +27,12 @@ static int null_write_packet(struct AVFormatContext *s, AVPacket *pkt)
return 0; return 0;
} }
const AVOutputFormat ff_null_muxer = { const FFOutputFormat ff_null_muxer = {
.name = "null", .p.name = "null",
.long_name = NULL_IF_CONFIG_SMALL("raw null video"), .p.long_name = NULL_IF_CONFIG_SMALL("raw null video"),
.audio_codec = AV_NE(AV_CODEC_ID_PCM_S16BE, AV_CODEC_ID_PCM_S16LE), .p.audio_codec = AV_NE(AV_CODEC_ID_PCM_S16BE, AV_CODEC_ID_PCM_S16LE),
.video_codec = AV_CODEC_ID_WRAPPED_AVFRAME, .p.video_codec = AV_CODEC_ID_WRAPPED_AVFRAME,
.write_packet = null_write_packet, .write_packet = null_write_packet,
.flags = AVFMT_VARIABLE_FPS | AVFMT_NOFILE | AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_VARIABLE_FPS | AVFMT_NOFILE | AVFMT_NOTIMESTAMPS,
.interleave_packet = ff_interleave_packet_passthrough, .interleave_packet = ff_interleave_packet_passthrough,
}; };

View File

@ -1253,20 +1253,20 @@ static const AVClass class = {
.version = LIBAVUTIL_VERSION_INT, .version = LIBAVUTIL_VERSION_INT,
}; };
const AVOutputFormat ff_nut_muxer = { const FFOutputFormat ff_nut_muxer = {
.name = "nut", .p.name = "nut",
.long_name = NULL_IF_CONFIG_SMALL("NUT"), .p.long_name = NULL_IF_CONFIG_SMALL("NUT"),
.mime_type = "video/x-nut", .p.mime_type = "video/x-nut",
.extensions = "nut", .p.extensions = "nut",
.priv_data_size = sizeof(NUTContext), .priv_data_size = sizeof(NUTContext),
.audio_codec = CONFIG_LIBVORBIS ? AV_CODEC_ID_VORBIS : .p.audio_codec = CONFIG_LIBVORBIS ? AV_CODEC_ID_VORBIS :
CONFIG_LIBMP3LAME ? AV_CODEC_ID_MP3 : AV_CODEC_ID_MP2, CONFIG_LIBMP3LAME ? AV_CODEC_ID_MP3 : AV_CODEC_ID_MP2,
.video_codec = AV_CODEC_ID_MPEG4, .p.video_codec = AV_CODEC_ID_MPEG4,
.write_header = nut_write_header, .write_header = nut_write_header,
.write_packet = nut_write_packet, .write_packet = nut_write_packet,
.write_trailer = nut_write_trailer, .write_trailer = nut_write_trailer,
.deinit = nut_write_deinit, .deinit = nut_write_deinit,
.flags = AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS, .p.flags = AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS,
.codec_tag = ff_nut_codec_tags, .p.codec_tag = ff_nut_codec_tags,
.priv_class = &class, .p.priv_class = &class,
}; };

View File

@ -33,6 +33,7 @@
#include "avformat.h" #include "avformat.h"
#include "avio_internal.h" #include "avio_internal.h"
#include "internal.h" #include "internal.h"
#include "mux.h"
#include "version.h" #include "version.h"
#include "vorbiscomment.h" #include "vorbiscomment.h"
@ -746,11 +747,11 @@ static void ogg_free(AVFormatContext *s)
} }
#if CONFIG_OGG_MUXER #if CONFIG_OGG_MUXER
const AVOutputFormat ff_ogg_muxer = { const FFOutputFormat ff_ogg_muxer = {
.name = "ogg", .p.name = "ogg",
.long_name = NULL_IF_CONFIG_SMALL("Ogg"), .p.long_name = NULL_IF_CONFIG_SMALL("Ogg"),
.mime_type = "application/ogg", .p.mime_type = "application/ogg",
.extensions = "ogg" .p.extensions = "ogg"
#if !CONFIG_OGV_MUXER #if !CONFIG_OGV_MUXER
",ogv" ",ogv"
#endif #endif
@ -762,90 +763,90 @@ const AVOutputFormat ff_ogg_muxer = {
#endif #endif
, ,
.priv_data_size = sizeof(OGGContext), .priv_data_size = sizeof(OGGContext),
.audio_codec = CONFIG_LIBVORBIS_ENCODER ? .p.audio_codec = CONFIG_LIBVORBIS_ENCODER ?
AV_CODEC_ID_VORBIS : AV_CODEC_ID_FLAC, AV_CODEC_ID_VORBIS : AV_CODEC_ID_FLAC,
.video_codec = AV_CODEC_ID_THEORA, .p.video_codec = AV_CODEC_ID_THEORA,
.init = ogg_init, .init = ogg_init,
.write_header = ogg_write_header, .write_header = ogg_write_header,
.write_packet = ogg_write_packet, .write_packet = ogg_write_packet,
.write_trailer = ogg_write_trailer, .write_trailer = ogg_write_trailer,
.deinit = ogg_free, .deinit = ogg_free,
.flags = AVFMT_TS_NEGATIVE | AVFMT_TS_NONSTRICT | AVFMT_ALLOW_FLUSH, .p.flags = AVFMT_TS_NEGATIVE | AVFMT_TS_NONSTRICT | AVFMT_ALLOW_FLUSH,
.priv_class = &ogg_muxer_class, .p.priv_class = &ogg_muxer_class,
}; };
#endif #endif
#if CONFIG_OGA_MUXER #if CONFIG_OGA_MUXER
const AVOutputFormat ff_oga_muxer = { const FFOutputFormat ff_oga_muxer = {
.name = "oga", .p.name = "oga",
.long_name = NULL_IF_CONFIG_SMALL("Ogg Audio"), .p.long_name = NULL_IF_CONFIG_SMALL("Ogg Audio"),
.mime_type = "audio/ogg", .p.mime_type = "audio/ogg",
.extensions = "oga", .p.extensions = "oga",
.priv_data_size = sizeof(OGGContext), .priv_data_size = sizeof(OGGContext),
.audio_codec = AV_CODEC_ID_FLAC, .p.audio_codec = AV_CODEC_ID_FLAC,
.init = ogg_init, .init = ogg_init,
.write_header = ogg_write_header, .write_header = ogg_write_header,
.write_packet = ogg_write_packet, .write_packet = ogg_write_packet,
.write_trailer = ogg_write_trailer, .write_trailer = ogg_write_trailer,
.deinit = ogg_free, .deinit = ogg_free,
.flags = AVFMT_TS_NEGATIVE | AVFMT_ALLOW_FLUSH, .p.flags = AVFMT_TS_NEGATIVE | AVFMT_ALLOW_FLUSH,
.priv_class = &ogg_muxer_class, .p.priv_class = &ogg_muxer_class,
}; };
#endif #endif
#if CONFIG_OGV_MUXER #if CONFIG_OGV_MUXER
const AVOutputFormat ff_ogv_muxer = { const FFOutputFormat ff_ogv_muxer = {
.name = "ogv", .p.name = "ogv",
.long_name = NULL_IF_CONFIG_SMALL("Ogg Video"), .p.long_name = NULL_IF_CONFIG_SMALL("Ogg Video"),
.mime_type = "video/ogg", .p.mime_type = "video/ogg",
.extensions = "ogv", .p.extensions = "ogv",
.priv_data_size = sizeof(OGGContext), .priv_data_size = sizeof(OGGContext),
.audio_codec = CONFIG_LIBVORBIS_ENCODER ? .p.audio_codec = CONFIG_LIBVORBIS_ENCODER ?
AV_CODEC_ID_VORBIS : AV_CODEC_ID_FLAC, AV_CODEC_ID_VORBIS : AV_CODEC_ID_FLAC,
.video_codec = CONFIG_LIBTHEORA_ENCODER ? .p.video_codec = CONFIG_LIBTHEORA_ENCODER ?
AV_CODEC_ID_THEORA : AV_CODEC_ID_VP8, AV_CODEC_ID_THEORA : AV_CODEC_ID_VP8,
.init = ogg_init, .init = ogg_init,
.write_header = ogg_write_header, .write_header = ogg_write_header,
.write_packet = ogg_write_packet, .write_packet = ogg_write_packet,
.write_trailer = ogg_write_trailer, .write_trailer = ogg_write_trailer,
.deinit = ogg_free, .deinit = ogg_free,
.flags = AVFMT_TS_NEGATIVE | AVFMT_TS_NONSTRICT | AVFMT_ALLOW_FLUSH, .p.flags = AVFMT_TS_NEGATIVE | AVFMT_TS_NONSTRICT | AVFMT_ALLOW_FLUSH,
.priv_class = &ogg_muxer_class, .p.priv_class = &ogg_muxer_class,
}; };
#endif #endif
#if CONFIG_SPX_MUXER #if CONFIG_SPX_MUXER
const AVOutputFormat ff_spx_muxer = { const FFOutputFormat ff_spx_muxer = {
.name = "spx", .p.name = "spx",
.long_name = NULL_IF_CONFIG_SMALL("Ogg Speex"), .p.long_name = NULL_IF_CONFIG_SMALL("Ogg Speex"),
.mime_type = "audio/ogg", .p.mime_type = "audio/ogg",
.extensions = "spx", .p.extensions = "spx",
.priv_data_size = sizeof(OGGContext), .priv_data_size = sizeof(OGGContext),
.audio_codec = AV_CODEC_ID_SPEEX, .p.audio_codec = AV_CODEC_ID_SPEEX,
.init = ogg_init, .init = ogg_init,
.write_header = ogg_write_header, .write_header = ogg_write_header,
.write_packet = ogg_write_packet, .write_packet = ogg_write_packet,
.write_trailer = ogg_write_trailer, .write_trailer = ogg_write_trailer,
.deinit = ogg_free, .deinit = ogg_free,
.flags = AVFMT_TS_NEGATIVE | AVFMT_ALLOW_FLUSH, .p.flags = AVFMT_TS_NEGATIVE | AVFMT_ALLOW_FLUSH,
.priv_class = &ogg_muxer_class, .p.priv_class = &ogg_muxer_class,
}; };
#endif #endif
#if CONFIG_OPUS_MUXER #if CONFIG_OPUS_MUXER
const AVOutputFormat ff_opus_muxer = { const FFOutputFormat ff_opus_muxer = {
.name = "opus", .p.name = "opus",
.long_name = NULL_IF_CONFIG_SMALL("Ogg Opus"), .p.long_name = NULL_IF_CONFIG_SMALL("Ogg Opus"),
.mime_type = "audio/ogg", .p.mime_type = "audio/ogg",
.extensions = "opus", .p.extensions = "opus",
.priv_data_size = sizeof(OGGContext), .priv_data_size = sizeof(OGGContext),
.audio_codec = AV_CODEC_ID_OPUS, .p.audio_codec = AV_CODEC_ID_OPUS,
.init = ogg_init, .init = ogg_init,
.write_header = ogg_write_header, .write_header = ogg_write_header,
.write_packet = ogg_write_packet, .write_packet = ogg_write_packet,
.write_trailer = ogg_write_trailer, .write_trailer = ogg_write_trailer,
.deinit = ogg_free, .deinit = ogg_free,
.flags = AVFMT_TS_NEGATIVE | AVFMT_ALLOW_FLUSH, .p.flags = AVFMT_TS_NEGATIVE | AVFMT_ALLOW_FLUSH,
.priv_class = &ogg_muxer_class, .p.priv_class = &ogg_muxer_class,
}; };
#endif #endif

View File

@ -24,6 +24,7 @@
#include "avio_internal.h" #include "avio_internal.h"
#include "id3v2.h" #include "id3v2.h"
#include "internal.h" #include "internal.h"
#include "mux.h"
#include "oma.h" #include "oma.h"
#include "rawenc.h" #include "rawenc.h"
@ -91,14 +92,14 @@ static av_cold int oma_write_header(AVFormatContext *s)
return 0; return 0;
} }
const AVOutputFormat ff_oma_muxer = { const FFOutputFormat ff_oma_muxer = {
.name = "oma", .p.name = "oma",
.long_name = NULL_IF_CONFIG_SMALL("Sony OpenMG audio"), .p.long_name = NULL_IF_CONFIG_SMALL("Sony OpenMG audio"),
.mime_type = "audio/x-oma", .p.mime_type = "audio/x-oma",
.extensions = "oma", .p.extensions = "oma",
.audio_codec = AV_CODEC_ID_ATRAC3, .p.audio_codec = AV_CODEC_ID_ATRAC3,
.write_header = oma_write_header, .write_header = oma_write_header,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.codec_tag = ff_oma_codec_tags_list, .p.codec_tag = ff_oma_codec_tags_list,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };

View File

@ -22,18 +22,19 @@
#include "config_components.h" #include "config_components.h"
#include "avformat.h" #include "avformat.h"
#include "mux.h"
#include "rawenc.h" #include "rawenc.h"
#define PCMDEF_0(name_, long_name_, ext, codec) #define PCMDEF_0(name_, long_name_, ext, codec)
#define PCMDEF_1(name_, long_name_, ext, codec) \ #define PCMDEF_1(name_, long_name_, ext, codec) \
const AVOutputFormat ff_pcm_ ## name_ ## _muxer = { \ const FFOutputFormat ff_pcm_ ## name_ ## _muxer = { \
.name = #name_, \ .p.name = #name_, \
.long_name = NULL_IF_CONFIG_SMALL(long_name_), \ .p.long_name = NULL_IF_CONFIG_SMALL(long_name_), \
.extensions = ext, \ .p.extensions = ext, \
.audio_codec = codec, \ .p.audio_codec = codec, \
.video_codec = AV_CODEC_ID_NONE, \ .p.video_codec = AV_CODEC_ID_NONE, \
.p.flags = AVFMT_NOTIMESTAMPS, \
.write_packet = ff_raw_write_packet, \ .write_packet = ff_raw_write_packet, \
.flags = AVFMT_NOTIMESTAMPS, \
}; };
#define PCMDEF_2(name, long_name, ext, codec, enabled) \ #define PCMDEF_2(name, long_name, ext, codec, enabled) \
PCMDEF_ ## enabled(name, long_name, ext, codec) PCMDEF_ ## enabled(name, long_name, ext, codec)

View File

@ -59,16 +59,16 @@ static int force_one_stream(AVFormatContext *s)
/* Note: Do not forget to add new entries to the Makefile as well. */ /* Note: Do not forget to add new entries to the Makefile as well. */
#if CONFIG_AC3_MUXER #if CONFIG_AC3_MUXER
const AVOutputFormat ff_ac3_muxer = { const FFOutputFormat ff_ac3_muxer = {
.name = "ac3", .p.name = "ac3",
.long_name = NULL_IF_CONFIG_SMALL("raw AC-3"), .p.long_name = NULL_IF_CONFIG_SMALL("raw AC-3"),
.mime_type = "audio/x-ac3", .p.mime_type = "audio/x-ac3",
.extensions = "ac3", .p.extensions = "ac3",
.audio_codec = AV_CODEC_ID_AC3, .p.audio_codec = AV_CODEC_ID_AC3,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
@ -92,266 +92,266 @@ static int adx_write_trailer(AVFormatContext *s)
return 0; return 0;
} }
const AVOutputFormat ff_adx_muxer = { const FFOutputFormat ff_adx_muxer = {
.name = "adx", .p.name = "adx",
.long_name = NULL_IF_CONFIG_SMALL("CRI ADX"), .p.long_name = NULL_IF_CONFIG_SMALL("CRI ADX"),
.extensions = "adx", .p.extensions = "adx",
.audio_codec = AV_CODEC_ID_ADPCM_ADX, .p.audio_codec = AV_CODEC_ID_ADPCM_ADX,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.write_trailer = adx_write_trailer, .write_trailer = adx_write_trailer,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
#if CONFIG_APTX_MUXER #if CONFIG_APTX_MUXER
const AVOutputFormat ff_aptx_muxer = { const FFOutputFormat ff_aptx_muxer = {
.name = "aptx", .p.name = "aptx",
.long_name = NULL_IF_CONFIG_SMALL("raw aptX (Audio Processing Technology for Bluetooth)"), .p.long_name = NULL_IF_CONFIG_SMALL("raw aptX (Audio Processing Technology for Bluetooth)"),
.extensions = "aptx", .p.extensions = "aptx",
.audio_codec = AV_CODEC_ID_APTX, .p.audio_codec = AV_CODEC_ID_APTX,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
#if CONFIG_APTX_HD_MUXER #if CONFIG_APTX_HD_MUXER
const AVOutputFormat ff_aptx_hd_muxer = { const FFOutputFormat ff_aptx_hd_muxer = {
.name = "aptx_hd", .p.name = "aptx_hd",
.long_name = NULL_IF_CONFIG_SMALL("raw aptX HD (Audio Processing Technology for Bluetooth)"), .p.long_name = NULL_IF_CONFIG_SMALL("raw aptX HD (Audio Processing Technology for Bluetooth)"),
.extensions = "aptxhd", .p.extensions = "aptxhd",
.audio_codec = AV_CODEC_ID_APTX_HD, .p.audio_codec = AV_CODEC_ID_APTX_HD,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
#if CONFIG_AVS2_MUXER #if CONFIG_AVS2_MUXER
const AVOutputFormat ff_avs2_muxer = { const FFOutputFormat ff_avs2_muxer = {
.name = "avs2", .p.name = "avs2",
.long_name = NULL_IF_CONFIG_SMALL("raw AVS2-P2/IEEE1857.4 video"), .p.long_name = NULL_IF_CONFIG_SMALL("raw AVS2-P2/IEEE1857.4 video"),
.extensions = "avs,avs2", .p.extensions = "avs,avs2",
.audio_codec = AV_CODEC_ID_NONE, .p.audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_AVS2, .p.video_codec = AV_CODEC_ID_AVS2,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
#if CONFIG_AVS3_MUXER #if CONFIG_AVS3_MUXER
const AVOutputFormat ff_avs3_muxer = { const FFOutputFormat ff_avs3_muxer = {
.name = "avs3", .p.name = "avs3",
.long_name = NULL_IF_CONFIG_SMALL("AVS3-P2/IEEE1857.10"), .p.long_name = NULL_IF_CONFIG_SMALL("AVS3-P2/IEEE1857.10"),
.extensions = "avs3", .p.extensions = "avs3",
.audio_codec = AV_CODEC_ID_NONE, .p.audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_AVS3, .p.video_codec = AV_CODEC_ID_AVS3,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
#if CONFIG_CAVSVIDEO_MUXER #if CONFIG_CAVSVIDEO_MUXER
const AVOutputFormat ff_cavsvideo_muxer = { const FFOutputFormat ff_cavsvideo_muxer = {
.name = "cavsvideo", .p.name = "cavsvideo",
.long_name = NULL_IF_CONFIG_SMALL("raw Chinese AVS (Audio Video Standard) video"), .p.long_name = NULL_IF_CONFIG_SMALL("raw Chinese AVS (Audio Video Standard) video"),
.extensions = "cavs", .p.extensions = "cavs",
.audio_codec = AV_CODEC_ID_NONE, .p.audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_CAVS, .p.video_codec = AV_CODEC_ID_CAVS,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
#if CONFIG_CODEC2RAW_MUXER #if CONFIG_CODEC2RAW_MUXER
const AVOutputFormat ff_codec2raw_muxer = { const FFOutputFormat ff_codec2raw_muxer = {
.name = "codec2raw", .p.name = "codec2raw",
.long_name = NULL_IF_CONFIG_SMALL("raw codec2 muxer"), .p.long_name = NULL_IF_CONFIG_SMALL("raw codec2 muxer"),
.audio_codec = AV_CODEC_ID_CODEC2, .p.audio_codec = AV_CODEC_ID_CODEC2,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
#if CONFIG_DATA_MUXER #if CONFIG_DATA_MUXER
const AVOutputFormat ff_data_muxer = { const FFOutputFormat ff_data_muxer = {
.name = "data", .p.name = "data",
.long_name = NULL_IF_CONFIG_SMALL("raw data"), .p.long_name = NULL_IF_CONFIG_SMALL("raw data"),
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
#if CONFIG_DFPWM_MUXER #if CONFIG_DFPWM_MUXER
const AVOutputFormat ff_dfpwm_muxer = { const FFOutputFormat ff_dfpwm_muxer = {
.name = "dfpwm", .p.name = "dfpwm",
.long_name = NULL_IF_CONFIG_SMALL("raw DFPWM1a"), .p.long_name = NULL_IF_CONFIG_SMALL("raw DFPWM1a"),
.extensions = "dfpwm", .p.extensions = "dfpwm",
.audio_codec = AV_CODEC_ID_DFPWM, .p.audio_codec = AV_CODEC_ID_DFPWM,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
#if CONFIG_DIRAC_MUXER #if CONFIG_DIRAC_MUXER
const AVOutputFormat ff_dirac_muxer = { const FFOutputFormat ff_dirac_muxer = {
.name = "dirac", .p.name = "dirac",
.long_name = NULL_IF_CONFIG_SMALL("raw Dirac"), .p.long_name = NULL_IF_CONFIG_SMALL("raw Dirac"),
.extensions = "drc,vc2", .p.extensions = "drc,vc2",
.audio_codec = AV_CODEC_ID_NONE, .p.audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_DIRAC, .p.video_codec = AV_CODEC_ID_DIRAC,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
#if CONFIG_DNXHD_MUXER #if CONFIG_DNXHD_MUXER
const AVOutputFormat ff_dnxhd_muxer = { const FFOutputFormat ff_dnxhd_muxer = {
.name = "dnxhd", .p.name = "dnxhd",
.long_name = NULL_IF_CONFIG_SMALL("raw DNxHD (SMPTE VC-3)"), .p.long_name = NULL_IF_CONFIG_SMALL("raw DNxHD (SMPTE VC-3)"),
.extensions = "dnxhd,dnxhr", .p.extensions = "dnxhd,dnxhr",
.audio_codec = AV_CODEC_ID_NONE, .p.audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_DNXHD, .p.video_codec = AV_CODEC_ID_DNXHD,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
#if CONFIG_DTS_MUXER #if CONFIG_DTS_MUXER
const AVOutputFormat ff_dts_muxer = { const FFOutputFormat ff_dts_muxer = {
.name = "dts", .p.name = "dts",
.long_name = NULL_IF_CONFIG_SMALL("raw DTS"), .p.long_name = NULL_IF_CONFIG_SMALL("raw DTS"),
.mime_type = "audio/x-dca", .p.mime_type = "audio/x-dca",
.extensions = "dts", .p.extensions = "dts",
.audio_codec = AV_CODEC_ID_DTS, .p.audio_codec = AV_CODEC_ID_DTS,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
#if CONFIG_EAC3_MUXER #if CONFIG_EAC3_MUXER
const AVOutputFormat ff_eac3_muxer = { const FFOutputFormat ff_eac3_muxer = {
.name = "eac3", .p.name = "eac3",
.long_name = NULL_IF_CONFIG_SMALL("raw E-AC-3"), .p.long_name = NULL_IF_CONFIG_SMALL("raw E-AC-3"),
.mime_type = "audio/x-eac3", .p.mime_type = "audio/x-eac3",
.extensions = "eac3,ec3", .p.extensions = "eac3,ec3",
.audio_codec = AV_CODEC_ID_EAC3, .p.audio_codec = AV_CODEC_ID_EAC3,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
#if CONFIG_G722_MUXER #if CONFIG_G722_MUXER
const AVOutputFormat ff_g722_muxer = { const FFOutputFormat ff_g722_muxer = {
.name = "g722", .p.name = "g722",
.long_name = NULL_IF_CONFIG_SMALL("raw G.722"), .p.long_name = NULL_IF_CONFIG_SMALL("raw G.722"),
.mime_type = "audio/G722", .p.mime_type = "audio/G722",
.extensions = "g722", .p.extensions = "g722",
.audio_codec = AV_CODEC_ID_ADPCM_G722, .p.audio_codec = AV_CODEC_ID_ADPCM_G722,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
#if CONFIG_G723_1_MUXER #if CONFIG_G723_1_MUXER
const AVOutputFormat ff_g723_1_muxer = { const FFOutputFormat ff_g723_1_muxer = {
.name = "g723_1", .p.name = "g723_1",
.long_name = NULL_IF_CONFIG_SMALL("raw G.723.1"), .p.long_name = NULL_IF_CONFIG_SMALL("raw G.723.1"),
.mime_type = "audio/g723", .p.mime_type = "audio/g723",
.extensions = "tco,rco", .p.extensions = "tco,rco",
.audio_codec = AV_CODEC_ID_G723_1, .p.audio_codec = AV_CODEC_ID_G723_1,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
#if CONFIG_G726_MUXER #if CONFIG_G726_MUXER
const AVOutputFormat ff_g726_muxer = { const FFOutputFormat ff_g726_muxer = {
.name = "g726", .p.name = "g726",
.long_name = NULL_IF_CONFIG_SMALL("raw big-endian G.726 (\"left-justified\")"), .p.long_name = NULL_IF_CONFIG_SMALL("raw big-endian G.726 (\"left-justified\")"),
.audio_codec = AV_CODEC_ID_ADPCM_G726, .p.audio_codec = AV_CODEC_ID_ADPCM_G726,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
#if CONFIG_G726LE_MUXER #if CONFIG_G726LE_MUXER
const AVOutputFormat ff_g726le_muxer = { const FFOutputFormat ff_g726le_muxer = {
.name = "g726le", .p.name = "g726le",
.long_name = NULL_IF_CONFIG_SMALL("raw little-endian G.726 (\"right-justified\")"), .p.long_name = NULL_IF_CONFIG_SMALL("raw little-endian G.726 (\"right-justified\")"),
.audio_codec = AV_CODEC_ID_ADPCM_G726LE, .p.audio_codec = AV_CODEC_ID_ADPCM_G726LE,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
#if CONFIG_GSM_MUXER #if CONFIG_GSM_MUXER
const AVOutputFormat ff_gsm_muxer = { const FFOutputFormat ff_gsm_muxer = {
.name = "gsm", .p.name = "gsm",
.long_name = NULL_IF_CONFIG_SMALL("raw GSM"), .p.long_name = NULL_IF_CONFIG_SMALL("raw GSM"),
.mime_type = "audio/x-gsm", .p.mime_type = "audio/x-gsm",
.extensions = "gsm", .p.extensions = "gsm",
.audio_codec = AV_CODEC_ID_GSM, .p.audio_codec = AV_CODEC_ID_GSM,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
#if CONFIG_H261_MUXER #if CONFIG_H261_MUXER
const AVOutputFormat ff_h261_muxer = { const FFOutputFormat ff_h261_muxer = {
.name = "h261", .p.name = "h261",
.long_name = NULL_IF_CONFIG_SMALL("raw H.261"), .p.long_name = NULL_IF_CONFIG_SMALL("raw H.261"),
.mime_type = "video/x-h261", .p.mime_type = "video/x-h261",
.extensions = "h261", .p.extensions = "h261",
.audio_codec = AV_CODEC_ID_NONE, .p.audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_H261, .p.video_codec = AV_CODEC_ID_H261,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
#if CONFIG_H263_MUXER #if CONFIG_H263_MUXER
const AVOutputFormat ff_h263_muxer = { const FFOutputFormat ff_h263_muxer = {
.name = "h263", .p.name = "h263",
.long_name = NULL_IF_CONFIG_SMALL("raw H.263"), .p.long_name = NULL_IF_CONFIG_SMALL("raw H.263"),
.mime_type = "video/x-h263", .p.mime_type = "video/x-h263",
.extensions = "h263", .p.extensions = "h263",
.audio_codec = AV_CODEC_ID_NONE, .p.audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_H263, .p.video_codec = AV_CODEC_ID_H263,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
@ -365,16 +365,16 @@ static int h264_check_bitstream(AVFormatContext *s, AVStream *st,
return 1; return 1;
} }
const AVOutputFormat ff_h264_muxer = { const FFOutputFormat ff_h264_muxer = {
.name = "h264", .p.name = "h264",
.long_name = NULL_IF_CONFIG_SMALL("raw H.264 video"), .p.long_name = NULL_IF_CONFIG_SMALL("raw H.264 video"),
.extensions = "h264,264", .p.extensions = "h264,264",
.audio_codec = AV_CODEC_ID_NONE, .p.audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_H264, .p.video_codec = AV_CODEC_ID_H264,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.check_bitstream = h264_check_bitstream, .check_bitstream = h264_check_bitstream,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
@ -388,97 +388,97 @@ static int hevc_check_bitstream(AVFormatContext *s, AVStream *st,
return 1; return 1;
} }
const AVOutputFormat ff_hevc_muxer = { const FFOutputFormat ff_hevc_muxer = {
.name = "hevc", .p.name = "hevc",
.long_name = NULL_IF_CONFIG_SMALL("raw HEVC video"), .p.long_name = NULL_IF_CONFIG_SMALL("raw HEVC video"),
.extensions = "hevc,h265,265", .p.extensions = "hevc,h265,265",
.audio_codec = AV_CODEC_ID_NONE, .p.audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_HEVC, .p.video_codec = AV_CODEC_ID_HEVC,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.check_bitstream = hevc_check_bitstream, .check_bitstream = hevc_check_bitstream,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
#if CONFIG_M4V_MUXER #if CONFIG_M4V_MUXER
const AVOutputFormat ff_m4v_muxer = { const FFOutputFormat ff_m4v_muxer = {
.name = "m4v", .p.name = "m4v",
.long_name = NULL_IF_CONFIG_SMALL("raw MPEG-4 video"), .p.long_name = NULL_IF_CONFIG_SMALL("raw MPEG-4 video"),
.extensions = "m4v", .p.extensions = "m4v",
.audio_codec = AV_CODEC_ID_NONE, .p.audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_MPEG4, .p.video_codec = AV_CODEC_ID_MPEG4,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
#if CONFIG_MJPEG_MUXER #if CONFIG_MJPEG_MUXER
const AVOutputFormat ff_mjpeg_muxer = { const FFOutputFormat ff_mjpeg_muxer = {
.name = "mjpeg", .p.name = "mjpeg",
.long_name = NULL_IF_CONFIG_SMALL("raw MJPEG video"), .p.long_name = NULL_IF_CONFIG_SMALL("raw MJPEG video"),
.mime_type = "video/x-mjpeg", .p.mime_type = "video/x-mjpeg",
.extensions = "mjpg,mjpeg", .p.extensions = "mjpg,mjpeg",
.audio_codec = AV_CODEC_ID_NONE, .p.audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_MJPEG, .p.video_codec = AV_CODEC_ID_MJPEG,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
#if CONFIG_MLP_MUXER #if CONFIG_MLP_MUXER
const AVOutputFormat ff_mlp_muxer = { const FFOutputFormat ff_mlp_muxer = {
.name = "mlp", .p.name = "mlp",
.long_name = NULL_IF_CONFIG_SMALL("raw MLP"), .p.long_name = NULL_IF_CONFIG_SMALL("raw MLP"),
.extensions = "mlp", .p.extensions = "mlp",
.audio_codec = AV_CODEC_ID_MLP, .p.audio_codec = AV_CODEC_ID_MLP,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
#if CONFIG_MP2_MUXER #if CONFIG_MP2_MUXER
const AVOutputFormat ff_mp2_muxer = { const FFOutputFormat ff_mp2_muxer = {
.name = "mp2", .p.name = "mp2",
.long_name = NULL_IF_CONFIG_SMALL("MP2 (MPEG audio layer 2)"), .p.long_name = NULL_IF_CONFIG_SMALL("MP2 (MPEG audio layer 2)"),
.mime_type = "audio/mpeg", .p.mime_type = "audio/mpeg",
.extensions = "mp2,m2a,mpa", .p.extensions = "mp2,m2a,mpa",
.audio_codec = AV_CODEC_ID_MP2, .p.audio_codec = AV_CODEC_ID_MP2,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
#if CONFIG_MPEG1VIDEO_MUXER #if CONFIG_MPEG1VIDEO_MUXER
const AVOutputFormat ff_mpeg1video_muxer = { const FFOutputFormat ff_mpeg1video_muxer = {
.name = "mpeg1video", .p.name = "mpeg1video",
.long_name = NULL_IF_CONFIG_SMALL("raw MPEG-1 video"), .p.long_name = NULL_IF_CONFIG_SMALL("raw MPEG-1 video"),
.mime_type = "video/mpeg", .p.mime_type = "video/mpeg",
.extensions = "mpg,mpeg,m1v", .p.extensions = "mpg,mpeg,m1v",
.audio_codec = AV_CODEC_ID_NONE, .p.audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_MPEG1VIDEO, .p.video_codec = AV_CODEC_ID_MPEG1VIDEO,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
#if CONFIG_MPEG2VIDEO_MUXER #if CONFIG_MPEG2VIDEO_MUXER
const AVOutputFormat ff_mpeg2video_muxer = { const FFOutputFormat ff_mpeg2video_muxer = {
.name = "mpeg2video", .p.name = "mpeg2video",
.long_name = NULL_IF_CONFIG_SMALL("raw MPEG-2 video"), .p.long_name = NULL_IF_CONFIG_SMALL("raw MPEG-2 video"),
.extensions = "m2v", .p.extensions = "m2v",
.audio_codec = AV_CODEC_ID_NONE, .p.audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_MPEG2VIDEO, .p.video_codec = AV_CODEC_ID_MPEG2VIDEO,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
@ -489,66 +489,66 @@ static int obu_check_bitstream(AVFormatContext *s, AVStream *st,
return ff_stream_add_bitstream_filter(st, "av1_metadata", "td=insert"); return ff_stream_add_bitstream_filter(st, "av1_metadata", "td=insert");
} }
const AVOutputFormat ff_obu_muxer = { const FFOutputFormat ff_obu_muxer = {
.name = "obu", .p.name = "obu",
.long_name = NULL_IF_CONFIG_SMALL("AV1 low overhead OBU"), .p.long_name = NULL_IF_CONFIG_SMALL("AV1 low overhead OBU"),
.extensions = "obu", .p.extensions = "obu",
.audio_codec = AV_CODEC_ID_NONE, .p.audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_AV1, .p.video_codec = AV_CODEC_ID_AV1,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.check_bitstream = obu_check_bitstream, .check_bitstream = obu_check_bitstream,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
#if CONFIG_RAWVIDEO_MUXER #if CONFIG_RAWVIDEO_MUXER
const AVOutputFormat ff_rawvideo_muxer = { const FFOutputFormat ff_rawvideo_muxer = {
.name = "rawvideo", .p.name = "rawvideo",
.long_name = NULL_IF_CONFIG_SMALL("raw video"), .p.long_name = NULL_IF_CONFIG_SMALL("raw video"),
.extensions = "yuv,rgb", .p.extensions = "yuv,rgb",
.audio_codec = AV_CODEC_ID_NONE, .p.audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_RAWVIDEO, .p.video_codec = AV_CODEC_ID_RAWVIDEO,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
#if CONFIG_SBC_MUXER #if CONFIG_SBC_MUXER
const AVOutputFormat ff_sbc_muxer = { const FFOutputFormat ff_sbc_muxer = {
.name = "sbc", .p.name = "sbc",
.long_name = NULL_IF_CONFIG_SMALL("raw SBC"), .p.long_name = NULL_IF_CONFIG_SMALL("raw SBC"),
.mime_type = "audio/x-sbc", .p.mime_type = "audio/x-sbc",
.extensions = "sbc,msbc", .p.extensions = "sbc,msbc",
.audio_codec = AV_CODEC_ID_SBC, .p.audio_codec = AV_CODEC_ID_SBC,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
#if CONFIG_TRUEHD_MUXER #if CONFIG_TRUEHD_MUXER
const AVOutputFormat ff_truehd_muxer = { const FFOutputFormat ff_truehd_muxer = {
.name = "truehd", .p.name = "truehd",
.long_name = NULL_IF_CONFIG_SMALL("raw TrueHD"), .p.long_name = NULL_IF_CONFIG_SMALL("raw TrueHD"),
.extensions = "thd", .p.extensions = "thd",
.audio_codec = AV_CODEC_ID_TRUEHD, .p.audio_codec = AV_CODEC_ID_TRUEHD,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif
#if CONFIG_VC1_MUXER #if CONFIG_VC1_MUXER
const AVOutputFormat ff_vc1_muxer = { const FFOutputFormat ff_vc1_muxer = {
.name = "vc1", .p.name = "vc1",
.long_name = NULL_IF_CONFIG_SMALL("raw VC-1 video"), .p.long_name = NULL_IF_CONFIG_SMALL("raw VC-1 video"),
.extensions = "vc1", .p.extensions = "vc1",
.audio_codec = AV_CODEC_ID_NONE, .p.audio_codec = AV_CODEC_ID_NONE,
.video_codec = AV_CODEC_ID_VC1, .p.video_codec = AV_CODEC_ID_VC1,
.init = force_one_stream, .init = force_one_stream,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };
#endif #endif

View File

@ -20,6 +20,7 @@
*/ */
#include "avformat.h" #include "avformat.h"
#include "avio_internal.h" #include "avio_internal.h"
#include "mux.h"
#include "rm.h" #include "rm.h"
#include "libavutil/dict.h" #include "libavutil/dict.h"
@ -465,16 +466,16 @@ static int rm_write_trailer(AVFormatContext *s)
} }
const AVOutputFormat ff_rm_muxer = { const FFOutputFormat ff_rm_muxer = {
.name = "rm", .p.name = "rm",
.long_name = NULL_IF_CONFIG_SMALL("RealMedia"), .p.long_name = NULL_IF_CONFIG_SMALL("RealMedia"),
.mime_type = "application/vnd.rn-realmedia", .p.mime_type = "application/vnd.rn-realmedia",
.extensions = "rm,ra", .p.extensions = "rm,ra",
.priv_data_size = sizeof(RMMuxContext), .priv_data_size = sizeof(RMMuxContext),
.audio_codec = AV_CODEC_ID_AC3, .p.audio_codec = AV_CODEC_ID_AC3,
.video_codec = AV_CODEC_ID_RV10, .p.video_codec = AV_CODEC_ID_RV10,
.write_header = rm_write_header, .write_header = rm_write_header,
.write_packet = rm_write_packet, .write_packet = rm_write_packet,
.write_trailer = rm_write_trailer, .write_trailer = rm_write_trailer,
.codec_tag = (const AVCodecTag* const []){ ff_rm_codec_tags, 0 }, .p.codec_tag = (const AVCodecTag* const []){ ff_rm_codec_tags, 0 },
}; };

View File

@ -22,6 +22,7 @@
#include "avformat.h" #include "avformat.h"
#include "internal.h" #include "internal.h"
#include "mux.h"
#include "rawenc.h" #include "rawenc.h"
#include "riff.h" #include "riff.h"
#include "rso.h" #include "rso.h"
@ -91,15 +92,15 @@ static int rso_write_trailer(AVFormatContext *s)
return 0; return 0;
} }
const AVOutputFormat ff_rso_muxer = { const FFOutputFormat ff_rso_muxer = {
.name = "rso", .p.name = "rso",
.long_name = NULL_IF_CONFIG_SMALL("Lego Mindstorms RSO"), .p.long_name = NULL_IF_CONFIG_SMALL("Lego Mindstorms RSO"),
.extensions = "rso", .p.extensions = "rso",
.audio_codec = AV_CODEC_ID_PCM_U8, .p.audio_codec = AV_CODEC_ID_PCM_U8,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.write_header = rso_write_header, .write_header = rso_write_header,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.write_trailer = rso_write_trailer, .write_trailer = rso_write_trailer,
.codec_tag = ff_rso_codec_tags_list, .p.codec_tag = ff_rso_codec_tags_list,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };

View File

@ -22,6 +22,7 @@
#include "avformat.h" #include "avformat.h"
#include "mpegts.h" #include "mpegts.h"
#include "internal.h" #include "internal.h"
#include "mux.h"
#include "libavutil/mathematics.h" #include "libavutil/mathematics.h"
#include "libavutil/random_seed.h" #include "libavutil/random_seed.h"
#include "libavutil/opt.h" #include "libavutil/opt.h"
@ -659,15 +660,15 @@ static int rtp_write_trailer(AVFormatContext *s1)
return 0; return 0;
} }
const AVOutputFormat ff_rtp_muxer = { const FFOutputFormat ff_rtp_muxer = {
.name = "rtp", .p.name = "rtp",
.long_name = NULL_IF_CONFIG_SMALL("RTP output"), .p.long_name = NULL_IF_CONFIG_SMALL("RTP output"),
.priv_data_size = sizeof(RTPMuxContext), .priv_data_size = sizeof(RTPMuxContext),
.audio_codec = AV_CODEC_ID_PCM_MULAW, .p.audio_codec = AV_CODEC_ID_PCM_MULAW,
.video_codec = AV_CODEC_ID_MPEG4, .p.video_codec = AV_CODEC_ID_MPEG4,
.write_header = rtp_write_header, .write_header = rtp_write_header,
.write_packet = rtp_write_packet, .write_packet = rtp_write_packet,
.write_trailer = rtp_write_trailer, .write_trailer = rtp_write_trailer,
.priv_class = &rtp_muxer_class, .p.priv_class = &rtp_muxer_class,
.flags = AVFMT_TS_NONSTRICT, .p.flags = AVFMT_TS_NONSTRICT,
}; };

View File

@ -23,6 +23,7 @@
#include "libavutil/opt.h" #include "libavutil/opt.h"
#include "avformat.h" #include "avformat.h"
#include "avio_internal.h" #include "avio_internal.h"
#include "mux.h"
typedef struct MuxChain { typedef struct MuxChain {
const AVClass *class; const AVClass *class;
@ -187,14 +188,14 @@ static const AVClass rtp_mpegts_class = {
.version = LIBAVUTIL_VERSION_INT, .version = LIBAVUTIL_VERSION_INT,
}; };
const AVOutputFormat ff_rtp_mpegts_muxer = { const FFOutputFormat ff_rtp_mpegts_muxer = {
.name = "rtp_mpegts", .p.name = "rtp_mpegts",
.long_name = NULL_IF_CONFIG_SMALL("RTP/mpegts output format"), .p.long_name = NULL_IF_CONFIG_SMALL("RTP/mpegts output format"),
.priv_data_size = sizeof(MuxChain), .priv_data_size = sizeof(MuxChain),
.audio_codec = AV_CODEC_ID_AAC, .p.audio_codec = AV_CODEC_ID_AAC,
.video_codec = AV_CODEC_ID_MPEG4, .p.video_codec = AV_CODEC_ID_MPEG4,
.write_header = rtp_mpegts_write_header, .write_header = rtp_mpegts_write_header,
.write_packet = rtp_mpegts_write_packet, .write_packet = rtp_mpegts_write_packet,
.write_trailer = rtp_mpegts_write_close, .write_trailer = rtp_mpegts_write_close,
.priv_class = &rtp_mpegts_class, .p.priv_class = &rtp_mpegts_class,
}; };

View File

@ -244,15 +244,15 @@ static int rtsp_write_close(AVFormatContext *s)
return 0; return 0;
} }
const AVOutputFormat ff_rtsp_muxer = { const FFOutputFormat ff_rtsp_muxer = {
.name = "rtsp", .p.name = "rtsp",
.long_name = NULL_IF_CONFIG_SMALL("RTSP output"), .p.long_name = NULL_IF_CONFIG_SMALL("RTSP output"),
.priv_data_size = sizeof(RTSPState), .priv_data_size = sizeof(RTSPState),
.audio_codec = AV_CODEC_ID_AAC, .p.audio_codec = AV_CODEC_ID_AAC,
.video_codec = AV_CODEC_ID_MPEG4, .p.video_codec = AV_CODEC_ID_MPEG4,
.write_header = rtsp_write_header, .write_header = rtsp_write_header,
.write_packet = rtsp_write_packet, .write_packet = rtsp_write_packet,
.write_trailer = rtsp_write_close, .write_trailer = rtsp_write_close,
.flags = AVFMT_NOFILE | AVFMT_GLOBALHEADER, .p.flags = AVFMT_NOFILE | AVFMT_GLOBALHEADER,
.priv_class = &rtsp_muxer_class, .p.priv_class = &rtsp_muxer_class,
}; };

View File

@ -268,14 +268,14 @@ static int sap_write_packet(AVFormatContext *s, AVPacket *pkt)
return ff_write_chained(rtpctx, 0, pkt, s, 0); return ff_write_chained(rtpctx, 0, pkt, s, 0);
} }
const AVOutputFormat ff_sap_muxer = { const FFOutputFormat ff_sap_muxer = {
.name = "sap", .p.name = "sap",
.long_name = NULL_IF_CONFIG_SMALL("SAP output"), .p.long_name = NULL_IF_CONFIG_SMALL("SAP output"),
.priv_data_size = sizeof(struct SAPState), .priv_data_size = sizeof(struct SAPState),
.audio_codec = AV_CODEC_ID_AAC, .p.audio_codec = AV_CODEC_ID_AAC,
.video_codec = AV_CODEC_ID_MPEG4, .p.video_codec = AV_CODEC_ID_MPEG4,
.write_header = sap_write_header, .write_header = sap_write_header,
.write_packet = sap_write_packet, .write_packet = sap_write_packet,
.write_trailer = sap_write_close, .write_trailer = sap_write_close,
.flags = AVFMT_NOFILE | AVFMT_GLOBALHEADER, .p.flags = AVFMT_NOFILE | AVFMT_GLOBALHEADER,
}; };

View File

@ -21,6 +21,7 @@
#include "avformat.h" #include "avformat.h"
#include "internal.h" #include "internal.h"
#include "mux.h"
#include "libavutil/log.h" #include "libavutil/log.h"
#include "libavutil/intreadwrite.h" #include "libavutil/intreadwrite.h"
@ -111,13 +112,13 @@ static int scc_write_packet(AVFormatContext *avf, AVPacket *pkt)
return 0; return 0;
} }
const AVOutputFormat ff_scc_muxer = { const FFOutputFormat ff_scc_muxer = {
.name = "scc", .p.name = "scc",
.long_name = NULL_IF_CONFIG_SMALL("Scenarist Closed Captions"), .p.long_name = NULL_IF_CONFIG_SMALL("Scenarist Closed Captions"),
.extensions = "scc", .p.extensions = "scc",
.p.flags = AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS | AVFMT_TS_NONSTRICT,
.p.subtitle_codec = AV_CODEC_ID_EIA_608,
.priv_data_size = sizeof(SCCContext), .priv_data_size = sizeof(SCCContext),
.write_header = scc_write_header, .write_header = scc_write_header,
.write_packet = scc_write_packet, .write_packet = scc_write_packet,
.flags = AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS | AVFMT_TS_NONSTRICT,
.subtitle_codec = AV_CODEC_ID_EIA_608,
}; };

View File

@ -280,13 +280,13 @@ static void film_deinit(AVFormatContext *format_context)
ffio_free_dyn_buf(&film->header); ffio_free_dyn_buf(&film->header);
} }
const AVOutputFormat ff_segafilm_muxer = { const FFOutputFormat ff_segafilm_muxer = {
.name = "film_cpk", .p.name = "film_cpk",
.long_name = NULL_IF_CONFIG_SMALL("Sega FILM / CPK"), .p.long_name = NULL_IF_CONFIG_SMALL("Sega FILM / CPK"),
.extensions = "cpk", .p.extensions = "cpk",
.priv_data_size = sizeof(FILMOutputContext), .priv_data_size = sizeof(FILMOutputContext),
.audio_codec = AV_CODEC_ID_PCM_S16BE_PLANAR, .p.audio_codec = AV_CODEC_ID_PCM_S16BE_PLANAR,
.video_codec = AV_CODEC_ID_CINEPAK, .p.video_codec = AV_CODEC_ID_CINEPAK,
.init = film_init, .init = film_init,
.write_trailer = film_write_header, .write_trailer = film_write_header,
.write_packet = film_write_packet, .write_packet = film_write_packet,

View File

@ -976,7 +976,8 @@ calc_times:
av_ts2str(pkt->dts), av_ts2timestr(pkt->dts, &st->time_base)); av_ts2str(pkt->dts), av_ts2timestr(pkt->dts, &st->time_base));
ret = ff_write_chained(seg->avf, pkt->stream_index, pkt, s, ret = ff_write_chained(seg->avf, pkt->stream_index, pkt, s,
seg->initial_offset || seg->reset_timestamps || seg->avf->oformat->interleave_packet); seg->initial_offset || seg->reset_timestamps ||
ffofmt(seg->avf->oformat)->interleave_packet);
fail: fail:
/* Use st->index here as the packet returned from ff_write_chained() /* Use st->index here as the packet returned from ff_write_chained()
@ -1016,9 +1017,9 @@ static int seg_check_bitstream(AVFormatContext *s, AVStream *st,
{ {
SegmentContext *seg = s->priv_data; SegmentContext *seg = s->priv_data;
AVFormatContext *oc = seg->avf; AVFormatContext *oc = seg->avf;
if (oc->oformat->check_bitstream) { if (ffofmt(oc->oformat)->check_bitstream) {
AVStream *const ost = oc->streams[st->index]; AVStream *const ost = oc->streams[st->index];
int ret = oc->oformat->check_bitstream(oc, ost, pkt); int ret = ffofmt(oc->oformat)->check_bitstream(oc, ost, pkt);
if (ret == 1) { if (ret == 1) {
FFStream *const sti = ffstream(st); FFStream *const sti = ffstream(st);
FFStream *const osti = ffstream(ost); FFStream *const osti = ffstream(ost);
@ -1085,33 +1086,33 @@ static const AVClass seg_class = {
}; };
#if CONFIG_SEGMENT_MUXER #if CONFIG_SEGMENT_MUXER
const AVOutputFormat ff_segment_muxer = { const FFOutputFormat ff_segment_muxer = {
.name = "segment", .p.name = "segment",
.long_name = NULL_IF_CONFIG_SMALL("segment"), .p.long_name = NULL_IF_CONFIG_SMALL("segment"),
.p.flags = AVFMT_NOFILE|AVFMT_GLOBALHEADER,
.p.priv_class = &seg_class,
.priv_data_size = sizeof(SegmentContext), .priv_data_size = sizeof(SegmentContext),
.flags = AVFMT_NOFILE|AVFMT_GLOBALHEADER,
.init = seg_init, .init = seg_init,
.write_header = seg_write_header, .write_header = seg_write_header,
.write_packet = seg_write_packet, .write_packet = seg_write_packet,
.write_trailer = seg_write_trailer, .write_trailer = seg_write_trailer,
.deinit = seg_free, .deinit = seg_free,
.check_bitstream = seg_check_bitstream, .check_bitstream = seg_check_bitstream,
.priv_class = &seg_class,
}; };
#endif #endif
#if CONFIG_STREAM_SEGMENT_MUXER #if CONFIG_STREAM_SEGMENT_MUXER
const AVOutputFormat ff_stream_segment_muxer = { const FFOutputFormat ff_stream_segment_muxer = {
.name = "stream_segment,ssegment", .p.name = "stream_segment,ssegment",
.long_name = NULL_IF_CONFIG_SMALL("streaming segment muxer"), .p.long_name = NULL_IF_CONFIG_SMALL("streaming segment muxer"),
.priv_data_size = sizeof(SegmentContext), .p.flags = AVFMT_NOFILE,
.flags = AVFMT_NOFILE, .p.priv_class = &seg_class,
.priv_data_size = sizeof(SegmentContext),
.init = seg_init, .init = seg_init,
.write_header = seg_write_header, .write_header = seg_write_header,
.write_packet = seg_write_packet, .write_packet = seg_write_packet,
.write_trailer = seg_write_trailer, .write_trailer = seg_write_trailer,
.deinit = seg_free, .deinit = seg_free,
.check_bitstream = seg_check_bitstream, .check_bitstream = seg_check_bitstream,
.priv_class = &seg_class,
}; };
#endif #endif

View File

@ -133,15 +133,15 @@ static int smjpeg_write_trailer(AVFormatContext *s)
return 0; return 0;
} }
const AVOutputFormat ff_smjpeg_muxer = { const FFOutputFormat ff_smjpeg_muxer = {
.name = "smjpeg", .p.name = "smjpeg",
.long_name = NULL_IF_CONFIG_SMALL("Loki SDL MJPEG"), .p.long_name = NULL_IF_CONFIG_SMALL("Loki SDL MJPEG"),
.priv_data_size = sizeof(SMJPEGMuxContext), .priv_data_size = sizeof(SMJPEGMuxContext),
.audio_codec = AV_CODEC_ID_PCM_S16LE, .p.audio_codec = AV_CODEC_ID_PCM_S16LE,
.video_codec = AV_CODEC_ID_MJPEG, .p.video_codec = AV_CODEC_ID_MJPEG,
.write_header = smjpeg_write_header, .write_header = smjpeg_write_header,
.write_packet = smjpeg_write_packet, .write_packet = smjpeg_write_packet,
.write_trailer = smjpeg_write_trailer, .write_trailer = smjpeg_write_trailer,
.flags = AVFMT_GLOBALHEADER | AVFMT_TS_NONSTRICT, .p.flags = AVFMT_GLOBALHEADER | AVFMT_TS_NONSTRICT,
.codec_tag = (const AVCodecTag *const []){ ff_codec_smjpeg_video_tags, ff_codec_smjpeg_audio_tags, 0 }, .p.codec_tag = (const AVCodecTag *const []){ ff_codec_smjpeg_video_tags, ff_codec_smjpeg_audio_tags, 0 },
}; };

View File

@ -637,16 +637,16 @@ static const AVClass ism_class = {
}; };
const AVOutputFormat ff_smoothstreaming_muxer = { const FFOutputFormat ff_smoothstreaming_muxer = {
.name = "smoothstreaming", .p.name = "smoothstreaming",
.long_name = NULL_IF_CONFIG_SMALL("Smooth Streaming Muxer"), .p.long_name = NULL_IF_CONFIG_SMALL("Smooth Streaming Muxer"),
.p.audio_codec = AV_CODEC_ID_AAC,
.p.video_codec = AV_CODEC_ID_H264,
.p.flags = AVFMT_GLOBALHEADER | AVFMT_NOFILE,
.p.priv_class = &ism_class,
.priv_data_size = sizeof(SmoothStreamingContext), .priv_data_size = sizeof(SmoothStreamingContext),
.audio_codec = AV_CODEC_ID_AAC,
.video_codec = AV_CODEC_ID_H264,
.flags = AVFMT_GLOBALHEADER | AVFMT_NOFILE,
.write_header = ism_write_header, .write_header = ism_write_header,
.write_packet = ism_write_packet, .write_packet = ism_write_packet,
.write_trailer = ism_write_trailer, .write_trailer = ism_write_trailer,
.deinit = ism_free, .deinit = ism_free,
.priv_class = &ism_class,
}; };

View File

@ -34,6 +34,7 @@
#include "libavutil/dict.h" #include "libavutil/dict.h"
#include "avformat.h" #include "avformat.h"
#include "avio_internal.h" #include "avio_internal.h"
#include "mux.h"
#include "rawenc.h" #include "rawenc.h"
#include "sox.h" #include "sox.h"
@ -104,15 +105,15 @@ static int sox_write_trailer(AVFormatContext *s)
return 0; return 0;
} }
const AVOutputFormat ff_sox_muxer = { const FFOutputFormat ff_sox_muxer = {
.name = "sox", .p.name = "sox",
.long_name = NULL_IF_CONFIG_SMALL("SoX native"), .p.long_name = NULL_IF_CONFIG_SMALL("SoX native"),
.extensions = "sox", .p.extensions = "sox",
.priv_data_size = sizeof(SoXContext), .priv_data_size = sizeof(SoXContext),
.audio_codec = AV_CODEC_ID_PCM_S32LE, .p.audio_codec = AV_CODEC_ID_PCM_S32LE,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.write_header = sox_write_header, .write_header = sox_write_header,
.write_packet = ff_raw_write_packet, .write_packet = ff_raw_write_packet,
.write_trailer = sox_write_trailer, .write_trailer = sox_write_trailer,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
}; };

View File

@ -48,6 +48,7 @@
#include "avformat.h" #include "avformat.h"
#include "avio_internal.h" #include "avio_internal.h"
#include "mux.h"
#include "spdif.h" #include "spdif.h"
#include "libavcodec/ac3defs.h" #include "libavcodec/ac3defs.h"
#include "libavcodec/adts_parser.h" #include "libavcodec/adts_parser.h"
@ -673,16 +674,16 @@ static int spdif_write_packet(struct AVFormatContext *s, AVPacket *pkt)
return 0; return 0;
} }
const AVOutputFormat ff_spdif_muxer = { const FFOutputFormat ff_spdif_muxer = {
.name = "spdif", .p.name = "spdif",
.long_name = NULL_IF_CONFIG_SMALL("IEC 61937 (used on S/PDIF - IEC958)"), .p.long_name = NULL_IF_CONFIG_SMALL("IEC 61937 (used on S/PDIF - IEC958)"),
.extensions = "spdif", .p.extensions = "spdif",
.priv_data_size = sizeof(IEC61937Context), .priv_data_size = sizeof(IEC61937Context),
.audio_codec = AV_CODEC_ID_AC3, .p.audio_codec = AV_CODEC_ID_AC3,
.video_codec = AV_CODEC_ID_NONE, .p.video_codec = AV_CODEC_ID_NONE,
.write_header = spdif_write_header, .write_header = spdif_write_header,
.write_packet = spdif_write_packet, .write_packet = spdif_write_packet,
.deinit = spdif_deinit, .deinit = spdif_deinit,
.flags = AVFMT_NOTIMESTAMPS, .p.flags = AVFMT_NOTIMESTAMPS,
.priv_class = &spdif_class, .p.priv_class = &spdif_class,
}; };

View File

@ -21,6 +21,7 @@
#include "avformat.h" #include "avformat.h"
#include "internal.h" #include "internal.h"
#include "mux.h"
#include "libavutil/log.h" #include "libavutil/log.h"
#include "libavutil/intreadwrite.h" #include "libavutil/intreadwrite.h"
@ -96,14 +97,14 @@ static int srt_write_packet(AVFormatContext *avf, AVPacket *pkt)
return 0; return 0;
} }
const AVOutputFormat ff_srt_muxer = { const FFOutputFormat ff_srt_muxer = {
.name = "srt", .p.name = "srt",
.long_name = NULL_IF_CONFIG_SMALL("SubRip subtitle"), .p.long_name = NULL_IF_CONFIG_SMALL("SubRip subtitle"),
.mime_type = "application/x-subrip", .p.mime_type = "application/x-subrip",
.extensions = "srt", .p.extensions = "srt",
.p.flags = AVFMT_VARIABLE_FPS | AVFMT_TS_NONSTRICT,
.p.subtitle_codec = AV_CODEC_ID_SUBRIP,
.priv_data_size = sizeof(SRTContext), .priv_data_size = sizeof(SRTContext),
.write_header = srt_write_header, .write_header = srt_write_header,
.write_packet = srt_write_packet, .write_packet = srt_write_packet,
.flags = AVFMT_VARIABLE_FPS | AVFMT_TS_NONSTRICT,
.subtitle_codec = AV_CODEC_ID_SUBRIP,
}; };

View File

@ -21,6 +21,7 @@
#include "avformat.h" #include "avformat.h"
#include "internal.h" #include "internal.h"
#include "mux.h"
#include "libavutil/intreadwrite.h" #include "libavutil/intreadwrite.h"
#define SUP_PGS_MAGIC 0x5047 /* "PG", big endian */ #define SUP_PGS_MAGIC 0x5047 /* "PG", big endian */
@ -84,13 +85,13 @@ static int sup_write_header(AVFormatContext *s)
return 0; return 0;
} }
const AVOutputFormat ff_sup_muxer = { const FFOutputFormat ff_sup_muxer = {
.name = "sup", .p.name = "sup",
.long_name = NULL_IF_CONFIG_SMALL("raw HDMV Presentation Graphic Stream subtitles"), .p.long_name = NULL_IF_CONFIG_SMALL("raw HDMV Presentation Graphic Stream subtitles"),
.extensions = "sup", .p.extensions = "sup",
.mime_type = "application/x-pgs", .p.mime_type = "application/x-pgs",
.subtitle_codec = AV_CODEC_ID_HDMV_PGS_SUBTITLE, .p.subtitle_codec = AV_CODEC_ID_HDMV_PGS_SUBTITLE,
.p.flags = AVFMT_VARIABLE_FPS | AVFMT_TS_NONSTRICT,
.write_header = sup_write_header, .write_header = sup_write_header,
.write_packet = sup_write_packet, .write_packet = sup_write_packet,
.flags = AVFMT_VARIABLE_FPS | AVFMT_TS_NONSTRICT,
}; };

View File

@ -27,6 +27,7 @@
#include "libavutil/fifo.h" #include "libavutil/fifo.h"
#include "avformat.h" #include "avformat.h"
#include "flv.h" #include "flv.h"
#include "mux.h"
#include "swf.h" #include "swf.h"
#define AUDIO_FIFO_SIZE 65536 #define AUDIO_FIFO_SIZE 65536
@ -547,33 +548,33 @@ static void swf_deinit(AVFormatContext *s)
} }
#if CONFIG_SWF_MUXER #if CONFIG_SWF_MUXER
const AVOutputFormat ff_swf_muxer = { const FFOutputFormat ff_swf_muxer = {
.name = "swf", .p.name = "swf",
.long_name = NULL_IF_CONFIG_SMALL("SWF (ShockWave Flash)"), .p.long_name = NULL_IF_CONFIG_SMALL("SWF (ShockWave Flash)"),
.mime_type = "application/x-shockwave-flash", .p.mime_type = "application/x-shockwave-flash",
.extensions = "swf", .p.extensions = "swf",
.priv_data_size = sizeof(SWFEncContext), .priv_data_size = sizeof(SWFEncContext),
.audio_codec = AV_CODEC_ID_MP3, .p.audio_codec = AV_CODEC_ID_MP3,
.video_codec = AV_CODEC_ID_FLV1, .p.video_codec = AV_CODEC_ID_FLV1,
.write_header = swf_write_header, .write_header = swf_write_header,
.write_packet = swf_write_packet, .write_packet = swf_write_packet,
.write_trailer = swf_write_trailer, .write_trailer = swf_write_trailer,
.deinit = swf_deinit, .deinit = swf_deinit,
.flags = AVFMT_TS_NONSTRICT, .p.flags = AVFMT_TS_NONSTRICT,
}; };
#endif #endif
#if CONFIG_AVM2_MUXER #if CONFIG_AVM2_MUXER
const AVOutputFormat ff_avm2_muxer = { const FFOutputFormat ff_avm2_muxer = {
.name = "avm2", .p.name = "avm2",
.long_name = NULL_IF_CONFIG_SMALL("SWF (ShockWave Flash) (AVM2)"), .p.long_name = NULL_IF_CONFIG_SMALL("SWF (ShockWave Flash) (AVM2)"),
.mime_type = "application/x-shockwave-flash", .p.mime_type = "application/x-shockwave-flash",
.priv_data_size = sizeof(SWFEncContext), .priv_data_size = sizeof(SWFEncContext),
.audio_codec = AV_CODEC_ID_MP3, .p.audio_codec = AV_CODEC_ID_MP3,
.video_codec = AV_CODEC_ID_FLV1, .p.video_codec = AV_CODEC_ID_FLV1,
.write_header = swf_write_header, .write_header = swf_write_header,
.write_packet = swf_write_packet, .write_packet = swf_write_packet,
.write_trailer = swf_write_trailer, .write_trailer = swf_write_trailer,
.deinit = swf_deinit, .deinit = swf_deinit,
.flags = AVFMT_TS_NONSTRICT, .p.flags = AVFMT_TS_NONSTRICT,
}; };
#endif #endif

Some files were not shown because too many files have changed in this diff Show More