From patchwork Mon Feb 12 00:16:45 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ray Tiley X-Patchwork-Id: 7558 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.150.1 with SMTP id c1csp3426731jai; Sun, 11 Feb 2018 16:22:50 -0800 (PST) X-Google-Smtp-Source: AH8x226sbxldVWv21njJogyb0cq9k2XwHU6KqABJ3Z6V5oeBGOJuNssvTJ5W6352mXsOV/Q2O++K X-Received: by 10.223.196.129 with SMTP id m1mr7774654wrf.256.1518394970263; Sun, 11 Feb 2018 16:22:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1518394970; cv=none; d=google.com; s=arc-20160816; b=THe52cF/P2jFDszy6vatP0UoapxxPgpsNc3d0CH18e427Nn+IT2/ynz+q/P/rPp69A OhmJRlSGfGRDoismQWciyLGGmQuVNYPKTwyHzqoYBD+JILP1iu/f8ZqYpTwUnbBP5UV6 +epnRCe4f6MnOdrvR2KwGpe8MRkXPK5iI/Vsa7Bwx71iI/p0vDn/4OTZ/SjyNrVXaOey M6PBok972TxV1skt2ZEBXiEBMOdj1pLonwneLAWyF0Z/m/SStHEyLMqK9qdn16iKAOS3 6jaf1m+hUe0KwpkA8oAo+l9el1xhCWbv2R1YDrBIeneCekkkwVjaXM6n2NkfIpegIm08 HCZQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to:arc-authentication-results; bh=tNaMylEYuo+tFp08GVeduaOJWIZNzuhRATSjq9e6eEQ=; b=Coy1MjCqfMck90acr+ttRAsqnApO9+96x2ngxXeK3xu7NPSmGGdWhxIIbawdamR2Hf BlrwCbkzTe+9D2nbKU2xAnOwKUCkiV8kyJ/4qNOxLPOCOSJ8+L5WKrYMDlx4ImpZ+dYM fPQ0dlugdFWzWtTtLY47J1nyphI33Fh01/6vt3BeDdsaixSbfx6ajL1auUVaU6DytPGY PCtxEr/WSte3bjd+pu8ZLvQsRQi9bnqzNCuLUBIs8B5P2+ddVvwAIucXV+YEuw+c+j8U o4WP518yrWrnM4WM91HxrZCnxoajN1vbBRQLcra6xArg+caw2kRFBn8qvFPPGxUmynfK 7nkQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=OsP4is8Q; 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 sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id k5si2960061wmg.177.2018.02.11.16.22.49; Sun, 11 Feb 2018 16:22:50 -0800 (PST) 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 header.s=20161025 header.b=OsP4is8Q; 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 sp=QUARANTINE 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 4ECDA68077A; Mon, 12 Feb 2018 02:22:37 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt0-f195.google.com (mail-qt0-f195.google.com [209.85.216.195]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E4F8168049B for ; Mon, 12 Feb 2018 02:22:30 +0200 (EET) Received: by mail-qt0-f195.google.com with SMTP id z10so17124811qti.5 for ; Sun, 11 Feb 2018 16:22:41 -0800 (PST) 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=omcCnupjYppId5mbeLt+CnUxFEXh6fZNWu4L02JV0iU=; b=OsP4is8QI8eXRg6wYftMK/9245Al7zv+Ih1TLGvg+q7oHVLOpvEsoZejLUXQL6xwHP 4LRg/l5lNiDAwiieBI/Ba7tukz/B/W6RiEfTR1pRnkY4LLfjhou90Ea41qD44LTm35kP n4VPs0O8LJnGjzYiFxlvIxjvfYlt/wBEgcyVZZb2Rjqb1abn7jPy5EPt5B7TmSrxsRYF AwYW1JwBEdreLHdXHP6Jw0zPc9M9orEF52afUV+mYhy8+/JhsGURl67n3FTTURtvC4SI 6Lfx1WqS/D4wt+n/AMi/XKFckBjmIBaZw7HWlShBBy/f1tAMZ4swV7h/S9fh/4350Usx x9Bg== 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=omcCnupjYppId5mbeLt+CnUxFEXh6fZNWu4L02JV0iU=; b=M7XnkrHZEIJItuuh11/cYaOgwdoFVoj0DadqyNF5Hc1xrk8aQllKvGZ+WxL4MzOkqu 1gayA7dZwfI90YK4gg3oBAJCdER6yvs8ftknC0Pou89jzd8QDxCZoHsrW+1r4yQgtvgv rmPGtGUs66N+eQ3bsQXOLznI7N6yjFQwpoHmRRxNUIDTtTk9bcS5xEPtJ8fGQ3Ik72aa 2BcmmDw1DIZvzJsqrs6pYMwd2oTThB64qZHxDSEA2cxmnsq+V5t4U+/nHF6pAUwecC0q kWvYMerkJ+sLBvQS9ZFyDv8f0o5rKZcBLh2soO858KUVVzbtVjCAjIP71mxBVrapQzla exsw== X-Gm-Message-State: APf1xPDx20OngaJULQXLCiGMnriApKQgfeXUWkr76olZqSrepHo/FNKH TZte+nnVajmJkCKEz239ePOEbgFO X-Received: by 10.200.82.21 with SMTP id r21mr2874620qtn.75.1518394638155; Sun, 11 Feb 2018 16:17:18 -0800 (PST) Received: from ubuntu.maine.rr.com (cpe-45-46-43-229.maine.res.rr.com. [45.46.43.229]) by smtp.gmail.com with ESMTPSA id y188sm5385778qke.55.2018.02.11.16.17.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 11 Feb 2018 16:17:17 -0800 (PST) From: Ray Tiley To: ffmpeg-devel@ffmpeg.org Date: Sun, 11 Feb 2018 16:16:45 -0800 Message-Id: <1518394605-62027-1-git-send-email-raytiley@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: References: Subject: [FFmpeg-devel] [PATCH] avdevice/decklink_dec: Extract NTSC VANC 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: Ray Tiley MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" This changes how NTSC VANC is extracted from the buffer. In NTSC the vanc data interleved between the uyvy and not just the luma as in high definition resolutions. In my testing this allows a decklink card encoding valid NTSC closed captions to pass the caption data to the x264 encoder. Updated with rewviews from Devon Heitmueller and Marton Balint. Signed-off-by: Ray Tiley --- libavdevice/decklink_dec.cpp | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/libavdevice/decklink_dec.cpp b/libavdevice/decklink_dec.cpp index 5c116f2..c3bb46e 100644 --- a/libavdevice/decklink_dec.cpp +++ b/libavdevice/decklink_dec.cpp @@ -149,6 +149,17 @@ static void extract_luma_from_v210(uint16_t *dst, const uint8_t *src, int width) } } +static void unpack_v210(uint16_t *dst, const uint8_t *src, int width) +{ + int i; + for (i = 0; i < width * 2 / 3; i++) { + *dst++ = src[0] + ((src[1] & 3) << 8); + *dst++ = (src[1] >> 2) + ((src[2] & 15) << 6); + *dst++ = (src[2] >> 4) + ((src[3] & 63) << 4); + src += 4; + } +} + static uint8_t calc_parity_and_line_offset(int line) { uint8_t ret = (line < 313) << 5; @@ -752,9 +763,15 @@ HRESULT decklink_input_callback::VideoInputFrameArrived( for (i = vanc_line_numbers[idx].vanc_start; i <= vanc_line_numbers[idx].vanc_end; i++) { uint8_t *buf; if (vanc->GetBufferForVerticalBlankingLine(i, (void**)&buf) == S_OK) { - uint16_t luma_vanc[MAX_WIDTH_VANC]; - extract_luma_from_v210(luma_vanc, buf, videoFrame->GetWidth()); - txt_buf = get_metadata(avctx, luma_vanc, videoFrame->GetWidth(), + uint16_t vanc[MAX_WIDTH_VANC]; + size_t vanc_size = videoFrame->GetWidth(); + if (ctx->bmd_mode == bmdModeNTSC && videoFrame->GetWidth() * 2 <= MAX_WIDTH_VANC) { + vanc_size = vanc_size * 2; + unpack_v210(vanc, buf, videoFrame->GetWidth()); + } else { + extract_luma_from_v210(vanc, buf, videoFrame->GetWidth()); + } + txt_buf = get_metadata(avctx, vanc, vanc_size, txt_buf, sizeof(txt_buf0) - (txt_buf - txt_buf0), &pkt); } if (i == vanc_line_numbers[idx].field0_vanc_end)