]> git.sesse.net Git - ffmpeg/blobdiff - libavformat/rawenc.c
hwcontext_vulkan: dynamically load functions
[ffmpeg] / libavformat / rawenc.c
index 993d232b70c939d8bf16812e285e93b826c5f802..088b62f3692c12bd3e21d6e6a5fef9bef0b7f89a 100644 (file)
@@ -39,20 +39,32 @@ static int force_one_stream(AVFormatContext *s)
                s->oformat->name);
         return AVERROR(EINVAL);
     }
+    if (   s->oformat->audio_codec != AV_CODEC_ID_NONE
+        && s->streams[0]->codecpar->codec_type != AVMEDIA_TYPE_AUDIO) {
+        av_log(s, AV_LOG_ERROR, "%s files have exactly one audio stream\n",
+               s->oformat->name);
+        return AVERROR(EINVAL);
+    }
+    if (   s->oformat->video_codec != AV_CODEC_ID_NONE
+        && s->streams[0]->codecpar->codec_type != AVMEDIA_TYPE_VIDEO) {
+        av_log(s, AV_LOG_ERROR, "%s files have exactly one video stream\n",
+               s->oformat->name);
+        return AVERROR(EINVAL);
+    }
     return 0;
 }
 
 /* Note: Do not forget to add new entries to the Makefile as well. */
 
 #if CONFIG_AC3_MUXER
-AVOutputFormat ff_ac3_muxer = {
+const AVOutputFormat ff_ac3_muxer = {
     .name              = "ac3",
     .long_name         = NULL_IF_CONFIG_SMALL("raw AC-3"),
     .mime_type         = "audio/x-ac3",
     .extensions        = "ac3",
     .audio_codec       = AV_CODEC_ID_AC3,
     .video_codec       = AV_CODEC_ID_NONE,
-    .write_header      = force_one_stream,
+    .init              = force_one_stream,
     .write_packet      = ff_raw_write_packet,
     .flags             = AVFMT_NOTIMESTAMPS,
 };
@@ -78,13 +90,13 @@ static int adx_write_trailer(AVFormatContext *s)
     return 0;
 }
 
