From patchwork Tue Mar 24 23:52:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 18388 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 EFEA344ADCE for ; Wed, 25 Mar 2020 01:53:47 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C524868B6B6; Wed, 25 Mar 2020 01:53:47 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f193.google.com (mail-qt1-f193.google.com [209.85.160.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CD6E668B27D for ; Wed, 25 Mar 2020 01:53:41 +0200 (EET) Received: by mail-qt1-f193.google.com with SMTP id m33so663348qtb.3 for ; Tue, 24 Mar 2020 16:53:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=oIlzE2j4IvhHcAsHqFtJEC1TuQhFw2lx9oEEEnb/aFA=; b=T7tVVpOXw2SLwAB46+L71GHxQMHYjZavlQSMWJH6jY/OxlFOUhs2BlcN24PZxe9nAE OC0WbydhYxkbUPIotfpdGXXek6NoZSLyctnEx6W05oskhccE3qizBa/iYVIHi20LBT78 VvaBEq6vWBGN5kJZZszseH3Z8MbmXVnWGrZQHunE9fegOaINAHhgQrSOvfKDuvwiZUKM OyoQk/TA8ISWSTc/ni+YF8J/iDIjhI1iFTGzcWLcaSeucjKjIDi3NLZA9JmxLhZde/90 RX84/T5JU8uFLyyfrh7YePv1xcTcJcw8Teday7Fh9p6saY4GoQ0qWyjfBVOge8Fq+gzQ qhKg== 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:mime-version :content-transfer-encoding; bh=oIlzE2j4IvhHcAsHqFtJEC1TuQhFw2lx9oEEEnb/aFA=; b=DwccD1nF803V0961936RTrOozMy/EXnUx8XO7x0HOgM3xbQJiYY9QyoKYmGVFgTmaX JpzEi12RAWeFnUcN1er270W8cXIXspPTC8L0GqKTOYMltaSsiLx69BuVRpVDjVcMb1vi 5coqICndMuyRYqx/frmFLwPlzUDC8c97HNwEuG51eqvtBTY/s8RBkqBX//n69t3u4b1y NnqeFHXAaAUmz5m8PHKQ8HpPmMsbNKEdi3lYBFB2a5xAPx4Pnib6hWvFtWkzwyf/QTjL du35PGb1ZdO+zTOpnXL2CQ1bcy2MubA8/oDSK/V5vJMSLnlan+xfULAGaCm8M7zIZzlS pnPQ== X-Gm-Message-State: ANhLgQ1wn75UodI8Wh4nXchkdYFRB6fiFcNh7h1GjPKGB9cAOngBoqbH lYrzhXEsUMM7nVpzvxR7glVYL8IL X-Google-Smtp-Source: ADFU+vtHpvGJOP/xw6P5S4iPaLMQ2d4mGiw5f8aq9lGyBn6CCoWJgdtgOvAJRG1cM3f6ctXYoDQ5/Q== X-Received: by 2002:aed:2a87:: with SMTP id t7mr443252qtd.206.1585094020032; Tue, 24 Mar 2020 16:53:40 -0700 (PDT) Received: from localhost.localdomain ([181.23.71.173]) by smtp.gmail.com with ESMTPSA id z1sm15458188qtc.51.2020.03.24.16.53.39 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Mar 2020 16:53:39 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 24 Mar 2020 20:52:57 -0300 Message-Id: <20200324235258.610-1-jamrial@gmail.com> X-Mailer: git-send-email 2.25.2 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avformat/movenc: move the AVProducerReferenceTime struct to MOVTrack 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" We only care about the prft timestamp of the first sample in each chunk, so no need to store every single one within each MOVIentry. Should reduce memory usage. Signed-off-by: James Almer --- libavformat/movenc.c | 23 +++++++++++++---------- libavformat/movenc.h | 3 ++- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 85df5d1374..b748b92314 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -4675,11 +4675,11 @@ static int mov_write_prft_tag(AVIOContext *pb, MOVMuxContext *mov, int tracks) } if (mov->write_prft == MOV_PRFT_SRC_WALLCLOCK) { - if (first_track->cluster[0].prft.wallclock) { + if (first_track->prft.wallclock) { /* Round the NTP time to whole milliseconds. */ - ntp_ts = ff_get_formatted_ntp_time((first_track->cluster[0].prft.wallclock / 1000) * 1000 + + ntp_ts = ff_get_formatted_ntp_time((first_track->prft.wallclock / 1000) * 1000 + NTP_OFFSET_US); - flags = first_track->cluster[0].prft.flags; + flags = first_track->prft.flags; } else ntp_ts = ff_get_formatted_ntp_time(ff_ntp_time()); } else if (mov->write_prft == MOV_PRFT_SRC_PTS) { @@ -5391,10 +5391,8 @@ int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt) AVIOContext *pb = s->pb; MOVTrack *trk = &mov->tracks[pkt->stream_index]; AVCodecParameters *par = trk->par; - AVProducerReferenceTime *prft; unsigned int samples_in_chunk = 0; int size = pkt->size, ret = 0, offset = 0; - int prft_size; uint8_t *reformatted_data = NULL; ret = check_pkt(s, pkt); @@ -5675,11 +5673,16 @@ int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt) trk->has_disposable++; } - prft = (AVProducerReferenceTime *)av_packet_get_side_data(pkt, AV_PKT_DATA_PRFT, &prft_size); - if (prft && prft_size == sizeof(AVProducerReferenceTime)) - memcpy(&trk->cluster[trk->entry].prft, prft, prft_size); - else - memset(&trk->cluster[trk->entry].prft, 0, sizeof(AVProducerReferenceTime)); + if (!trk->entry) { + /* We only want the prft for the first sample in a chunk */ + int prft_size; + AVProducerReferenceTime *prft = + (AVProducerReferenceTime *)av_packet_get_side_data(pkt, AV_PKT_DATA_PRFT, &prft_size); + if (prft && prft_size == sizeof(trk->prft)) + memcpy(&trk->prft, prft, prft_size); + else + memset(&trk->prft, 0, sizeof(trk->prft)); + } trk->entry++; trk->sample_count += samples_in_chunk; diff --git a/libavformat/movenc.h b/libavformat/movenc.h index 997b2d61c0..d394bf757f 100644 --- a/libavformat/movenc.h +++ b/libavformat/movenc.h @@ -56,7 +56,6 @@ typedef struct MOVIentry { #define MOV_PARTIAL_SYNC_SAMPLE 0x0002 #define MOV_DISPOSABLE_SAMPLE 0x0004 uint32_t flags; - AVProducerReferenceTime prft; } MOVIentry; typedef struct HintSample { @@ -160,6 +159,8 @@ typedef struct MOVTrack { MOVMuxCencContext cenc; + AVProducerReferenceTime prft; + uint32_t palette[AVPALETTE_COUNT]; int pal_done;