From patchwork Wed Aug 31 06:05:31 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rodger Combs X-Patchwork-Id: 347 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.140.134 with SMTP id o128csp218510vsd; Tue, 30 Aug 2016 23:18:09 -0700 (PDT) X-Received: by 10.195.12.77 with SMTP id eo13mr7270328wjd.142.1472624289426; Tue, 30 Aug 2016 23:18:09 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id x191si1595398wmf.140.2016.08.30.23.18.08; Tue, 30 Aug 2016 23:18:09 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0EEC5689D08; Wed, 31 Aug 2016 09:17:59 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-it0-f68.google.com (mail-it0-f68.google.com [209.85.214.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7963D689A95 for ; Wed, 31 Aug 2016 09:17:52 +0300 (EEST) Received: by mail-it0-f68.google.com with SMTP id f128so4574622ith.2 for ; Tue, 30 Aug 2016 23:17:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:subject:date:message-id; bh=ol2/+UGJKA7GW9aCmT9J8c66wDiTPC61QAlOFK01M2w=; b=pNw2/R+BND1YWBjr3Z/7VxQv2L7AYNkv8RV1/q9mk6pzK/7/Px72iTdaEtIe/h829u jTv+n2usjOAmVFrR+W7suguZoRuEcjHAgUgog1Wy/CYQbAReEpAJAorCqAjc7e05N6J5 YpdlKQEkJPDT7jfae7U24Vrn8LoEOovJluJUklNNc3txAZbJnsM9l4PbO43kIFUQC/or pVXI1d0z8GhFKpKweYlHPsLrbPB9cwJBWLY2qZ0aPWNKaZxE2GzMC37PrkZcsdVFz0lE 7OlYzAvIlJsqgXWrf7WryVEaPoTBQZsSJxDK+KFvkq0p6s661xu5e/AIIPp4FrDri1GL fZfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id; bh=ol2/+UGJKA7GW9aCmT9J8c66wDiTPC61QAlOFK01M2w=; b=RAu97aCqpzvwWdYsWpLMiD/Q5vUxCbTpj65F67tJJGA2+Zo89xl2nsi1URmTsBOBAy hmDaxlkY4Ot1gmqouU6RQ4HSEr+lW2XpkiKNKUK2HrCV3wYS7y96LdSrCjHraR+kU0Ai lIn5B0iGW8z6mI1RYtXdDWi64S566gqvnSk4uH2348S+dxmG2PG7aGEERIta22dZW6Y0 1CLFPd1nz/aubbzPXUlrdwYBukT6eQDDzHVEpXcHs6kQzevX3ChP2gv4j3Zzl4xjafZv ut0N8zoXq1HQGH0Y/dAo2wsMsK9XMb9RffeSVHQaDk1NMMPNLK1LjxzGI8smkIuCGz2s +73g== X-Gm-Message-State: AE9vXwMdyPhCbDzlItQxclaXD3VnKCm5nBKpwyIomjaFdb/tntbT18RS3E/A04z+aVyPDQ== X-Received: by 10.36.214.193 with SMTP id o184mr12278565itg.5.1472623536436; Tue, 30 Aug 2016 23:05:36 -0700 (PDT) Received: from Rodgers-MacBook-Pro.local.net (c-73-209-137-129.hsd1.il.comcast.net. [73.209.137.129]) by smtp.gmail.com with ESMTPSA id 138sm1232714ioz.16.2016.08.30.23.05.35 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 30 Aug 2016 23:05:35 -0700 (PDT) From: Rodger Combs To: ffmpeg-devel@ffmpeg.org Date: Wed, 31 Aug 2016 01:05:31 -0500 Message-Id: <20160831060531.50128-1-rodger.combs@gmail.com> X-Mailer: git-send-email 2.9.3 Subject: [FFmpeg-devel] [PATCH] lavf/matroskaenc: improve tag-skipping checks X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" - Add "duration" to list of skipped attributes (we handle that elsewhere) - Move the list to its own function and make its use consistent This fixes cases where we'd have a string in one list and not another, which could result in us writing an empty tag. --- libavformat/matroskaenc.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 2a2877f..3eeb09b 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -1308,6 +1308,17 @@ static int mkv_write_tag_targets(AVFormatContext *s, return 0; } +static int mkv_check_tag_name(const char *name, unsigned int elementid) +{ + return av_strcasecmp(name, "title") && + av_strcasecmp(name, "stereo_mode") && + av_strcasecmp(name, "creation_time") && + av_strcasecmp(name, "encoding_tool") && + av_strcasecmp(name, "duration") && + (elementid != MATROSKA_ID_TAGTARGETS_TRACKUID || + av_strcasecmp(name, "language")); +} + static int mkv_write_tag(AVFormatContext *s, AVDictionary *m, unsigned int elementid, unsigned int uid, ebml_master *tags) { @@ -1320,12 +1331,7 @@ static int mkv_write_tag(AVFormatContext *s, AVDictionary *m, unsigned int eleme return ret; while ((t = av_dict_get(m, "", t, AV_DICT_IGNORE_SUFFIX))) { - if (av_strcasecmp(t->key, "title") && - av_strcasecmp(t->key, "stereo_mode") && - av_strcasecmp(t->key, "creation_time") && - av_strcasecmp(t->key, "encoding_tool") && - (elementid != MATROSKA_ID_TAGTARGETS_TRACKUID || - av_strcasecmp(t->key, "language"))) { + if (mkv_check_tag_name(t->key, elementid)) { ret = mkv_write_simpletag(s->pb, t); if (ret < 0) return ret; @@ -1336,12 +1342,12 @@ static int mkv_write_tag(AVFormatContext *s, AVDictionary *m, unsigned int eleme return 0; } -static int mkv_check_tag(AVDictionary *m) +static int mkv_check_tag(AVDictionary *m, unsigned int elementid) { AVDictionaryEntry *t = NULL; while ((t = av_dict_get(m, "", t, AV_DICT_IGNORE_SUFFIX))) - if (av_strcasecmp(t->key, "title") && av_strcasecmp(t->key, "stereo_mode")) + if (mkv_check_tag_name(t->key, elementid)) return 1; return 0; @@ -1355,7 +1361,7 @@ static int mkv_write_tags(AVFormatContext *s) ff_metadata_conv_ctx(s, ff_mkv_metadata_conv, NULL); - if (mkv_check_tag(s->metadata)) { + if (mkv_check_tag(s->metadata, 0)) { ret = mkv_write_tag(s, s->metadata, 0, 0, &tags); if (ret < 0) return ret; } @@ -1363,7 +1369,7 @@ static int mkv_write_tags(AVFormatContext *s) for (i = 0; i < s->nb_streams; i++) { AVStream *st = s->streams[i]; - if (!mkv_check_tag(st->metadata)) + if (!mkv_check_tag(st->metadata, MATROSKA_ID_TAGTARGETS_TRACKUID)) continue; ret = mkv_write_tag(s, st->metadata, MATROSKA_ID_TAGTARGETS_TRACKUID, i + 1, &tags); @@ -1392,7 +1398,7 @@ static int mkv_write_tags(AVFormatContext *s) for (i = 0; i < s->nb_chapters; i++) { AVChapter *ch = s->chapters[i]; - if (!mkv_check_tag(ch->metadata)) + if (!mkv_check_tag(ch->metadata, MATROSKA_ID_TAGTARGETS_CHAPTERUID)) continue; ret = mkv_write_tag(s, ch->metadata, MATROSKA_ID_TAGTARGETS_CHAPTERUID, ch->id + mkv->chapter_id_offset, &tags);