From patchwork Sat Oct 1 18:15:19 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chris Landry X-Patchwork-Id: 812 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.140.66 with SMTP id o63csp836041vsd; Sat, 1 Oct 2016 11:15:37 -0700 (PDT) X-Received: by 10.194.122.103 with SMTP id lr7mr11348567wjb.127.1475345737919; Sat, 01 Oct 2016 11:15:37 -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 s139si11057873wmb.37.2016.10.01.11.15.37; Sat, 01 Oct 2016 11:15:37 -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=@gmail.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=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2C0B268A0B7; Sat, 1 Oct 2016 21:15:22 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-it0-f67.google.com (mail-it0-f67.google.com [209.85.214.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BAB28689DD0 for ; Sat, 1 Oct 2016 21:15:15 +0300 (EEST) Received: by mail-it0-f67.google.com with SMTP id o19so3653462ito.3 for ; Sat, 01 Oct 2016 11:15:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=7ijTm7Z+N8p5/skd7TQK3/roJNgtu9TPwUm6e3ykUy8=; b=jYJvYhLxt5RriJwKA+eS+0Z4L5zjoljaPaubaTLt/ruivNZHzzAQF/Zjy5KYbI8eNC jCA1/JvncbRsy6y1W/QfX9hrz7448gkB1u0JSphwFxZegnXJp/nLMj85miu9Bk54Fyn0 hITm2XsVeS/fMQC3lPvvje4XTnJWA+wnubS+ePrVi6D94iNpr60vh6w6snsGv2cE7r5V T7mDiOtwl026cAFtaI0FkFIAJW/kQTcMj5rA0W39pHllQKl6LZ7V1oZr4rWnp9uV3VOo cqvHQdoPWRAg8J6ZkWznIEEBp3PkxAYEcZ72E9DQGs4erv/3ZhVe0hwl6BdA6jmann6p vqRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=7ijTm7Z+N8p5/skd7TQK3/roJNgtu9TPwUm6e3ykUy8=; b=GdpqL9/0tAhK0d1ZIA0kucfZJVClMLI0C5JsMrpQuYKRztFKpujBxMESmolA9+f2g5 QZE6ip1rS2pdpvDkbzPdZ58CE33t8AVgNDDwkpgEWhXDxAWXDD2VbL7zPQUVDXFu8qOa F3pzgOQZuvmsXF33IUaNOoxL6NImHjYe36DqOj/qfhl5vAFTxtVW86Y6ffxIs/jIkW6X jiE9htYMz5rn8qEo5nZt/fSgwiokqEEeucnC60mOuVr2U4DIQIAj0jtYxJxkRjTusNrP dcZWapiQRrdNH7b4xKGoFaoAImnd/nuBeMvgKY/ocFzR5P++w5MFrfyO5JvEUcCXjjiW YxnQ== X-Gm-Message-State: AA6/9RnbNXP/tOQ4js+kn4IcOMWHhFHLpFP9sZvGOmAhfTXH/fdRhwA+qVASn7fUZ1pHqA== X-Received: by 10.36.67.5 with SMTP id s5mr10302978itb.30.1475345727895; Sat, 01 Oct 2016 11:15:27 -0700 (PDT) Received: from localhost.localdomain (CPE84948c99c101-CM84948c99c100.cpe.net.cable.rogers.com. [72.137.151.112]) by smtp.gmail.com with ESMTPSA id k67sm9982194iod.11.2016.10.01.11.15.27 (version=TLS1 cipher=AES128-SHA bits=128/128); Sat, 01 Oct 2016 11:15:27 -0700 (PDT) From: Chris Landry X-Google-Original-From: Chris Landry To: chris.landry@vidyard.com, ffmpeg-devel@ffmpeg.org Date: Sat, 1 Oct 2016 14:15:19 -0400 Message-Id: <1475345719-71314-1-git-send-email-topher.p.landry@gmail.comm> X-Mailer: git-send-email 2.8.2 Subject: [FFmpeg-devel] [PATCH] libavdevice/lavfi.c: adjust subcc_packet->pts to be in 90 timebase 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: Chris Landry MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Chris Landry When a video stream timebase is not 90k, the cc packet pts is relevant to the timebase of the video stream, but later is assumed to be 90k. Adjust it here to be 90k so timing is accurate in resulting subs. Signed-off-by: Chris Landry --- libavdevice/lavfi.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/libavdevice/lavfi.c b/libavdevice/lavfi.c index f9b2694..ffe5e0e 100644 --- a/libavdevice/lavfi.c +++ b/libavdevice/lavfi.c @@ -58,6 +58,7 @@ typedef struct { AVFrame *decoded_frame; int nb_sinks; AVPacket subcc_packet; + AVRational video_time_base; } LavfiContext; static int *create_all_formats(int n) @@ -317,6 +318,8 @@ av_cold static int lavfi_read_header(AVFormatContext *avctx) st->codecpar->codec_type = link->type; avpriv_set_pts_info(st, 64, link->time_base.num, link->time_base.den); if (link->type == AVMEDIA_TYPE_VIDEO) { + lavfi->video_time_base = link->time_base; + st->codecpar->codec_id = AV_CODEC_ID_RAWVIDEO; st->codecpar->format = link->format; st->codecpar->width = link->w; @@ -373,8 +376,14 @@ static int create_subcc_packet(AVFormatContext *avctx, AVFrame *frame, if ((ret = av_new_packet(&lavfi->subcc_packet, sd->size)) < 0) return ret; memcpy(lavfi->subcc_packet.data, sd->data, sd->size); + + AVRational time_base = lavfi->video_time_base; + + double adjust_factor = time_base.den / (90000.0 * time_base.num); + double pts = frame->pts / adjust_factor; + lavfi->subcc_packet.stream_index = stream_idx; - lavfi->subcc_packet.pts = frame->pts; + lavfi->subcc_packet.pts = (int64_t)pts; lavfi->subcc_packet.pos = av_frame_get_pkt_pos(frame); return 0; }