[FFmpeg-cvslog] avformat/matroskaenc: Improve mimetype search
Andreas Rheinhardt
git at videolan.org
Mon Apr 20 22:24:09 EEST 2020
ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinhardt at gmail.com> | Sun Nov 3 13:06:49 2019 +0100| [3589b3f2e217e78d16a92b372d95ce4a3f7df896] | committer: Andreas Rheinhardt
avformat/matroskaenc: Improve mimetype search
Use the mime_types of the corresponding AVCodecDescriptor instead of
tables specific to Matroska. The former are generally more encompassing:
They contain every item of the current lists except "text/plain" for
AV_CODEC_ID_TEXT and "binary" for AV_CODEC_ID_BIN_DATA.
The former has been preserved by special-casing it while the latter is
a hack added in c9212abf so that the demuxer (which uses the same tables)
sets the appropriate CodecID for broken files ("binary" is not a correct
mime type at all); using it for the muxer was a mistake. The correct
mime type for AV_CODEC_ID_BIN_DATA is "application/octet-stream" and
this is what one gets from the AVCodecDescriptor.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=3589b3f2e217e78d16a92b372d95ce4a3f7df896
---
libavformat/matroskaenc.c | 16 +++++-----------
1 file changed, 5 insertions(+), 11 deletions(-)
diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c
index d3256d8f5d..e1ddf366d4 100644
--- a/libavformat/matroskaenc.c
+++ b/libavformat/matroskaenc.c
@@ -1667,17 +1667,11 @@ static int mkv_write_attachments(AVFormatContext *s)
if (t = av_dict_get(st->metadata, "mimetype", NULL, 0))
mimetype = t->value;
else if (st->codecpar->codec_id != AV_CODEC_ID_NONE ) {
- int i;
- for (i = 0; ff_mkv_mime_tags[i].id != AV_CODEC_ID_NONE; i++)
- if (ff_mkv_mime_tags[i].id == st->codecpar->codec_id) {
- mimetype = ff_mkv_mime_tags[i].str;
- break;
- }
- for (i = 0; ff_mkv_image_mime_tags[i].id != AV_CODEC_ID_NONE; i++)
- if (ff_mkv_image_mime_tags[i].id == st->codecpar->codec_id) {
- mimetype = ff_mkv_image_mime_tags[i].str;
- break;
- }
+ const AVCodecDescriptor *desc = avcodec_descriptor_get(st->codecpar->codec_id);
+ if (desc && desc->mime_types) {
+ mimetype = desc->mime_types[0];
+ } else if (st->codecpar->codec_id = AV_CODEC_ID_TEXT)
+ mimetype = "text/plain";
}
if (!mimetype) {
av_log(s, AV_LOG_ERROR, "Attachment stream %d has no mimetype tag and "
More information about the ffmpeg-cvslog
mailing list