From patchwork Thu Dec 26 00:55:51 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lance Wang X-Patchwork-Id: 16959 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 1EC7F4497C8 for ; Thu, 26 Dec 2019 02:56:06 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id EBA1C689E91; Thu, 26 Dec 2019 02:56:05 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf1-f195.google.com (mail-pf1-f195.google.com [209.85.210.195]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5BA88689DAF for ; Thu, 26 Dec 2019 02:55:59 +0200 (EET) Received: by mail-pf1-f195.google.com with SMTP id 2so12458705pfg.12 for ; Wed, 25 Dec 2019 16:55:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=XgMENuEK+bw+WB9BDoR2L6jLZAQOs+BbwbM+wf8W9RQ=; b=nziKqmS6LdMz7ha0eoRgImoaHVmTBur3k9EdYy3Uy3SsyjNQWAVTs+YL+Hq1tYvzY3 yHHoHSxRAUlL1rnAZE7WyxpTjGbUVH78Q4ze1UASpFbtVTtHVJcH3L3O94uByqmRQMXE ZKqEcp833BC1bXZ5D697aMGw1VX3+jR5iXgCVw1s4uVWZDplASpJGezsziOSN0sltX3s tsqka6oZmPGFTfknyo632RJ37mGuwjg3LkG9rnPkM7E8+hKT91PT8+ouzYc5wfdsJ3u6 KnRyr/ADMic70eOal29I3Udz/1gKJT7Ja5Hye5ekKgMWX1xFgNzWqfhOvxiogMPHq4W2 wohA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=XgMENuEK+bw+WB9BDoR2L6jLZAQOs+BbwbM+wf8W9RQ=; b=Y3eMpx6ScF/zVBTS8qcZEFYKm16jTcXSj6T7KOSZOBm1a8yfomPqvhZv+Fuqq3hCAQ fGqU8Uhmw2niyZ00R1UwWRGBlu/Uqhz6q69ALWpotuYnJCF2Ejnwo9/tZYjcKHK0i1k/ T5DB1zdsV+u5Dcy+CZmi6zkpZc8FIiWZOEENtV/drOUgx9x9qNANuVCVkbsOmGs5CYjn 9aV7uw4ASa0dTEuBtbKNOdHUxYpdtnw33mlPpON0G80mS3/dadyHisBrgoKGjnx0wdI4 sb9pswElw/oBEkZY0kTSQD5ota0Zcz8x6Ti3wYaUQV2dcTr0y2ra1tW/qrNA/f/DCHVp l0VA== X-Gm-Message-State: APjAAAVmUcrjvoAw0AGqEJhm0oUG6d24kh027eOLjiqaPkwEjWbaFdYH t4cJTTAnfS6MTqc4ZUacYdVJGbmT X-Google-Smtp-Source: APXvYqwBJlReeREF5wRE79hpCf7vU7Fbb02/Ed1iiIdOUieta4NCGgyNsx97AEKp3ZnesGPd3sE14A== X-Received: by 2002:a63:141b:: with SMTP id u27mr34079291pgl.314.1577321757118; Wed, 25 Dec 2019 16:55:57 -0800 (PST) Received: from vpn.localdomain ([47.90.99.151]) by smtp.gmail.com with ESMTPSA id s131sm14457567pfs.135.2019.12.25.16.55.55 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 25 Dec 2019 16:55:56 -0800 (PST) From: lance.lmwang@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Thu, 26 Dec 2019 08:55:51 +0800 Message-Id: <20191226005551.7652-1-lance.lmwang@gmail.com> X-Mailer: git-send-email 2.9.5 Subject: [FFmpeg-devel] [PATCH v1] avcodec/h264_metadata_bsf: Fix user data failed to insert in case no SPSs NAL for global headers 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 Cc: Limin Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Limin Wang FLV, MP4... will enable global_header default and place SPSs headers in extradata instead of every keyframe. So it'll failed to insert user data unregisted for no SPSs NAL after first AU without the patch. Please test it with below command: ./ffmpeg -f lavfi -i testsrc -c:v libx264 -g 25 \ -bsf:v h264_metadata=sei_user_data=086f3693-b7b3-4f2c-9653-21492feee5b8+hello \ -frames:v 150 test.mp4 After applied the patch, you'll get the user data for every keyframe with below command: ./ffmpeg -i test.mp4 -vf showinfo -frames:v 150 -f null - Signed-off-by: Limin Wang --- libavcodec/h264_metadata_bsf.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libavcodec/h264_metadata_bsf.c b/libavcodec/h264_metadata_bsf.c index 5de74be9d6..9690ca433b 100644 --- a/libavcodec/h264_metadata_bsf.c +++ b/libavcodec/h264_metadata_bsf.c @@ -279,7 +279,7 @@ static int h264_metadata_filter(AVBSFContext *bsf, AVPacket *pkt) { H264MetadataContext *ctx = bsf->priv_data; CodedBitstreamFragment *au = &ctx->access_unit; - int err, i, j, has_sps; + int err, i, j, has_sps, is_keyframe = 0; H264RawAUD aud; err = ff_bsf_get_packet_ref(bsf, pkt); @@ -359,11 +359,13 @@ static int h264_metadata_filter(AVBSFContext *bsf, AVPacket *pkt) goto fail; has_sps = 1; } + if (au->units[i].type == H264_NAL_IDR_SLICE) + is_keyframe = 1; } // Only insert the SEI in access units containing SPSs, and also // unconditionally in the first access unit we ever see. - if (ctx->sei_user_data && (has_sps || !ctx->done_first_au)) { + if (ctx->sei_user_data && (has_sps || !ctx->done_first_au || is_keyframe)) { H264RawSEIPayload payload = { .payload_type = H264_SEI_TYPE_USER_DATA_UNREGISTERED, };