From patchwork Fri Aug 16 21:17:11 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 14557 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 DB481449DD1 for ; Sat, 17 Aug 2019 00:17:59 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C8DE268AC95; Sat, 17 Aug 2019 00:17:59 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f170.google.com (mail-qk1-f170.google.com [209.85.222.170]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 65DB668AC1D for ; Sat, 17 Aug 2019 00:17:52 +0300 (EEST) Received: by mail-qk1-f170.google.com with SMTP id d79so5851901qke.11 for ; Fri, 16 Aug 2019 14:17:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=uY9Yscq4CeDtvlk/eQWa/jJrhSKkUWGCf6qieNBnIQ8=; b=XVaUSANp/1lUleYgvEydOKtxNB6spafMk9A/kBluRC544mM3gEcvBcYstyhsvC+G/n sUwslowAQY44bOiqaXJjICqPLBp4ODRY47HYJ8Ysgrz/2HiUqabtv1avgPTH5NnHlJaG +es3PQ6NezCJ7wvoHDsNjX8dkMHF8YdPrZjm0syqoe6WHN7ZtXbY/+XaMs0wK3ZDo95V 9JRBmlXLodihYwr7fy7q4W4/0KU1KboXqRVhsdpmWZi58KDrO5K5a2utDLnOmqOo8C5s k2YJH/q6A4uZI13bcyuLJNT+NmJG3WSvmSiIlyVmJGI5p3CGNOYvgYZ/inEQGFThVoeS O4uA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=uY9Yscq4CeDtvlk/eQWa/jJrhSKkUWGCf6qieNBnIQ8=; b=i5E2iFu1RjrQfPMZAHvCUMjja7cPnfu5y7cAvUVamrES5/UeFdZ2t5+JAbbqY6LUd5 /OJ3H6ii1475sfycQSWWxhQFhXkShSBmp3jGGGBnJnKp1jQyqLtvcEYD2kWyNzHiI4gy nERYl47D9/SqefEVjLprWNsq6zUWkDlDcuuq7m1kccVlavMm51MvbMYu8dFiXxb5rFP/ 3B97sofQPUK6SMoEQTNOA/7F8Q4/fXpP9KTm6CvpIsiv4jOxALDHUh2eo0qRx77P6gE0 3RUEZIaWRXNwgSdbbkCD1x2bcitFGf950FlHPT4s+e6cVrP0oY9JeTWFVPhNJ4vhAFLu yAqg== X-Gm-Message-State: APjAAAXT/O8aQv+NZ72BKAIX5nKQ6F/3XsEvG7tx4/Yq5BU+Y2/IpVAJ d1Y4va41TwxYxkFPijXpXKc1huKU X-Google-Smtp-Source: APXvYqxZEZXim8WeOnSir1IML5zuz1umDe7orU4xCKeuGyc836KygtBEKpAEaBryQEFvDqwZAXoPaQ== X-Received: by 2002:a37:9904:: with SMTP id b4mr10433255qke.159.1565990271045; Fri, 16 Aug 2019 14:17:51 -0700 (PDT) Received: from localhost.localdomain ([181.23.95.42]) by smtp.gmail.com with ESMTPSA id d9sm3497714qko.20.2019.08.16.14.17.50 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Aug 2019 14:17:50 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Fri, 16 Aug 2019 18:17:11 -0300 Message-Id: <20190816211712.1255-3-jamrial@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190816211712.1255-1-jamrial@gmail.com> References: <20190816211712.1255-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/3] avformat/mov: add demuxing support for Dolby TrueHD streams 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: James Almer --- libavformat/isom.c | 1 + libavformat/mov.c | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/libavformat/isom.c b/libavformat/isom.c index c4880878c1..fa2e318099 100644 --- a/libavformat/isom.c +++ b/libavformat/isom.c @@ -369,6 +369,7 @@ const AVCodecTag ff_codec_movaudio_tags[] = { { AV_CODEC_ID_EVRC, MKTAG('s', 'e', 'v', 'c') }, /* 3GPP2 */ { AV_CODEC_ID_SMV, MKTAG('s', 's', 'm', 'v') }, /* 3GPP2 */ { AV_CODEC_ID_FLAC, MKTAG('f', 'L', 'a', 'C') }, /* nonstandard */ + { AV_CODEC_ID_TRUEHD, MKTAG('m', 'l', 'p', 'a') }, /* mp4ra.org */ { AV_CODEC_ID_OPUS, MKTAG('O', 'p', 'u', 's') }, /* mp4ra.org */ { AV_CODEC_ID_NONE, 0 }, }; diff --git a/libavformat/mov.c b/libavformat/mov.c index 24de5429d1..8a4cdc4b43 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -49,6 +49,7 @@ #include "libavcodec/ac3tab.h" #include "libavcodec/flac.h" #include "libavcodec/mpegaudiodecheader.h" +#include "libavcodec/mlp_parse.h" #include "avformat.h" #include "internal.h" #include "avio_internal.h" @@ -6683,6 +6684,38 @@ static int mov_read_dops(MOVContext *c, AVIOContext *pb, MOVAtom atom) return 0; } +static int mov_read_dmlp(MOVContext *c, AVIOContext *pb, MOVAtom atom) +{ + AVStream *st; + unsigned format_info; + int channel_assignment, channel_assignment1, channel_assignment2; + int ratebits; + + if (c->fc->nb_streams < 1) + return 0; + st = c->fc->streams[c->fc->nb_streams-1]; + + if (atom.size < 10) + return AVERROR_INVALIDDATA; + + format_info = avio_rb32(pb); + + ratebits = (format_info >> 28) & 0xF; + channel_assignment1 = (format_info >> 15) & 0x1F; + channel_assignment2 = format_info & 0x1FFF; + if (channel_assignment2) + channel_assignment = channel_assignment2; + else + channel_assignment = channel_assignment1; + + st->codecpar->frame_size = 40 << (ratebits & 0x7); + st->codecpar->sample_rate = mlp_samplerate(ratebits); + st->codecpar->channels = truehd_channels(channel_assignment); + st->codecpar->channel_layout = truehd_layout(channel_assignment); + + return 0; +} + static const MOVParseTableEntry mov_default_parse_table[] = { { MKTAG('A','C','L','R'), mov_read_aclr }, { MKTAG('A','P','R','G'), mov_read_avid }, @@ -6771,6 +6804,7 @@ static const MOVParseTableEntry mov_default_parse_table[] = { { MKTAG('s','t','3','d'), mov_read_st3d }, /* stereoscopic 3D video box */ { MKTAG('s','v','3','d'), mov_read_sv3d }, /* spherical video box */ { MKTAG('d','O','p','s'), mov_read_dops }, +{ MKTAG('d','m','l','p'), mov_read_dmlp }, { MKTAG('S','m','D','m'), mov_read_smdm }, { MKTAG('C','o','L','L'), mov_read_coll }, { MKTAG('v','p','c','C'), mov_read_vpcc },