From patchwork Wed Dec 15 19:00:31 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Gerard_Sol=C3=A9?= X-Patchwork-Id: 32535 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp91209iog; Wed, 15 Dec 2021 11:02:57 -0800 (PST) X-Google-Smtp-Source: ABdhPJy/89x+jPMJp4gG/R6/zNXfUrKYcNMTgAaplG28JMfI8/2PmMUOTrQaHUZlwnZ4WoyRi6Cl X-Received: by 2002:a05:6402:3551:: with SMTP id f17mr16327427edd.129.1639594977344; Wed, 15 Dec 2021 11:02:57 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1639594977; cv=none; d=google.com; s=arc-20160816; b=WEqzxSW2nkUz1F1heQpfDynXrLLHA6CEVPLyh7BOly/sfFZjlJyPTixs8PZfdhHTsn J0SYzkADquR+1XFN9kadhYgQ85+SZyG4n2obvKHduL086WS1GaflxIx4i0bBH/HTIUw/ PkaV7wMVSvGgzZVikTwTKuQZjucGfS6dJ5Vp9TGyGDxvYDdhN3+/b0HUSlweKDCB7T5u 0NiJQiMkM4EHTJ0tTb+Hz7KectICiHd0L0Vtkju+L26z2nmcllwbp+HvuhVRtSTGcHw5 27GQjQIbO3tsfp0hcA6uc+90f4VfDIIoNIIx/GVI1TLH159VyhROGrxef7SZvx/x41lj D+3Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=NvEuJJOTtMNLWg2pOhhPXKr7EeRBM4Bua0c/IM7vuwk=; b=tMMknEuDLSM0ef4EtODTYSDNceRlZamAjnfS8DvrO6r7duu1N/egHg6qqz4NvGNavS K7oabBMNefduGurppeUnbY6qvaXkXxlXyYaWAFpg1jU38SNgFYtAaFBGwU3e6uHtKqTt 6Z4h6OJ59PcRNL+3MQI+ym8N7sGSS+hqZ9bCa4EQGPJcwSqI3VjY5IEPVs3ug693BfFI Okuwk7Apet21LeHDs8G8drtqCVtwEho6Z30BEm9/+lWZff6pqCYqwLjCRH25wcs/kSWa M8LGDLydrhoIUFA2oEFNZ4ZwWwDYbSrnrYtJdt18FVVKLGeBOS/t2e2urrQtAay6uX7D 5owg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b="gFJ/K8KX"; 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 sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id gw26si1793443ejb.250.2021.12.15.11.02.55; Wed, 15 Dec 2021 11:02:57 -0800 (PST) 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 header.s=20210112 header.b="gFJ/K8KX"; 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 sp=QUARANTINE 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 834FB68AF41; Wed, 15 Dec 2021 21:02:52 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6DA4E68012B for ; Wed, 15 Dec 2021 21:02:45 +0200 (EET) Received: by mail-wm1-f41.google.com with SMTP id j140-20020a1c2392000000b003399ae48f58so19190279wmj.5 for ; Wed, 15 Dec 2021 11:02:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=97371Zy13G/mk7nkX/yReLQmvzKV8gIUk8hhuv3t4JU=; b=gFJ/K8KXv2PkPSBBzUnvsoIebGmnMWqk6R3XcxNI97LeFADKvQf9CdtvvkZo77lHMm OZmjEg5tTJHZrdoUU1u5MIa4k5BXTmucNz0w7VZCy1UPo4atYDMdcC0S/2uKD5S8hSLa InZNaQkt8bn0gf5HT/ruth01/C+JJbudzTO8/r71Ld6rW+qp1OsJJqs02Ybe7rnU/Qe3 sOJsyt+XF4qIsn86qoFnKV4umWw4zM3MQfLf3MgGUsmgUmXoX1nCfXKQtry7hq0tSOn7 f1FSeg/X+IA1mLWcy07XY0SS/Zx+hhoORAheHFPHKVUYopnmi2Vsw+PjV2pBjj/k8yS8 9B2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=97371Zy13G/mk7nkX/yReLQmvzKV8gIUk8hhuv3t4JU=; b=fosX+Kxs98WZqEaUnxZ5IT/orrs4cqa5zUGJhsrCeynEjltHc8Rt6uIX/vX3bsjyNl 1/0QFtr5rCX49hyhEg3sx7pgyPpvuvG62eSCFatZOcwdaDJARcIxFj3YzXmK8sbESjt0 YoUqndlhtIAud20g8CZ16EnhTz0NPX3JKD5XlB8EiC/j0KFtFnvw1r8uo42JClkLBqSD bBeDhOaqucWg0Tdfty+y0o/K/3ioJvqeQbojXSX1D71TGrCE6X93flWz2TpHrB6o/fDg CilUtBwCz14XMx/VX90X0ltHhNRjto+E5WPSvnw8EtvU2mmUWI4mtkl9ZSX0leBPfLMQ AJwA== X-Gm-Message-State: AOAM5333BDMtkyCWxBaBVg+YmPSS6/jzPf6HKrxvt1VETsM7TGU5ddjQ 6U5T7wOt+WHdlN4y2927/B7eUfj4qIWr3A== X-Received: by 2002:a05:600c:4104:: with SMTP id j4mr1491269wmi.178.1639594964824; Wed, 15 Dec 2021 11:02:44 -0800 (PST) Received: from localhost.localdomain ([31.4.202.131]) by smtp.gmail.com with ESMTPSA id o4sm273680wry.80.2021.12.15.11.02.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Dec 2021 11:02:44 -0800 (PST) From: Gerard Sole To: ffmpeg-devel@ffmpeg.org Date: Wed, 15 Dec 2021 20:00:31 +0100 Message-Id: <20211215190031.14529-1-g.sole.ca@gmail.com> X-Mailer: git-send-email 2.32.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] libavformat: add side_data copy in concat demuxer X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Gerard Sole Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: q666yGBex29x Adds support for concat demuxer to copy the side data information from the input file to the resulting file. It will behave like the metadata copy, where the metadata of the first file is kept in the the output file. Extract the current code that already performs the stream side_data copy into a separate method and reuse the method in the concat demuxer. Signed-off-by: Gerard Sole --- libavformat/concatdec.c | 1 + libavformat/internal.h | 9 +++++++++ libavformat/utils.c | 9 +++++++++ tests/ref/fate/concat-demuxer-extended-lavf-mxf | 2 +- tests/ref/fate/concat-demuxer-extended-lavf-mxf_d10 | 2 +- tests/ref/fate/concat-demuxer-simple1-lavf-mxf | 1 + tests/ref/fate/concat-demuxer-simple1-lavf-mxf_d10 | 1 + tests/ref/fate/concat-demuxer-simple2-lavf-ts | 1 + 8 files changed, 24 insertions(+), 2 deletions(-) diff --git a/libavformat/concatdec.c b/libavformat/concatdec.c index 8d80e536d1..0603c6e254 100644 --- a/libavformat/concatdec.c +++ b/libavformat/concatdec.c @@ -191,6 +191,7 @@ static int copy_stream_props(AVStream *st, AVStream *source_st) avpriv_set_pts_info(st, 64, source_st->time_base.num, source_st->time_base.den); av_dict_copy(&st->metadata, source_st->metadata, 0); + ff_stream_side_data_copy(st, source_st); return 0; } diff --git a/libavformat/internal.h b/libavformat/internal.h index eb8239cd3f..0e08dc832e 100644 --- a/libavformat/internal.h +++ b/libavformat/internal.h @@ -840,6 +840,15 @@ int ff_stream_add_bitstream_filter(AVStream *st, const char *name, const char *a */ int ff_stream_encode_params_copy(AVStream *dst, const AVStream *src); +/** + * Copy side data from source to destination stream + * + * @param dst pointer to destination AVStream + * @param src pointer to source AVStream + * @return >=0 on success, AVERROR code on error + */ +int ff_stream_side_data_copy(AVStream *dst, const AVStream *src); + /** * Wrap ffurl_move() and log if error happens. * diff --git a/libavformat/utils.c b/libavformat/utils.c index b5a4a09ae8..332ba534d2 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -605,6 +605,15 @@ int ff_stream_encode_params_copy(AVStream *dst, const AVStream *src) if (ret < 0) return ret; + ret = ff_stream_side_data_copy(dst, src); + if (ret < 0) + return ret; + + return 0; +} + +int ff_stream_side_data_copy(AVStream *dst, const AVStream *src) +{ /* Free existing side data*/ for (int i = 0; i < dst->nb_side_data; i++) av_free(dst->side_data[i].data); diff --git a/tests/ref/fate/concat-demuxer-extended-lavf-mxf b/tests/ref/fate/concat-demuxer-extended-lavf-mxf index 4b2a8624db..543c7d6a8c 100644 --- a/tests/ref/fate/concat-demuxer-extended-lavf-mxf +++ b/tests/ref/fate/concat-demuxer-extended-lavf-mxf @@ -1 +1 @@ -29e4e502a912b6d863e75d44e156ed31 *tests/data/fate/concat-demuxer-extended-lavf-mxf.ffprobe +d367d7f6df7292cbf454c6d07fca9b04 *tests/data/fate/concat-demuxer-extended-lavf-mxf.ffprobe diff --git a/tests/ref/fate/concat-demuxer-extended-lavf-mxf_d10 b/tests/ref/fate/concat-demuxer-extended-lavf-mxf_d10 index 1dedc6bf43..57b22848b9 100644 --- a/tests/ref/fate/concat-demuxer-extended-lavf-mxf_d10 +++ b/tests/ref/fate/concat-demuxer-extended-lavf-mxf_d10 @@ -1 +1 @@ -8de04a786521677a593283c44a53572e *tests/data/fate/concat-demuxer-extended-lavf-mxf_d10.ffprobe +1fac6962d4c5f1070d0d2db5ab7d86aa *tests/data/fate/concat-demuxer-extended-lavf-mxf_d10.ffprobe diff --git a/tests/ref/fate/concat-demuxer-simple1-lavf-mxf b/tests/ref/fate/concat-demuxer-simple1-lavf-mxf index 2fe703e2a6..589dbb73b6 100644 --- a/tests/ref/fate/concat-demuxer-simple1-lavf-mxf +++ b/tests/ref/fate/concat-demuxer-simple1-lavf-mxf @@ -121,4 +121,5 @@ Strings Metadata video|0|37|1.480000|34|1.360000|1|0.040000|24786|212480|K_|1 Strings Metadata 0|mpeg2video|4|video|[0][0][0][0]|0x0000|352|288|0|0|0|0|1|1:1|11:9|yuv420p|8|tv|unknown|unknown|unknown|left|progressive|1|N/A|25/1|25/1|1/25|N/A|N/A|N/A|N/A|N/A|N/A|N/A|N/A|N/A|51|22|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0x060A2B340101010501010D001300000000000000000000000000000000000001 +CPB properties|0|0|0|49152|-1 1|pcm_s16le|unknown|audio|[0][0][0][0]|0x0000|s16|48000|1|unknown|16|N/A|0/0|0/0|1/48000|0|0.000000|N/A|N/A|768000|N/A|N/A|N/A|N/A|50|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0x060A2B340101010501010D001300000000000000000000000000000000000001 diff --git a/tests/ref/fate/concat-demuxer-simple1-lavf-mxf_d10 b/tests/ref/fate/concat-demuxer-simple1-lavf-mxf_d10 index 0a3af658f6..7fb6ba2c9c 100644 --- a/tests/ref/fate/concat-demuxer-simple1-lavf-mxf_d10 +++ b/tests/ref/fate/concat-demuxer-simple1-lavf-mxf_d10 @@ -79,4 +79,5 @@ Strings Metadata audio|1|65280|1.360000|65280|1.360000|1920|0.040000|7680|2074624|K_|1 Strings Metadata 0|mpeg2video|0|video|[0][0][0][0]|0x0000|720|608|0|0|0|0|0|1:1|45:38|yuv422p|5|tv|unknown|unknown|unknown|topleft|tb|1|N/A|25/1|25/1|1/25|0|0.000000|N/A|N/A|30000000|N/A|N/A|N/A|N/A|35|22|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0x060A2B340101010501010D001300000000000000000000000000000000000001 +CPB properties|30000000|0|0|1212416|-1 1|pcm_s16le|unknown|audio|[0][0][0][0]|0x0000|s16|48000|2|unknown|16|N/A|0/0|0/0|1/48000|0|0.000000|N/A|N/A|1536000|N/A|N/A|N/A|N/A|35|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0x060A2B340101010501010D001300000000000000000000000000000000000001 diff --git a/tests/ref/fate/concat-demuxer-simple2-lavf-ts b/tests/ref/fate/concat-demuxer-simple2-lavf-ts index 76dde3b873..7c6079e2b1 100644 --- a/tests/ref/fate/concat-demuxer-simple2-lavf-ts +++ b/tests/ref/fate/concat-demuxer-simple2-lavf-ts @@ -213,3 +213,4 @@ video|1|175582|1.950911|171982|1.910911|3600|0.040000|15019|224848|__MPEGTS Stre 0|mp2|unknown|audio|[3][0][0][0]|0x0003|s16p|44100|1|mono|0|N/A|0/0|0/0|1/90000|0|0.000000|N/A|N/A|64000|N/A|N/A|N/A|N/A|89|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|this is stream 0 1|mpeg2video|4|video|[2][0][0][0]|0x0002|352|288|0|0|0|0|1|1:1|11:9|yuv420p|8|tv|unknown|unknown|unknown|left|progressive|1|N/A|25/1|25/1|1/90000|N/A|N/A|N/A|N/A|N/A|N/A|N/A|N/A|N/A|60|22|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|this is stream 1 +CPB properties|0|0|0|49152|-1