[FFmpeg-devel] [PATCH] avformat/rawenc: check stream type
Gyan Doshi
gyandoshi at gmail.com
Fri Apr 6 18:04:12 EEST 2018
On 4/5/2018 12:09 AM, Michael Niedermayer wrote:
>
> This does not work
> breaks fate-unknown_layout-ac3
>
> also the tests mayb too strict, there are similar codec_ids like mpeg1/2
> or jpeg variants which are all basically the same from a muxers point of view
Revised patch passes FATE. Set looser conditions for mpeg-1/2/4 and jpeg
muxer.
Regards,
Gyan
-------------- next part --------------
From a4ae3eb20af9a4c6e5feb201347b5b044541c59b Mon Sep 17 00:00:00 2001
From: Gyan Doshi <gyandoshi at gmail.com>
Date: Fri, 6 Apr 2018 20:21:57 +0530
Subject: [PATCH v2] avformat/rawenc: check stream type
Validate codec of stream to be muxed except for data muxer.
---
libavformat/rawenc.c | 36 ++++++++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+)
diff --git a/libavformat/rawenc.c b/libavformat/rawenc.c
index 809ca23b1a..19028329f7 100644
--- a/libavformat/rawenc.c
+++ b/libavformat/rawenc.c
@@ -34,12 +34,48 @@ int ff_raw_write_packet(AVFormatContext *s, AVPacket *pkt)
static int force_one_stream(AVFormatContext *s)
{
+enum AVCodecID id;
+const char *idname;
+
if (s->nb_streams != 1) {
av_log(s, AV_LOG_ERROR, "%s files have exactly one stream\n",
s->oformat->name);
return AVERROR(EINVAL);
}
+
+ if (!strcmp("data", s->oformat->name))
+ return 0;
+
+id = s->streams[0]->codecpar->codec_id;
+idname = avcodec_get_name(id);
+
+ switch(s->streams[0]->codecpar->codec_type) {
+ case AVMEDIA_TYPE_AUDIO:
+ if (s->oformat->audio_codec != id)
+ goto fail;
+ break;
+ case AVMEDIA_TYPE_VIDEO:
+ if (strstr(s->oformat->name, "mpeg") != NULL) {
+ if (strstr(idname, "mpeg") == NULL)
+ goto fail;
+ } else if (strstr(s->oformat->name, "m4v") != NULL) {
+ if (strstr(idname, "mpeg4") == NULL)
+ goto fail;
+ } else if (strstr(s->oformat->name, "jpeg") != NULL) {
+ if (strstr(idname, "jpeg") == NULL)
+ goto fail;
+ } else if (s->oformat->video_codec != id)
+ goto fail;
+ break;
+ default:
+ goto fail;
+ }
+
return 0;
+
+fail:
+ av_log(s, AV_LOG_ERROR, "Stream not of type %s\n", s->oformat->name);
+ return AVERROR(EINVAL);
}
/* Note: Do not forget to add new entries to the Makefile as well. */
--
2.12.2.windows.2
More information about the ffmpeg-devel
mailing list