From patchwork Fri Jan 5 19:49:28 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacob Trimble X-Patchwork-Id: 7147 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.78.2 with SMTP id r2csp1165233jaa; Fri, 5 Jan 2018 11:50:33 -0800 (PST) X-Google-Smtp-Source: ACJfBotrYO1e2MbiSfQyvsiBbBeP+MSmsS6MM57JtvpgGQZEZ2mxVDVWDMsBRCa8r33g2eqWdxJi X-Received: by 10.223.167.66 with SMTP id e2mr3906818wrd.91.1515181833526; Fri, 05 Jan 2018 11:50:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1515181833; cv=none; d=google.com; s=arc-20160816; b=qPpPutdmIuJTJKLZ3UUd2IPa07d4qyA6SavDV2xVq5a5ZUKeoDg0WWKtD2exeP5Vsp pqXCKf5RCzBB4DaUdHbR00Fq+S9Ul1CWxQFtXc4BMZiRWnJdKaFfmluoC+nsljkwikgx X0XSdOb8BgJM5AJJzMipcF+ThCtr2waWyVbznxWWr4FmCRMhtytMXJpfJ1ZQHLwLLROH 62oZz7TSDGNC7ecgJ7nrbCLtuf4aEO9x73/rSmBiVUXOXERGjZH9PXOjKHacGugfinaD 76/JQs6QjkuIAG3a/hV+dcdo8qL/9T3S3OIidmaGZ/S3TrR2HRyrOenfSiENZz3gfFdG b/bw== 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:to:from:references:message-id :in-reply-to:date:mime-version:dkim-signature:delivered-to :arc-authentication-results; bh=t9ewnT4Pkq5vM9hL1pBaHJmWg4p/FHykMFKezQ8BrHo=; b=rUdMiHtQf39aZ/IiLThlwBjurB9G+92YGWYsmoNFl1JWTab7kROBK0/rsqFDFsmIpN iF03EblF8l8EolK7rcp/HumxOOPSPMvG33FuQXzRM+AMskMcN0RB9t2083vcSSsbnnC8 gy/Lo3TvnNOcgZCHPvquS3drgvDete7FlmQmSYH26LTyGbtZrjHi6OgYQ+fV1/rKwcUG zurXknyRK8aCylHfEJrcy7TUbFqIJZ1DjY8JBN4DFE+PSh6aeoXWVi2O2eqdbulq0Apq 7jJzioN+u+OhR1Jkqzw9vjmA0UTyjveitlki+TNlEIT2q7KmIIWN+s+ou9Zkdp9BAD9+ MyrQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@google.com header.s=20161025 header.b=jpSDL7+R; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id e82si4200328wma.149.2018.01.05.11.50.33; Fri, 05 Jan 2018 11:50:33 -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=@google.com header.s=20161025 header.b=jpSDL7+R; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E6A9A689BB1; Fri, 5 Jan 2018 21:50:28 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk0-f201.google.com (mail-qk0-f201.google.com [209.85.220.201]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D6F01689B83 for ; Fri, 5 Jan 2018 21:50:27 +0200 (EET) Received: by mail-qk0-f201.google.com with SMTP id a186so3834193qkb.6 for ; Fri, 05 Jan 2018 11:50:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:date:in-reply-to:message-id:references:subject:from:to :cc; bh=hk3H3BqzAkwD48OSbKU8dA19SKHNokEEABSQUyWRUaM=; b=jpSDL7+RTgYtssb/xCbJ6fRMslE7r7flItewHIzhrxfhh2AYx4cgpdTCoedmJBnm7H dXrEHO+roZawiBVpTylbzAMlBi+XPC/rEY+WHPfsC17bswN4F6e9qI4/GApBoq6DFNSi H3skB/J/fnz9HSY/h1bsjXkEfoPaqHg0vcPrwHTJ9wvlfcfMY4Mtyn7mI4H6xL1oFagy CCnLVY994jgRyKGcFD3Hlgc4VyIAuyPY4YewO9HOACI7YtUfmXRs+bC3NvTnQ7gZ9W+E MpD4LhDu5JgFI+EJZoHrzu9/7LeK3rNEJ4CzcNtAZEK3vuN6WRo1pw5RKuCXywK8gSpM cHog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:date:in-reply-to:message-id :references:subject:from:to:cc; bh=hk3H3BqzAkwD48OSbKU8dA19SKHNokEEABSQUyWRUaM=; b=BaSs7krT1pMoJpQCm33Ks2w/ZTUMs8erh03Ya5cL+oDH6V7k0xpTtat5CmUlFmOgnd sqs5/kICE5bNPvyd0xWchxfSwJ76m5am0+WHtr81RfLZfn38Rlt2ayyuSlFQ5zFxVew7 tDYYo0OneSQ/eIuj10WtmmHKKK3zV4RIzeNkV8ksUMg04zwAF0jZ2VH0WEg/EyioSDOq 3P5l4F+E6L+vzAejvgHjO53MDu4Eed+upI0C3J5HTHj8hq82/8kquCkAy3Tw9rDlwU7G XZjxgDlUbp/GMZ5gNuvB2OmxHnEbRzL1FxwguPT13za0/v0uNEi14AbQbC7cn9yOB9J/ yPiQ== X-Gm-Message-State: AKwxyteZ7lYA932DWDZti+rgJW06fxDWCCoCvyZxwO8qopKZcjqGy8Fm +JHMA3ah08agzzaKE0dgXBn7wFmwjzX2ESFe7d5ZVbIbTIAQSGFgXtoeraYQisHGLq/wSHo+K3S TtM8WmUAPmej+83M0PCrK8Q8/irYT2ddENqYnQEQsfkhXTio9Ug11gSZrynsg08IBOzZu MIME-Version: 1.0 X-Received: by 10.55.9.140 with SMTP id 134mr1777041qkj.1.1515181826475; Fri, 05 Jan 2018 11:50:26 -0800 (PST) Date: Fri, 5 Jan 2018 11:49:28 -0800 In-Reply-To: <20180105194928.104085-1-modmaker@google.com> Message-Id: <20180105194928.104085-3-modmaker@google.com> References: <20180105194928.104085-1-modmaker@google.com> X-Mailer: git-send-email 2.16.0.rc0.223.g4a4ac83678-goog From: Jacob Trimble To: ffmpeg-devel@ffmpeg.org Subject: [FFmpeg-devel] [PATCH 3/3] avformat/mov: Expose encryption info to the app. 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: Jacob Trimble Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" This exposes encryption info from the container to the app. This includes key ID, IV, and subsample byte ranges. The info is passed using the new side-data AV_PKT_DATA_ENCRYPTION_INIT_DATA. Signed-off-by: Jacob Trimble --- libavformat/mov.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/libavformat/mov.c b/libavformat/mov.c index 554b2be8bd..abd59d8c7b 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -5994,6 +5994,32 @@ static int mov_read_saio(MOVContext *c, AVIOContext *pb, MOVAtom atom) return 0; } +static int mov_read_pssh(MOVContext *c, AVIOContext *pb, MOVAtom atom) +{ + AVStream *st; + uint8_t* side_data; + size_t size; + + if (c->fc->nb_streams < 1) + return 0; + st = c->fc->streams[c->fc->nb_streams-1]; + + size = atom.size + 8; + side_data = av_stream_new_side_data(st, AV_PKT_DATA_ENCRYPTION_INIT_DATA, size); + if (!side_data) { + return AVERROR(ENOMEM); + } + + AV_WB32(side_data, size); + AV_WL32(side_data + 4, MKTAG('p','s','s','h')); + if (avio_read(pb, side_data + 8, atom.size) != atom.size) { + av_log(c->fc, AV_LOG_ERROR, "failed to read the pssh atom\n"); + return AVERROR_INVALIDDATA; + } + + return 0; +} + static int mov_read_schm(MOVContext *c, AVIOContext *pb, MOVAtom atom) { AVStream *st; @@ -6233,6 +6259,8 @@ static int cenc_filter(MOVContext *mov, MOVStreamContext *sc, AVPacket *pkt, int if (mov->decryption_key) { return cenc_decrypt(mov, sc, encrypted_sample, pkt->data, pkt->size); + } else { + return av_encryption_info_add_side_data(pkt, encrypted_sample); } } @@ -6366,6 +6394,7 @@ static const MOVParseTableEntry mov_default_parse_table[] = { { MKTAG('s','e','n','c'), mov_read_senc }, { MKTAG('s','a','i','z'), mov_read_saiz }, { MKTAG('s','a','i','o'), mov_read_saio }, +{ MKTAG('p','s','s','h'), mov_read_pssh }, { MKTAG('s','c','h','m'), mov_read_schm }, { MKTAG('s','c','h','i'), mov_read_default }, { MKTAG('t','e','n','c'), mov_read_tenc },