From patchwork Mon Sep 19 13:25:32 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: erkki.seppala.ext@nokia.com X-Patchwork-Id: 627 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.140.134 with SMTP id o128csp1000279vsd; Mon, 19 Sep 2016 06:26:56 -0700 (PDT) X-Received: by 10.194.148.99 with SMTP id tr3mr27395858wjb.173.1474291616686; Mon, 19 Sep 2016 06:26:56 -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 on9si20106539wjc.179.2016.09.19.06.26.56; Mon, 19 Sep 2016 06:26:56 -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=@nokia.onmicrosoft.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=nokia.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2F84D689F94; Mon, 19 Sep 2016 16:26:00 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-eopbgr00134.outbound.protection.outlook.com [40.107.0.134]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 70B6B689F02 for ; Mon, 19 Sep 2016 16:25:52 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nokia.onmicrosoft.com; s=selector1-nokia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=pqJ2I4F/TdT03z9EvSvo0xOk3b9OmrgxQl6PHu9OJJo=; b=ADwEvP38jltKckvmFT0U9+4h4PvQA0lRaqp+pSMN6O2QqMQZ5/6kPMU8syrcP/hyBWQzqjrV8FhcvG5p9/njAxlhtLTELCnIzmN/Jau6VNMEtD4zY6FZr+MK4PWqW8g2yXv8inLFYpkIolscQSvRh5OfowL2WOKYjzqITcwlSjk= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=erkki.seppala.ext@nokia.com; Received: from erkkise-laptop.vincit.intranet (131.228.2.24) by AM5PR0701MB2531.eurprd07.prod.outlook.com (10.169.153.151) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.629.8; Mon, 19 Sep 2016 13:26:06 +0000 Received: by erkkise-laptop.vincit.intranet (Postfix, from userid 1000) id C136C4F0F4D; Mon, 19 Sep 2016 16:25:48 +0300 (EEST) From: =?UTF-8?q?Erkki=20Sepp=C3=A4l=C3=A4?= To: Date: Mon, 19 Sep 2016 16:25:32 +0300 Message-ID: <1474291548-17810-10-git-send-email-erkki.seppala.ext@nokia.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1474291548-17810-1-git-send-email-erkki.seppala.ext@nokia.com> References: <1471943019-14136-1-git-send-email-erkki.seppala.ext@nokia.com> <1474291548-17810-1-git-send-email-erkki.seppala.ext@nokia.com> MIME-Version: 1.0 X-Originating-IP: [131.228.2.24] X-ClientProxiedBy: BN6PR15CA0015.namprd15.prod.outlook.com (10.172.204.153) To AM5PR0701MB2531.eurprd07.prod.outlook.com (10.169.153.151) X-MS-Office365-Filtering-Correlation-Id: a1eb749b-ef25-43ba-17e1-08d3e09082de X-Microsoft-Exchange-Diagnostics: 1; AM5PR0701MB2531; 2:Ei8GyXchwMkU7G82vExACvwKbASwwq9VHS/zjevsx2RUa2+PrJuduuJmxm4c9M6O4fQpZ+0IN+gK6dlZq2HflSgUlmdGqN/zMsLCiazfzhT4HNbni6aISTbBJhP9gbpM78qndMJyiAIRAi5UxcveOWjKLOtPWp2Jq8OYALwygNP2UEq1tA8JDwCkayI/ohPR; 3:DTyFqKCtVBycm8LYaytHFQZukl76Z8OCdiPEu0xD7o938gEN9yWuxCWJ5iOr215RQrK1P6vsVBlImLh9ZPbIVlE5WWv/yYHx8bDNw/txtWYDteNXE4UFQItbGXR5WIst X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:AM5PR0701MB2531; X-Microsoft-Exchange-Diagnostics: 1; AM5PR0701MB2531; 25:keq7RFEj0M0+Ya7XJW+y4zlms5954fwxF/D10P3QjIzHbvFubPGsHcdMILLLkhoQsGxOs3W8dzSQ7E7F4EbzLlxC6h4wK6c96ZvTXlkvhOd+Oj8i7r7nX1oDyG5uTLCJCZ5CwdJszkJy/UEhKET+laVmVka4ghKxN/d5hvETHKNSSKNdAyDCMDyx/g+ePp/1ODcw+SzCLpABb0t1I6KsJeEI4K9ukqcH0vDJLRy9xmBe2j+XPpBg4g90UkE9psfjoqEusi5DfKbZVXVUBLhCjtUZ77ND6nxyg1PDeGrF6T6bZnGFCs4dUqhejoKm0efI3N0hodBBnqMYg0tQMsr+3HhXaQ4HCMpGCY84/kkQAkujaPQzB/m4VuwVin/HYp5nHC3aKMgzXolbEy/AGaFDWsoK3gPKbGiErhONTxXE10ezashkbHPAz91he+/luVDiwPPnH7w1HOLiAhUA+NGeFnqAgT32BGIucXNgooB0vNf/ZQxG1Ms/vyxf5ubU4t4vhkA7VQgoJBdDaTWLkybwHrmXArufzzODBcHcLW5YzZ//Ft/+r4iojm8bh0SvOWvECBW1lD8lYh9G30zS4B5Hhg2kQKPfeRDZjoWI7QVa2in+XDBJd0nh4MzW7aHe/G9liNojH9tNV9zGtP/PyoyrDbBWLqP5fDKK99mAcb9ApV130DhmBBqJvTsG54j+kYF6; 31:2V2RgSb6HwCinXMjMHF0VcNHrOPw9CRmc3Ma0haPB1DdGaWYVO/NtuL2aubP3wL2aV2Fo2caa5URKWVo/AfDymvtjc7njF/OzqTQ62kueautxobVYE5tgFH/WHLqY/flFhxpyADNgtgTG8WWdj0Ic0iqoKjkRRJpyfsPrxOCAgBAY5pOAY4G8z/jBzz9ClN9rRhEhZYDzA1Kowli/Sab/5J5pKjHRq+d/yX/n+9Ggck= X-Microsoft-Exchange-Diagnostics: 1; AM5PR0701MB2531; 20:SL4bAyhdlGDEoViLnmk4cCePRK/rjk/2FNCLSY3f1W4Fj+zQldb0gCMbgt2TuDCLX9kJa9BRHOOyC0izXM+1UXo4IoObfacxR8d9sAQlEHPZUNI4hQQ+BkQ/8UXJaTM1M5w4ghx19+q2PcwkOqiyh2Rt5/QtV6+Zu1crh2XW6upnLwq0Jmv0cWH+qUxUuiP35AbS7RYqEinkBtsLebC46t0+g/xSc5ZJJmQZZ8xeNjd/cAfkI9+rOA3yh07T3Llg6Iw9JfE/oinUvtbvJ7qLSL9GRburP2qrSBiVpaFoNQnqEz0MxWEZpWExHgHueRp2p+YUdbBBl3QmunEjqM24GFlEXyD1AUIlW1ad5aTKDXoNX+dyojnAgkOud2FTJL2ZCUkDTBK/KEdNNZ1RRnhg8BLxyV4V83I4eIB8Uxj3lzkiJLDJxhyjAr3Oqr/7ZyCFiV87zTmyPl9hR6jnkd4MomaxYY9Z9XvDDSa1PJCcRw8J+jBKITeXYoMggZkBJk/k X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(82608151540597); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040176)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6055026); SRVR:AM5PR0701MB2531; BCL:0; PCL:0; RULEID:; SRVR:AM5PR0701MB2531; X-Microsoft-Exchange-Diagnostics: 1; AM5PR0701MB2531; 4:MS+MNgywxZkZXR+zUoG1Qwgi1IbeoNb5jM2CQ+c+oe+GLisrjbMXwlFEdA4z38B6My2UL9z1dQzkl7q88VdLyqrBX3Vcv0MJDtnv8DXatVVvs+TwGPAB87s7YWgxljcBm2RS/Mp0xgMsAHRKjVKsIVOiW+9+CeT/6T6R+wpW+K3cjewccfziiHpn9WkCIS5kvIXm3W5MuvzD/jyBVh9l3ucoh2XRAWi67oO64ly/oZT3KwGA3eorZdGBrWfVhp4yn8RyOY7iqsjuWHIV1+P9R13hfhHh1+CANYnAvN+QxxH7QHLb+KzJNEFcrqmk6u4sMm/Q1tt8SWrkrMQlwAuOdNr6EPGm1taWt5rl1vrFf90gxvoTJEhBg6UH1FbuKxFdRAmRuhAr90rg8/sM2UXyAT1LWf/bOI0qB9700ijZ7A5/UD6zwJaa3ses1jVXmuvy/XP8I4uaDLKoTQURIeGNrQ== X-Forefront-PRVS: 0070A8666B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(7916002)(189002)(199003)(50466002)(45336002)(4001430100002)(90966002)(36756003)(47776003)(92566002)(229853001)(2351001)(66066001)(52956003)(189998001)(107886002)(122856001)(68736007)(5820100001)(50226002)(2870700001)(106356001)(50986999)(6116002)(5660300001)(3846002)(4326007)(2906002)(586003)(76176999)(105586002)(33646002)(7736002)(110136003)(19580395003)(305945005)(81156014)(101416001)(7846002)(81166006)(19580405001)(42186005)(46386002)(97736004)(23676002)(8676002)(86362001)(2950100001)(2004002); DIR:OUT; SFP:1102; SCL:1; SRVR:AM5PR0701MB2531; H:erkkise-laptop.vincit.intranet; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: nokia.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtBTTVQUjA3MDFNQjI1MzE7MjM6L1JER2k3ZGNkczEvQ2VTRTJ2MVZkZkZi?= =?utf-8?B?c3JhQzQ2LzJTdnp2THJxVXEzSXJPQmI5VHhZaTRzNlhHemEwQWdDUFlHRjl4?= =?utf-8?B?bE1OWUhSV3Bpc2p5MEFDTEo3bjY4R2I1a2RaSE4vUUhGTkNGZWVac0h0R2pi?= =?utf-8?B?dit5di9CdTh2cVZEQm1JWTE3MFNnTk5FeGFQOWlEajJxdHp6bEtSa1ZhWVZJ?= =?utf-8?B?czZycWxJUHg2Um9mWFprdjRKa2JHQzk1N3ZFUWl6R3VXeGNsMml3WDB3N1B6?= =?utf-8?B?bTlJYXdpdzF2emQ1VFVKVGtWWWY2d1Jzdi9DYVRsQjdCU1lJVTZSL2djM1Z1?= =?utf-8?B?RGtXSkJDbkNTYW52SHMvOFU5Q21KQXFESDFRekkwaC92MnRETU04SVhuVmtJ?= =?utf-8?B?ZjFkUlplT21Ed0YzanY1blBQOUlUQnBGcWpBOSsxYlFqQmZQQ2N2ZzQ0Nkt6?= =?utf-8?B?VFllTHg2bnhtWjN3Yk1jN1hzbjBudllhWHJxZmZEVWNaZ3N3ZisyNTVFQzFH?= =?utf-8?B?bGoxdWtvbWNPUDJndUhWTmxIT1BkMDV4T2NMR1ZGNzkzZWpNaVJZRDEvNDJK?= =?utf-8?B?T1BPd28vbGV2eHBvdDNsNTA3MW1JVVk5c2ZBV0Jwb1VQbXMvYlRWSGRXMVln?= =?utf-8?B?WHVvVVI3VFI1ZVZ0VjVPMXZnWllTUDdTenJzWnBudytvenZlWlNjcFJtS1N0?= =?utf-8?B?NmwxZXRWdWZyRG9GZVpYMHk2OTZjMUhoTjQzSDVWVzBiaUQwekdiV0lSa0V5?= =?utf-8?B?MDdIaXF4RjdyaVgxK3o5b0J0TndScS93bkw5QlRNcncraGt1b3NQTkxsd3Uv?= =?utf-8?B?MjdEaHE3R0NKNjNFR1hMcEs4aEdHd0wrejZ2R2t3aWl4ckVjdkc0aEp1cFo0?= =?utf-8?B?TXhDLzdTOVkyM0tYNnNmVVpDd09DZEd2UCtYMVJWUnN5UFZVTllhSUZlNWdy?= =?utf-8?B?aG1keHNxSHhDN3FKUWtpbGlQZFp6bmdyOUxTYzRHVEhTVzBMZHp6bGFoL1h1?= =?utf-8?B?a04zQ2U1SnpXa1ozdEtMY0U3ZUE3cEhpOG1hQkR5dFd6S0s5UzBhdWZoWlQw?= =?utf-8?B?VThVclBpN2laWUxTTk1NalNpNjdlRUVYbnJRODZxS0JuNG93VXcvck9DT0dj?= =?utf-8?B?TkluQzlmVVV6WC9UejZQZ2dFaUtPZWNIOWsxMFZnK2lwN3R6RGhwZkxrRmRE?= =?utf-8?B?b3YrM1ZMWTdScmdub3RwOXlTSFEvWXhlNHAyYXNMTCtnV1d0MnZDYTVpNG5a?= =?utf-8?B?dVFndHRGQVNpTzBIYVhTbmY4eFBtZUYwV2hkNWtVSEtaUFc2K0hscW9iQldI?= =?utf-8?B?UmU2dDBRQUM4d2Z1NnArSnc4MGNXNGJpVnEyaUpwci9rTUFwVGNha3pIRjdn?= =?utf-8?B?eVpUZmtqQ1phZ2FDQ01GY25EQmJPcjAyWVltcG1uUXpxVE1mbU9pUVVkQUV2?= =?utf-8?B?S0J3cW9rY0ZLQmJYYUhqaFV1ajhvRVZISldSdTh3OUVRbzNKWWx3c1YwVkdL?= =?utf-8?B?UEFYdWJaTXJCWXVOdzFYcDdySzlZR2JvcGdJQTBVNGdEN1lhOGEzZGpMRmtl?= =?utf-8?B?eUJaS2cxb2kvWThaVVJHTlBBWmNnTzZJaTFHR0tiTUtYcTZ3WUdNTURBSStS?= =?utf-8?B?K0VPNzNvNjRXWGp5Z1RUM3ZCYW9NWXZmcngybndUNmJMeFl0ejZjanFKNkJt?= =?utf-8?Q?16ucNMU040Zx5kQ5Bv51o7/dCelVjATU9eTKdiNKj?= X-Microsoft-Exchange-Diagnostics: 1; AM5PR0701MB2531; 6:2/wSnM+kiHKXDc3pSOnbkEQAwhxnfADVRE2jzekO7pEaVwETd9wCYs2/nQRYe5dGChMxeZ+i1rhuhOKUtOle9+kwc3BngmYSkO6cGx5J7XL7GWy1vDagFABSPiXdJvJjLM89OcLsLu8NULhsKOQII5h+ojv0Hwdh06GHB1SOFHVApjmaWyvlWMMKL6ZbnxDeNk47qAVGCTjyBsnLNS5+Q0TWbWJZYFl/uLncn8Fve+VcZlKipq7nYiULcCyR6DzdtqltvCFptLwKCZ0ui6Z909BoIvY16zm3lf+3uF+rC82ROdmbhatJFtSKwPoYFo9timth0Lr+vwdcuKTzbQpWNQ==; 5:NWy0ILcKbh2kLWNV0LrQzqqm2uioA/Yp442TRfBpV1krr3NmhzQHQZBb7gKIt8SWoqIsUs5CUejhKru4ZaL4avsUUlTLGmhSbIcDP1QPB/YWemNwuH2yNROLHuRnMUUfYgwEvp4tnOUpA7wRshnNyQ==; 24:oagdTcHaOdI4y4FOc1iGQpNxSz57x+5+P3HqIq8ntpcqtcTdMJOFu+bM7JGdHUk/ypaa0oQsD08slyUnej0qa+iKI9hS3mFnpiGydnc6Gmc=; 7:i108IsdYTBXjXbQZ2jdZO2AhEL2+pfq9f1GcGE/yomvDQaOxLydlU9VwdMID6Hx9F4ZP7SmaGvNQsZH3wEvNeaWg7g5ey2xBLYbOO5HyPpvL1uw+Nq+VyAj5WYR4T2xOdz/A6LHOw4BCO7jCHdvD5ctXlhl/2HGSy0jN6THV6YntdS5NtZjzIcfULWtjYsIj5rhRh39NwyzY/AsaG5btvOLTGTWH2J0t5U8e+QXFhCeBjgQn+CywEf/795xyCXkv4yMkG3MlgHk6DTAAIeqMoKUeWhgdXI2tkBBdIx9AUSkfI95adt2kQs0/w4gXZTL4 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: nokia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Sep 2016 13:26:06.2805 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0701MB2531 Subject: [FFmpeg-devel] [PATCH v3 09/25] avcodec/metaenc, metadec: added an encoder/decoder for timed metadata 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: Michael Niedermayer , =?UTF-8?q?Erkki=20Sepp=C3=A4l=C3=A4?= , Paul B Mahol , Nicolas George , OZOPlayer Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" It has the codec id AV_CODEC_ID_META and type of AVMEDIA_TYPE_DATA. This codec basically passes the data forward and is used for referring timed meta data tracks by a codec. It is useful for dealing with the metadata in a similar way as other kinds of codecs. Signed-off-by: Erkki Seppälä Signed-off-by: OZOPlayer --- configure | 4 ++-- libavcodec/Makefile | 2 ++ libavcodec/allcodecs.c | 3 +++ libavcodec/avcodec.h | 1 + libavcodec/codec_desc.c | 8 +++++++ libavcodec/metadec.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++ libavcodec/metaenc.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 133 insertions(+), 2 deletions(-) create mode 100644 libavcodec/metadec.c create mode 100644 libavcodec/metaenc.c diff --git a/configure b/configure index 9b92426..ded5452 100755 --- a/configure +++ b/configure @@ -2848,11 +2848,11 @@ matroska_demuxer_select="iso_media riffdec" matroska_demuxer_suggest="bzlib lzo zlib" matroska_muxer_select="iso_media riffenc" mmf_muxer_select="riffenc" -mov_demuxer_select="iso_media riffdec" +mov_demuxer_select="iso_media riffdec meta_decoder" mov_demuxer_suggest="zlib" mov_muxer_select="iso_media riffenc rtpenc_chain" mp3_demuxer_select="mpegaudio_parser" -mp4_muxer_select="mov_muxer" +mp4_muxer_select="mov_muxer meta_encoder" mpegts_demuxer_select="iso_media" mpegts_muxer_select="adts_muxer latm_muxer" mpegtsraw_demuxer_select="mpegts_demuxer" diff --git a/libavcodec/Makefile b/libavcodec/Makefile index a6e79ce..534f201 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -757,6 +757,8 @@ OBJS-$(CONFIG_ADPCM_VIMA_DECODER) += vima.o adpcm_data.o OBJS-$(CONFIG_ADPCM_XA_DECODER) += adpcm.o adpcm_data.o OBJS-$(CONFIG_ADPCM_YAMAHA_DECODER) += adpcm.o adpcm_data.o OBJS-$(CONFIG_ADPCM_YAMAHA_ENCODER) += adpcmenc.o adpcm_data.o +OBJS-$(CONFIG_META_ENCODER) += metaenc.o +OBJS-$(CONFIG_META_DECODER) += metadec.o # hardware accelerators OBJS-$(CONFIG_D3D11VA) += dxva2.o diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c index 4c6b94e..30d0243 100644 --- a/libavcodec/allcodecs.c +++ b/libavcodec/allcodecs.c @@ -687,4 +687,7 @@ void avcodec_register_all(void) REGISTER_PARSER(VP3, vp3); REGISTER_PARSER(VP8, vp8); REGISTER_PARSER(VP9, vp9); + + /* data, meta data */ + REGISTER_ENCDEC(META, meta); } diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 3be54d4..4219a9f 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -639,6 +639,7 @@ enum AVCodecID { AV_CODEC_ID_DVD_NAV, AV_CODEC_ID_TIMED_ID3, AV_CODEC_ID_BIN_DATA, + AV_CODEC_ID_META, AV_CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it diff --git a/libavcodec/codec_desc.c b/libavcodec/codec_desc.c index 24948ca..e85b51d 100644 --- a/libavcodec/codec_desc.c +++ b/libavcodec/codec_desc.c @@ -2965,6 +2965,14 @@ static const AVCodecDescriptor codec_descriptors[] = { .mime_types= MT("application/octet-stream"), }, + { + .id = AV_CODEC_ID_META, + .type = AVMEDIA_TYPE_DATA, + .name = "meta_data", + .long_name = NULL_IF_CONFIG_SMALL("binary data"), + .mime_types= MT("application/octet-stream"), + }, + /* deprecated codec ids */ }; diff --git a/libavcodec/metadec.c b/libavcodec/metadec.c new file mode 100644 index 0000000..2c1d461 --- /dev/null +++ b/libavcodec/metadec.c @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2015-2016 Erkki Seppälä + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "internal.h" +#include "libavformat/avio.h" + +static int meta_decode(AVCodecContext *avctx, void *data, int *got_packet_ptr, AVPacket *avpkt) +{ + AVFrame *metadata = data; + + *got_packet_ptr = 0; + + av_frame_unref(metadata); + if (avpkt->buf) { + metadata->buf[0] = av_buffer_ref(avpkt->buf); + if (!metadata->buf[0]) + return AVERROR(ENOMEM); + metadata->buf[0]->size = avpkt->size; + } else { + metadata->buf[0] = av_buffer_alloc(avpkt->size); + if (!metadata->buf[0]) + return AVERROR(ENOMEM); + metadata->data[0] = metadata->buf[0]->data; + memcpy(metadata->data[0], avpkt->data, avpkt->size); + } + + metadata->nb_samples = avpkt->size; + metadata->pts = avpkt->pts; + metadata->pkt_pts = avpkt->pts; + metadata->pkt_dts = avpkt->dts; + *got_packet_ptr = 1; + + return 0; +} + +AVCodec ff_meta_decoder = { + .name = "meta", + .long_name = NULL_IF_CONFIG_SMALL("Timed Metadata Decoder"), + .type = AVMEDIA_TYPE_DATA, + .id = AV_CODEC_ID_META, + .decode = meta_decode, +}; diff --git a/libavcodec/metaenc.c b/libavcodec/metaenc.c new file mode 100644 index 0000000..58c9c39 --- /dev/null +++ b/libavcodec/metaenc.c @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2015 Erkki Seppälä + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "libavutil/intreadwrite.h" +#include "internal.h" +#include "libavutil/opt.h" +#include "libavformat/avio.h" + +static int meta_encode(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, + int *got_packet_ptr) +{ + *got_packet_ptr = 0; + + av_packet_unref(avpkt); + if (frame->buf) { + avpkt->buf = av_buffer_ref(frame->buf[0]); + if (!avpkt->buf) + return AVERROR(ENOMEM); + avpkt->data = frame->data[0]; + } else { + avpkt->buf = av_buffer_alloc(frame->nb_samples); + if (!avpkt->buf) + return AVERROR(ENOMEM); + avpkt->data = avpkt->buf->data; + memcpy(avpkt->data, frame->data[0], frame->nb_samples); + } + avpkt->size = frame->nb_samples; + avpkt->pts = frame->pts; + avpkt->dts = frame->pts; + *got_packet_ptr = 1; + + return 0; +} + +AVCodec ff_meta_encoder = { + .name = "meta", + .long_name = NULL_IF_CONFIG_SMALL("Timed Metadata Encoder"), + .type = AVMEDIA_TYPE_DATA, + .id = AV_CODEC_ID_META, + .encode2 = meta_encode, +};