From patchwork Mon Jan 29 02:40:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ray Tiley X-Patchwork-Id: 7438 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.156.27 with SMTP id q27csp3439618jak; Sun, 28 Jan 2018 18:40:34 -0800 (PST) X-Google-Smtp-Source: AH8x225aNtoIEz74GQgYMTc+PK07/rL/OOa2wVxnHyLQcUxJ6kj+0JDuSUGt7Qr8kYvjFi/Cbs73 X-Received: by 10.223.138.194 with SMTP id z2mr7585773wrz.230.1517193634367; Sun, 28 Jan 2018 18:40:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1517193634; cv=none; d=google.com; s=arc-20160816; b=eNTnjdmAGxALOrhb4GcBdaEdZ9MELA1rrzkuX8QvEUoU1j7JdlPa1pVR1bPSq6U5cA GqtjHifIRThTQe+YS3pWJiMLPQJXGQ32paNapHCuG76ybE0LUwvjU3RwxgXVr8ip7YEn 6HDv/TMW1wsjFDXeG2qNFrMOROp5yOyqhBek31A7FezzvHinbItypSAKVXStfSf0+YtW 1kkjUhc7ry8pwx2HYY8y1oo2/tg73SZWhll5xaP7dSVeY09lizCMvcjalX4SWdL+tvMg ItO4aC1clCB5sK3xTZHZI+MTpvDj9me4+N9lGj7uOHB0/QeRdGDapvetM9HB48LAcbz7 i11Q== 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=GgwrSEJx37gNrG2zW/lIMRLJfnnjFGDljewHgE2goss=; b=u1Xq7k3K3j3qxXmbH5v7SVDrl/QhOPPhaD9E6dJ3fmoTjd47YVII5YiygfHmIl4epV +mVy681EVGRJ5CMK1vBtQ57db7qYkKYnz0Yc0IPWKCtnC7l9aBVi+JgK9WpzCiHFYtNU hk7Cuh+gm2H/2oKJUP2cIimf/t/oyiScrSxefR4f0nlUfP+5U+3KtT3AGUuTtM8GR9Yr hxo5cxN40sRxJKmBWR8DFF65aU/NP4ecHeMvrOOj3FPCM8dZXVewC9XrRtu7G3Mp8vij amp8zFp4IAOsczjK7TRRgc7QeD0Frsf5qBNW19+qFrIOpvK7TtEszEGiY1nbdL9mgsb3 /f0w== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=QChNgMw/; 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=NONE 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 b52si9746861wrd.188.2018.01.28.18.40.33; Sun, 28 Jan 2018 18:40:34 -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=QChNgMw/; 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=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 9D508680475; Mon, 29 Jan 2018 04:40:27 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk0-f193.google.com (mail-qk0-f193.google.com [209.85.220.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1E6116802AA for ; Mon, 29 Jan 2018 04:40:21 +0200 (EET) Received: by mail-qk0-f193.google.com with SMTP id i141so3799564qke.0 for ; Sun, 28 Jan 2018 18:40:25 -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=v4uQbqmp9CKKnWMErzZSMqKHVM6VoCuR2W8gNjFJD/I=; b=QChNgMw/1QLd6ibeTPVtOUmbFyiGkt0IEjyvxAQ2Lv0EMPbMLP+ZSqz27C8gxSGtyW gt4cxAeBMb2X4SiJUlDyuh3GBAzDdFM8g3X98JKkcjj/1g36viJ6sruuHsVdhQDfk9Bz uZ9vCfixQxjJq4WGtx0g6mUjeMYrrWntx+PRPCKpSMoSCvlTTULdJbQbB8zxwt2rvxCx tFa8VSkMvHfiYJUCs+C5UauK4DLmxvdywx5hB7797/9iSc5XEA4Itp7+XLjmckAfhuwG sc6ghTkQtbJqnrglWY3VcNw300XZQIsCV1FIU0Ut5wAnA4xjlHduw+cNolNTmp50IsNp 94xQ== 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=v4uQbqmp9CKKnWMErzZSMqKHVM6VoCuR2W8gNjFJD/I=; b=ivBm6bbcAbf/JmBE1kx8yzbKTLf1VZlsFMfNtRzria2ECtTUlOpVeLXK6Sg2LALTWx k3xB94xOGOWgli2JxZiNm8+UN5NpIlRpIKuQyYFhuuB30GGQrnKxM1+GBGkatW1QXmmg vMDQDOmt4cmv8EWWs2aqr71mK8BGyZlal6or/QVH3AqctS8QO8AH9YqQ1pcjwmokvfn9 R+Xr9d1KAgxhsViZQNQGO9llEs2tLbzrHwIbEdHBalRyNYCzeCf1jiFhVPl0h3nVOo82 4AhCjnqJVn54O5Wy9x6CAkWujaEqMn9B45XOgPB30YyXBw4ZsTaNSyDbXJx5ZWUZlTuU kKyg== X-Gm-Message-State: AKwxytfcorNyxtaGbE52hW/bZBv4zmeyOJHM3Z0LfzcOmppDs5IbcMBc jUXjHX62AAB9RM4MvecpaEmyu+KJ X-Received: by 10.55.136.133 with SMTP id k127mr33668968qkd.47.1517193624251; Sun, 28 Jan 2018 18:40:24 -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 q2sm7097745qki.26.2018.01.28.18.40.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 28 Jan 2018 18:40:23 -0800 (PST) From: Ray Tiley To: ffmpeg-devel@ffmpeg.org Date: Sun, 28 Jan 2018 18:40:05 -0800 Message-Id: <1517193605-12417-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 | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/libavdevice/decklink_dec.cpp b/libavdevice/decklink_dec.cpp index 94dae26..c7811eb 100644 --- a/libavdevice/decklink_dec.cpp +++ b/libavdevice/decklink_dec.cpp @@ -149,6 +149,30 @@ 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 / 6; i++) { + *dst++ = src[0] + ((src[1] & 3) << 8); + *dst++ = (src[1] >> 2) + ((src[2] & 15) << 6); + *dst++ = (src[2] >> 4) + ((src[3] & 63) << 4); + + *dst++ = src[4] + ((src[5] & 3) << 8); + *dst++ = (src[5] >> 2) + ((src[6] & 15) << 6); + *dst++ = (src[6] >> 4) + ((src[7] & 63) << 4); + + *dst++ = src[8] + ((src[9] & 3) << 8); + *dst++ = (src[9] >> 2) + ((src[10] & 15) << 6); + *dst++ = (src[10] >> 4) + ((src[11] & 63) << 4); + + *dst++ = src[12] + ((src[13] & 3) << 8); + *dst++ = (src[13] >> 2) + ((src[14] & 15) << 6); + *dst++ = (src[14] >> 4) + ((src[15] & 63) << 4); + + src += 16; + } +} + static uint8_t calc_parity_and_line_offset(int line) { uint8_t ret = (line < 313) << 5; @@ -741,7 +765,11 @@ HRESULT decklink_input_callback::VideoInputFrameArrived( 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()); + if (ctx->bmd_mode == bmdModeNTSC) { + unpack_v210(luma_vanc, buf, videoFrame->GetWidth()); + } else { + extract_luma_from_v210(luma_vanc, buf, videoFrame->GetWidth()); + } txt_buf = get_metadata(avctx, luma_vanc, videoFrame->GetWidth(), txt_buf, sizeof(txt_buf0) - (txt_buf - txt_buf0), &pkt); }