X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Frawenc.c;h=088b62f3692c12bd3e21d6e6a5fef9bef0b7f89a;hb=9e13df3776da3a101e895e2840f6f23f5a6f74a0;hp=993d232b70c939d8bf16812e285e93b826c5f802;hpb=1c9ac700dd141e545538a824f5a8cb81bb0a375d;p=ffmpeg diff --git a/libavformat/rawenc.c b/libavformat/rawenc.c index 993d232b70c..088b62f3692 100644 --- a/libavformat/rawenc.c +++ b/libavformat/rawenc.c @@ -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, };