From patchwork Sat Oct 1 03:02:32 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chris Landry X-Patchwork-Id: 799 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.140.66 with SMTP id o63csp557757vsd; Fri, 30 Sep 2016 20:15:49 -0700 (PDT) X-Received: by 10.195.30.11 with SMTP id ka11mr9655482wjd.88.1475291749248; Fri, 30 Sep 2016 20:15:49 -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 lz10si24254887wjb.294.2016.09.30.20.15.48; Fri, 30 Sep 2016 20:15:49 -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 2B85868A037; Sat, 1 Oct 2016 06:15:33 +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 E159D689FFF for ; Sat, 1 Oct 2016 06:15:26 +0300 (EEST) Received: by mail-it0-f67.google.com with SMTP id l13so4140721itl.2 for ; Fri, 30 Sep 2016 20:15:40 -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=pEpIB/c2c+60cBKxd2/XMWQAjBXTHEpIYcbsA2m0/AfE7LOeQhLY0jww5qiGcxNR2z xtDPNFFaAzSJjbaR/xS5ZIebzEakKnnCZ4D2Mo5uHKmhvE9tihpMPYJLCudR387NCCAA AiHglhg0k9yAFaRQY/yqDrYBzKvvsLz1boKgd+M0o4l+MJJLHcfQ+KscWcR0Ai6n++EG +N1NOM1iWF8dA0zhK2UR2p5dO4bfBjZjGkl1zYLy2ax2uMAkbRkPUmfsimXNjwoYPGXx 8lJmVXP2WGxnP7EoX6fIuPWaeIuIZLKl9NtfAPpoJNmBrCDuco1/MinwHH4XEyavd+mp js3A== 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=dWywukSav5iGYeAh/xrjbr1jvFTiuWkWwqymIetMfDeAXdBlZpjp77fpgQ7IlBggCZ ugDdla+bcKadFZYV9mRLZGuhfCWnX5c59WuFgBX5CqHvWv15CFx45KXZC/SqHm1SWO9L UmDRmrCjE5zxd1TQKOTYNTaF054DcaI+MBwx7f6taKXtgn2c8o5Fko8BEG+qLIW0hWlo MhUj3nIsNtgpJ4iisMWoIMsMRBCi6pi2oROSHtnkQ9d7NKj7vMR25aOUqfobMb28dQJr rrino8GbkYezJIHJMM7MRq7aTEUhYCRTyr9V9cyb+ZSAEsRQDkKaJkZ36OZj1R1YVAsq PNPw== X-Gm-Message-State: AA6/9RkZIARnLF1J42kzHjuNQM9zj0fJV2B7sco0KAX2+dcuGDVNpr9gNjiMLrWgzPjzmA== X-Received: by 10.36.0.19 with SMTP id 19mr8335100ita.107.1475290965558; Fri, 30 Sep 2016 20:02:45 -0700 (PDT) Received: from localhost.localdomain (CPE84948c99c101-CM84948c99c100.cpe.net.cable.rogers.com. [72.137.151.112]) by smtp.gmail.com with ESMTPSA id n6sm8037289ioe.7.2016.09.30.20.02.41 (version=TLS1 cipher=AES128-SHA bits=128/128); Fri, 30 Sep 2016 20:02:42 -0700 (PDT) From: Chris Landry X-Google-Original-From: Chris Landry To: ffmpeg-devel@ffmpeg.org Date: Fri, 30 Sep 2016 23:02:32 -0400 Message-Id: <1475290952-70635-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; }