-AVOutputFormat ff_adx_muxer = {
+const AVOutputFormat ff_adx_muxer = {
     .name              = "adx",
     .long_name         = NULL_IF_CONFIG_SMALL("CRI ADX"),
     .extensions        = "adx",
     .audio_codec       = AV_CODEC_ID_ADPCM_ADX,
     .video_codec       = AV_CODEC_ID_NONE,
-    .write_header      = force_one_stream,
+    .init              = force_one_stream,
     .write_packet      = ff_raw_write_packet,
     .write_trailer     = adx_write_trailer,
     .flags             = AVFMT_NOTIMESTAMPS,
@@ -92,64 +104,64 @@ AVOutputFormat ff_adx_muxer = {
 #endif
 
 #if CONFIG_APTX_MUXER
-AVOutputFormat ff_aptx_muxer = {
+const AVOutputFormat ff_aptx_muxer = {
     .name              = "aptx",
     .long_name         = NULL_IF_CONFIG_SMALL("raw aptX (Audio Processing Technology for Bluetooth)"),
     .extensions        = "aptx",
     .audio_codec       = AV_CODEC_ID_APTX,
     .video_codec       = AV_CODEC_ID_NONE,
-    .write_header      = force_one_stream,
+    .init              = force_one_stream,
     .write_packet      = ff_raw_write_packet,
     .flags             = AVFMT_NOTIMESTAMPS,
 };
 #endif
 
 #if CONFIG_APTX_HD_MUXER
-AVOutputFormat ff_aptx_hd_muxer = {
+const AVOutputFormat ff_aptx_hd_muxer = {
     .name              = "aptx_hd",
     .long_name         = NULL_IF_CONFIG_SMALL("raw aptX HD (Audio Processing Technology for Bluetooth)"),
     .extensions        = "aptxhd",
     .audio_codec       = AV_CODEC_ID_APTX_HD,
     .video_codec       = AV_CODEC_ID_NONE,
-    .write_header      = force_one_stream,
+    .init              = force_one_stream,
     .write_packet      = ff_raw_write_packet,
     .flags             = AVFMT_NOTIMESTAMPS,
 };
 #endif
 
 #if CONFIG_AVS2_MUXER
-AVOutputFormat ff_avs2_muxer = {
+const AVOutputFormat ff_avs2_muxer = {
     .name              = "avs2",
     .long_name         = NULL_IF_CONFIG_SMALL("raw AVS2-P2/IEEE1857.4 video"),
     .extensions        = "avs,avs2",
     .audio_codec       = AV_CODEC_ID_NONE,
     .video_codec       = AV_CODEC_ID_AVS2,
-    .write_header      = force_one_stream,
+    .init              = force_one_stream,
     .write_packet      = ff_raw_write_packet,
     .flags             = AVFMT_NOTIMESTAMPS,
 };
 #endif
 
 #if CONFIG_CAVSVIDEO_MUXER
-AVOutputFormat ff_cavsvideo_muxer = {
+const AVOutputFormat ff_cavsvideo_muxer = {
     .name              = "cavsvideo",
     .long_name         = NULL_IF_CONFIG_SMALL("raw Chinese AVS (Audio Video Standard) video"),
     .extensions        = "cavs",
     .audio_codec       = AV_CODEC_ID_NONE,
     .video_codec       = AV_CODEC_ID_CAVS,
-    .write_header      = force_one_stream,
+    .init              = force_one_stream,
     .write_packet      = ff_raw_write_packet,
     .flags             = AVFMT_NOTIMESTAMPS,
 };
 #endif
 
 #if CONFIG_CODEC2RAW_MUXER
-AVOutputFormat ff_codec2raw_muxer = {
+const AVOutputFormat ff_codec2raw_muxer = {
     .name              = "codec2raw",
     .long_name         = NULL_IF_CONFIG_SMALL("raw codec2 muxer"),
     .audio_codec       = AV_CODEC_ID_CODEC2,
     .video_codec       = AV_CODEC_ID_NONE,
-    .write_header      = force_one_stream,
+    .init              = force_one_stream,
     .write_packet      = ff_raw_write_packet,
     .flags             = AVFMT_NOTIMESTAMPS,
 };
@@ -157,158 +169,158 @@ AVOutputFormat ff_codec2raw_muxer = {
 
 
 #if CONFIG_DATA_MUXER
-AVOutputFormat ff_data_muxer = {
+const AVOutputFormat ff_data_muxer = {
     .name              = "data",
     .long_name         = NULL_IF_CONFIG_SMALL("raw data"),
-    .write_header      = force_one_stream,
+    .init              = force_one_stream,
     .write_packet      = ff_raw_write_packet,
     .flags             = AVFMT_NOTIMESTAMPS,
 };
 #endif
 
 #if CONFIG_DIRAC_MUXER
-AVOutputFormat ff_dirac_muxer = {
+const AVOutputFormat ff_dirac_muxer = {
     .name              = "dirac",
     .long_name         = NULL_IF_CONFIG_SMALL("raw Dirac"),
     .extensions        = "drc,vc2",
     .audio_codec       = AV_CODEC_ID_NONE,
     .video_codec       = AV_CODEC_ID_DIRAC,
-    .write_header      = force_one_stream,
+    .init              = force_one_stream,
     .write_packet      = ff_raw_write_packet,
     .flags             = AVFMT_NOTIMESTAMPS,
 };
 #endif
 
 #if CONFIG_DNXHD_MUXER
-AVOutputFormat ff_dnxhd_muxer = {
+const AVOutputFormat ff_dnxhd_muxer = {
     .name              = "dnxhd",
     .long_name         = NULL_IF_CONFIG_SMALL("raw DNxHD (SMPTE VC-3)"),
     .extensions        = "dnxhd,dnxhr",
     .audio_codec       = AV_CODEC_ID_NONE,
     .video_codec       = AV_CODEC_ID_DNXHD,
-    .write_header      = force_one_stream,
+    .init              = force_one_stream,
     .write_packet      = ff_raw_write_packet,
     .flags             = AVFMT_NOTIMESTAMPS,
 };
 #endif
 
 #if CONFIG_DTS_MUXER
-AVOutputFormat ff_dts_muxer = {
+const AVOutputFormat ff_dts_muxer = {
     .name              = "dts",
     .long_name         = NULL_IF_CONFIG_SMALL("raw DTS"),
     .mime_type         = "audio/x-dca",
     .extensions        = "dts",
     .audio_codec       = AV_CODEC_ID_DTS,
     .video_codec       = AV_CODEC_ID_NONE,
-    .write_header      = force_one_stream,
+    .init              = force_one_stream,
     .write_packet      = ff_raw_write_packet,
     .flags             = AVFMT_NOTIMESTAMPS,
 };
 #endif
 
 #if CONFIG_EAC3_MUXER
-AVOutputFormat ff_eac3_muxer = {
+const AVOutputFormat ff_eac3_muxer = {
     .name              = "eac3",
     .long_name         = NULL_IF_CONFIG_SMALL("raw E-AC-3"),
     .mime_type         = "audio/x-eac3",
     .extensions        = "eac3",
     .audio_codec       = AV_CODEC_ID_EAC3,
     .video_codec       = AV_CODEC_ID_NONE,
-    .write_header      = force_one_stream,
+    .init              = force_one_stream,
     .write_packet      = ff_raw_write_packet,
     .flags             = AVFMT_NOTIMESTAMPS,
 };
 #endif
 
 #if CONFIG_G722_MUXER
-AVOutputFormat ff_g722_muxer = {
+const AVOutputFormat ff_g722_muxer = {
     .name              = "g722",
     .long_name         = NULL_IF_CONFIG_SMALL("raw G.722"),
     .mime_type         = "audio/G722",
     .extensions        = "g722",
     .audio_codec       = AV_CODEC_ID_ADPCM_G722,
     .video_codec       = AV_CODEC_ID_NONE,
-    .write_header      = force_one_stream,
+    .init              = force_one_stream,
     .write_packet      = ff_raw_write_packet,
     .flags             = AVFMT_NOTIMESTAMPS,
 };
 #endif
 
 #if CONFIG_G723_1_MUXER
-AVOutputFormat ff_g723_1_muxer = {
+const AVOutputFormat ff_g723_1_muxer = {
     .name              = "g723_1",
     .long_name         = NULL_IF_CONFIG_SMALL("raw G.723.1"),
     .mime_type         = "audio/g723",
     .extensions        = "tco,rco",
     .audio_codec       = AV_CODEC_ID_G723_1,
     .video_codec       = AV_CODEC_ID_NONE,
-    .write_header      = force_one_stream,
+    .init              = force_one_stream,
     .write_packet      = ff_raw_write_packet,
     .flags             = AVFMT_NOTIMESTAMPS,
 };
 #endif
 
 #if CONFIG_G726_MUXER
-AVOutputFormat ff_g726_muxer = {
+const AVOutputFormat ff_g726_muxer = {
     .name              = "g726",
     .long_name         = NULL_IF_CONFIG_SMALL("raw big-endian G.726 (\"left-justified\")"),
     .audio_codec       = AV_CODEC_ID_ADPCM_G726,
     .video_codec       = AV_CODEC_ID_NONE,
-    .write_header      = force_one_stream,
+    .init              = force_one_stream,
     .write_packet      = ff_raw_write_packet,
     .flags             = AVFMT_NOTIMESTAMPS,
 };
 #endif
 
 #if CONFIG_G726LE_MUXER
-AVOutputFormat ff_g726le_muxer = {
+const AVOutputFormat ff_g726le_muxer = {
     .name              = "g726le",
     .long_name         = NULL_IF_CONFIG_SMALL("raw little-endian G.726 (\"right-justified\")"),
     .audio_codec       = AV_CODEC_ID_ADPCM_G726LE,
     .video_codec       = AV_CODEC_ID_NONE,
-    .write_header      = force_one_stream,
+    .init              = force_one_stream,
     .write_packet      = ff_raw_write_packet,
     .flags             = AVFMT_NOTIMESTAMPS,
 };
 #endif
 
 #if CONFIG_GSM_MUXER
-AVOutputFormat ff_gsm_muxer = {
+const AVOutputFormat ff_gsm_muxer = {
     .name              = "gsm",
     .long_name         = NULL_IF_CONFIG_SMALL("raw GSM"),
     .mime_type         = "audio/x-gsm",
     .extensions        = "gsm",
     .audio_codec       = AV_CODEC_ID_GSM,
     .video_codec       = AV_CODEC_ID_NONE,
-    .write_header      = force_one_stream,
+    .init              = force_one_stream,
     .write_packet      = ff_raw_write_packet,
     .flags             = AVFMT_NOTIMESTAMPS,
 };
 #endif
 
 #if CONFIG_H261_MUXER
-AVOutputFormat ff_h261_muxer = {
+const AVOutputFormat ff_h261_muxer = {
     .name              = "h261",
     .long_name         = NULL_IF_CONFIG_SMALL("raw H.261"),
     .mime_type         = "video/x-h261",
     .extensions        = "h261",
     .audio_codec       = AV_CODEC_ID_NONE,
     .video_codec       = AV_CODEC_ID_H261,
-    .write_header      = force_one_stream,
+    .init              = force_one_stream,
     .write_packet      = ff_raw_write_packet,
     .flags             = AVFMT_NOTIMESTAMPS,
 };
 #endif
 
 #if CONFIG_H263_MUXER
-AVOutputFormat ff_h263_muxer = {
+const AVOutputFormat ff_h263_muxer = {
     .name              = "h263",
     .long_name         = NULL_IF_CONFIG_SMALL("raw H.263"),
     .mime_type         = "video/x-h263",
     .extensions        = "h263",
     .audio_codec       = AV_CODEC_ID_NONE,
     .video_codec       = AV_CODEC_ID_H263,
-    .write_header      = force_one_stream,
+    .init              = force_one_stream,
     .write_packet      = ff_raw_write_packet,
     .flags             = AVFMT_NOTIMESTAMPS,
 };
@@ -324,13 +336,13 @@ static int h264_check_bitstream(struct AVFormatContext *s, const AVPacket *pkt)
     return 1;
 }
 
-AVOutputFormat ff_h264_muxer = {
+const AVOutputFormat ff_h264_muxer = {
     .name              = "h264",
     .long_name         = NULL_IF_CONFIG_SMALL("raw H.264 video"),
     .extensions        = "h264,264",
     .audio_codec       = AV_CODEC_ID_NONE,
     .video_codec       = AV_CODEC_ID_H264,
-    .write_header      = force_one_stream,
+    .init              = force_one_stream,
     .write_packet      = ff_raw_write_packet,
     .check_bitstream   = h264_check_bitstream,
     .flags             = AVFMT_NOTIMESTAMPS,
@@ -347,13 +359,13 @@ static int hevc_check_bitstream(struct AVFormatContext *s, const AVPacket *pkt)
     return 1;
 }
 
-AVOutputFormat ff_hevc_muxer = {
+const AVOutputFormat ff_hevc_muxer = {
     .name              = "hevc",
     .long_name         = NULL_IF_CONFIG_SMALL("raw HEVC video"),
     .extensions        = "hevc,h265,265",
     .audio_codec       = AV_CODEC_ID_NONE,
     .video_codec       = AV_CODEC_ID_HEVC,
-    .write_header      = force_one_stream,
+    .init              = force_one_stream,
     .write_packet      = ff_raw_write_packet,
     .check_bitstream   = hevc_check_bitstream,
     .flags             = AVFMT_NOTIMESTAMPS,
@@ -361,100 +373,88 @@ AVOutputFormat ff_hevc_muxer = {
 #endif
 
 #if CONFIG_M4V_MUXER
-AVOutputFormat ff_m4v_muxer = {
+const AVOutputFormat ff_m4v_muxer = {
     .name              = "m4v",
     .long_name         = NULL_IF_CONFIG_SMALL("raw MPEG-4 video"),
     .extensions        = "m4v",
     .audio_codec       = AV_CODEC_ID_NONE,
     .video_codec       = AV_CODEC_ID_MPEG4,
-    .write_header      = force_one_stream,
+    .init              = force_one_stream,
     .write_packet      = ff_raw_write_packet,
     .flags             = AVFMT_NOTIMESTAMPS,
 };
 #endif
 
 #if CONFIG_MJPEG_MUXER
-AVOutputFormat ff_mjpeg_muxer = {
+const AVOutputFormat ff_mjpeg_muxer = {
     .name              = "mjpeg",
     .long_name         = NULL_IF_CONFIG_SMALL("raw MJPEG video"),
     .mime_type         = "video/x-mjpeg",
     .extensions        = "mjpg,mjpeg",
     .audio_codec       = AV_CODEC_ID_NONE,
     .video_codec       = AV_CODEC_ID_MJPEG,
-    .write_header      = force_one_stream,
-    .write_packet      = ff_raw_write_packet,
-    .flags             = AVFMT_NOTIMESTAMPS,
-};
-#endif
-
-#if CONFIG_SINGLEJPEG_MUXER
-AVOutputFormat ff_singlejpeg_muxer = {
-    .name              = "singlejpeg",
-    .long_name         = NULL_IF_CONFIG_SMALL("JPEG single image"),
-    .mime_type         = "image/jpeg",
-    .audio_codec       = AV_CODEC_ID_NONE,
-    .video_codec       = AV_CODEC_ID_MJPEG,
+    .init              = force_one_stream,
     .write_packet      = ff_raw_write_packet,
     .flags             = AVFMT_NOTIMESTAMPS,
-    .write_header      = force_one_stream,
 };
 #endif
 
 #if CONFIG_MLP_MUXER
-AVOutputFormat ff_mlp_muxer = {
+const AVOutputFormat ff_mlp_muxer = {
     .name              = "mlp",
     .long_name         = NULL_IF_CONFIG_SMALL("raw MLP"),
     .extensions        = "mlp",
     .audio_codec       = AV_CODEC_ID_MLP,
     .video_codec       = AV_CODEC_ID_NONE,
-    .write_header      = force_one_stream,
+    .init              = force_one_stream,
     .write_packet      = ff_raw_write_packet,
     .flags             = AVFMT_NOTIMESTAMPS,
 };
 #endif
 
 #if CONFIG_MP2_MUXER
-AVOutputFormat ff_mp2_muxer = {
+const AVOutputFormat ff_mp2_muxer = {
     .name              = "mp2",
     .long_name         = NULL_IF_CONFIG_SMALL("MP2 (MPEG audio layer 2)"),
     .mime_type         = "audio/mpeg",
     .extensions        = "mp2,m2a,mpa",
     .audio_codec       = AV_CODEC_ID_MP2,
     .video_codec       = AV_CODEC_ID_NONE,
+    .init              = force_one_stream,
     .write_packet      = ff_raw_write_packet,
     .flags             = AVFMT_NOTIMESTAMPS,
 };
 #endif
 
 #if CONFIG_MPEG1VIDEO_MUXER
-AVOutputFormat ff_mpeg1video_muxer = {
+const AVOutputFormat ff_mpeg1video_muxer = {
     .name              = "mpeg1video",
     .long_name         = NULL_IF_CONFIG_SMALL("raw MPEG-1 video"),
     .mime_type         = "video/mpeg",
     .extensions        = "mpg,mpeg,m1v",
     .audio_codec       = AV_CODEC_ID_NONE,
     .video_codec       = AV_CODEC_ID_MPEG1VIDEO,
-    .write_header      = force_one_stream,
+    .init              = force_one_stream,
     .write_packet      = ff_raw_write_packet,
     .flags             = AVFMT_NOTIMESTAMPS,
 };
 #endif
 
 #if CONFIG_MPEG2VIDEO_MUXER
-AVOutputFormat ff_mpeg2video_muxer = {
+const AVOutputFormat ff_mpeg2video_muxer = {
     .name              = "mpeg2video",
     .long_name         = NULL_IF_CONFIG_SMALL("raw MPEG-2 video"),
     .extensions        = "m2v",
     .audio_codec       = AV_CODEC_ID_NONE,
     .video_codec       = AV_CODEC_ID_MPEG2VIDEO,
-    .write_header      = force_one_stream,
+    .init              = force_one_stream,
     .write_packet      = ff_raw_write_packet,
     .flags             = AVFMT_NOTIMESTAMPS,
 };
 #endif
 
 #if CONFIG_RAWVIDEO_MUXER
-AVOutputFormat ff_rawvideo_muxer = {
+const AVOutputFormat ff_rawvideo_muxer = {
     .name              = "rawvideo",
     .long_name         = NULL_IF_CONFIG_SMALL("raw video"),
     .extensions        = "yuv,rgb",
@@ -466,39 +466,39 @@ AVOutputFormat ff_rawvideo_muxer = {
 #endif
 
 #if CONFIG_SBC_MUXER
-AVOutputFormat ff_sbc_muxer = {
+const AVOutputFormat ff_sbc_muxer = {
     .name              = "sbc",
     .long_name         = NULL_IF_CONFIG_SMALL("raw SBC"),
     .mime_type         = "audio/x-sbc",
     .extensions        = "sbc,msbc",
     .audio_codec       = AV_CODEC_ID_SBC,
-    .write_header      = force_one_stream,
+    .init              = force_one_stream,
     .write_packet      = ff_raw_write_packet,
     .flags             = AVFMT_NOTIMESTAMPS,
 };
 #endif
 
 #if CONFIG_TRUEHD_MUXER
-AVOutputFormat ff_truehd_muxer = {
+const AVOutputFormat ff_truehd_muxer = {
     .name              = "truehd",
     .long_name         = NULL_IF_CONFIG_SMALL("raw TrueHD"),
     .extensions        = "thd",
     .audio_codec       = AV_CODEC_ID_TRUEHD,
     .video_codec       = AV_CODEC_ID_NONE,
-    .write_header      = force_one_stream,
+    .init              = force_one_stream,
     .write_packet      = ff_raw_write_packet,
     .flags             = AVFMT_NOTIMESTAMPS,
 };
 #endif
 
 #if CONFIG_VC1_MUXER
-AVOutputFormat ff_vc1_muxer = {
+const AVOutputFormat ff_vc1_muxer = {
     .name              = "vc1",
     .long_name         = NULL_IF_CONFIG_SMALL("raw VC-1 video"),
     .extensions        = "vc1",
     .audio_codec       = AV_CODEC_ID_NONE,
     .video_codec       = AV_CODEC_ID_VC1,
-    .write_header      = force_one_stream,
+    .init              = force_one_stream,
     .write_packet      = ff_raw_write_packet,
     .flags             = AVFMT_NOTIMESTAMPS,
 };