From patchwork Sun Apr 19 01:07:50 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jun Zhao X-Patchwork-Id: 19080 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 2FBED44A0F0 for ; Sun, 19 Apr 2020 04:08:50 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1390368B7AF; Sun, 19 Apr 2020 04:08:50 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AD98868AE4C for ; Sun, 19 Apr 2020 04:08:48 +0300 (EEST) Received: by mail-pj1-f50.google.com with SMTP id q16so3574316pje.1 for ; Sat, 18 Apr 2020 18:08:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=wCuQzIC9ve/PG3Q0y2jtAlROSjp8k+nel1mUNkd6YH8=; b=oDcTm0IhT1wW55dHRc36UYPQxHes1d0PMWLBUBSUbUolCpOwZFXNUZNjIsNuafXn4P 4Kl1I5M4CJz65qC5FWjR/ZH2cc1YcNWt6TIAnzIS+d8vA4OcfnZI78hbRYQ0HBmtt7e4 Kmz6SLjoL3GsI8FD9e7CoV2q5kBXco3exYxAVB5pafMrAagdeN4ulEBZMVPHbUV+p4r3 X+707MVruhC1aBh7LwvTnoWF7LYzl+STO/8kVwmApbj74LgFE4SQ9Olg+BwqUUG97iK2 nDUpiLBp471RP1I8uR5KWQ5/IpxRmYc9pSOWs9MMPEeF3qRCMp6AgKVouEY09n+TfM8X 2bcg== 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:in-reply-to :references; bh=wCuQzIC9ve/PG3Q0y2jtAlROSjp8k+nel1mUNkd6YH8=; b=udZW0LUs9dRzb5T4YaHo55cY07OPo1SkKqKIsBW60XllFtai99UpbQlyJi+vovCSrF F4oAKuSb+WKOo8XVDcU2U/z9LYJW54atDo9IcvWWcUC9uUmW2CS/7NBAuEunbw3QQiBd WW/pktCYmz2EYYRsg7bGbFd0WVeB7goZbu4f+VG+lghg4ytRz8B9KtFfFEKbsTq7emYy LjbOX7senv5QxPMgJMJ45nCzAw7eRGhrVwgfDbYM/WXwXdrTgH+joJY/5eHQmD8z7zer xNK77bLMWUA5zJ6BrkYGzFEO+ymCgxjavtY/1uPGtk3r1jDHrk0ye6dTyB9QqWLI5frZ 4nJA== X-Gm-Message-State: AGi0PuZpC/5eniQ3Kb2I43dID6FRL/Lftj4B9C4wNT/oqhbZOuGCjSjR n9Rh160aQgU18Gbn26yq/s6w6vxufYU= X-Google-Smtp-Source: APiQypJ2/80rBNwmVZ2oCdZmFlfY3UBgBL4VZOJwnvHo5CLH0uTPeasEkN4WKa6mMEHZvIRgkz3s/w== X-Received: by 2002:a17:902:c202:: with SMTP id 2mr10216210pll.196.1587258526637; Sat, 18 Apr 2020 18:08:46 -0700 (PDT) Received: from localhost.localdomain ([49.51.162.193]) by smtp.gmail.com with ESMTPSA id e11sm23498535pfl.65.2020.04.18.18.08.43 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 18 Apr 2020 18:08:45 -0700 (PDT) From: Jun Zhao To: ffmpeg-devel@ffmpeg.org Date: Sun, 19 Apr 2020 09:07:50 +0800 Message-Id: <1587258489-17189-8-git-send-email-mypopydev@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1587258489-17189-1-git-send-email-mypopydev@gmail.com> References: <1587258489-17189-1-git-send-email-mypopydev@gmail.com> Subject: [FFmpeg-devel] [PATCH v4 7/7] lavf/movenc: enable dvcC/dvvC box support from DOVI sidedata 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: Jun Zhao MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Jun Zhao enable dvcC/dvvC box support from DOVI sidedata. Signed-off-by: Jun Zhao --- libavformat/movenc.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index bf3e4fa..10aee5f 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -51,6 +51,7 @@ #include "libavutil/pixdesc.h" #include "libavutil/stereo3d.h" #include "libavutil/timecode.h" +#include "libavutil/dovi_meta.h" #include "libavutil/color_utils.h" #include "hevc.h" #include "rtpenc.h" @@ -1814,6 +1815,36 @@ static int mov_write_sv3d_tag(AVFormatContext *s, AVIOContext *pb, AVSphericalMa return update_size(pb, sv3d_pos); } +static int mov_write_dvcc_dvvc_tag(AVFormatContext *s, AVIOContext *pb, AVDOVIDecoderConfigurationRecord *dovi) +{ + avio_wb32(pb, 32); /* size = 8 + 24 */ + if (dovi->dv_profile > 7) + ffio_wfourcc(pb, "dvvC"); + else + ffio_wfourcc(pb, "dvcC"); + avio_w8(pb, dovi->dv_version_major); + avio_w8(pb, dovi->dv_version_minor); + avio_wb16(pb, (dovi->dv_profile << 9) | (dovi->dv_level << 3) | + (dovi->rpu_present_flag << 2) | (dovi->el_present_flag << 1) | + dovi->bl_present_flag); + avio_wb32(pb, (dovi->dv_bl_signal_compatibility_id << 28) | 0); + + avio_wb32(pb, 0); /* reserved */ + avio_wb32(pb, 0); /* reserved */ + avio_wb32(pb, 0); /* reserved */ + avio_wb32(pb, 0); /* reserved */ + av_log(s, AV_LOG_DEBUG, "DOVI in %s box, version: %d.%d, profile: %d, level: %d, " + "rpu flag: %d, el flag: %d, bl flag: %d, compatibility id: %d\n", + dovi->dv_profile > 7 ? "dvvC" : "dvcC", + dovi->dv_version_major, dovi->dv_version_minor, + dovi->dv_profile, dovi->dv_level, + dovi->rpu_present_flag, + dovi->el_present_flag, + dovi->bl_present_flag, + dovi->dv_bl_signal_compatibility_id); + return 32; /* 8 + 24 */ +} + static int mov_write_clap_tag(AVIOContext *pb, MOVTrack *track) { avio_wb32(pb, 40); @@ -2147,11 +2178,15 @@ static int mov_write_video_tag(AVFormatContext *s, AVIOContext *pb, MOVMuxContex if (track->mode == MODE_MP4 && mov->fc->strict_std_compliance <= FF_COMPLIANCE_UNOFFICIAL) { AVStereo3D* stereo_3d = (AVStereo3D*) av_stream_get_side_data(track->st, AV_PKT_DATA_STEREO3D, NULL); AVSphericalMapping* spherical_mapping = (AVSphericalMapping*)av_stream_get_side_data(track->st, AV_PKT_DATA_SPHERICAL, NULL); + AVDOVIDecoderConfigurationRecord *dovi = (AVDOVIDecoderConfigurationRecord *) + av_stream_get_side_data(track->st, AV_PKT_DATA_DOVI_CONF, NULL);; if (stereo_3d) mov_write_st3d_tag(s, pb, stereo_3d); if (spherical_mapping) mov_write_sv3d_tag(mov->fc, pb, spherical_mapping); + if (dovi) + mov_write_dvcc_dvvc_tag(s, pb, dovi); } if (track->par->sample_aspect_ratio.den && track->par->sample_aspect_ratio.num) {