From patchwork Thu Aug 31 08:36:48 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Jeyapal, Karthick" X-Patchwork-Id: 4916 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.15.201 with SMTP id 70csp1373710jao; Thu, 31 Aug 2017 01:37:11 -0700 (PDT) X-Google-Smtp-Source: ADKCNb70JvbQ5SSUljsMszLPitSOSD6Qv44sOTXpQkKBtYfzgb9y2IcrHf6IYpUY2ez7S1JM+Sc3 X-Received: by 10.223.192.14 with SMTP id z14mr2590102wre.292.1504168631857; Thu, 31 Aug 2017 01:37:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1504168631; cv=none; d=google.com; s=arc-20160816; b=fJ5McZwpUj47pavuAUwr2QTBH5UAmsvv109a6vLAgLksx5cyB1/NDFGOGxvokRLZbo MnY0KTApLzDII0BJ0aX+KD+eH4XP/GPIqSLJMHnol/8zChN5RNCIPPl+FxzU9DyTi1wg 57QbkBKhDJ3GRDEtJdyxZVbxi1s9tKFglNquEgG9JGWA+MCeVCtuBOQ8FfrPVHdgSjVn yz7kqlU6RZhh0SMvThEFE4lOvDSiewXGt7UnP1+ckVixWoq6k5PnPtvBpBR9MVuIaGIn +oEkmQNvTck4KWJY35LPiYKYXNdOmS7Q5mIB8T+IZTpfi6sOkZW1QGXzi+qExeo3AePP G1eg== 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:feedback-id:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to :arc-authentication-results; bh=s5oKgZfgY7uOwTMHKsFMnqUliz0/gzPtTpH0yepq80I=; b=LmwP0uYzSUiURKKKWdqnY8/qx6eqah4/0c6pL5pD4nFPn1hnXuFsxFZBaL+3vS95eH vvpe0AAFxcXF/gBFsb2vS7pSwnI2pqytGdTihyFLWtZWGEsoHwuXS6goTWlG8kDSGebN u1Z1R5u+//W5bRAR+mwULwXLwzB6/cvlJGlu2v7NdG4ohgBfJvpUjNeZOO7E3JFcz0qK V5zHxQw384pmaYiNiia/26LtxNddd8i5kqitlgeiLPO7Xv5Y1fwU3lTa+LfsDsu6Mmv4 e5YKaLoJ3Ga7Pef5dFnwXBcdPdqahdpQz33bTBhdEkSBKftFVUuHbg0xABl2QXvrEX6W 3yMA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@smtpservice.net header.s=m78bu0.a1-4.dyn header.b=vR+I3yQU; 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=QUARANTINE sp=NONE dis=NONE) header.from=akamai.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id r132si4737566wmd.35.2017.08.31.01.37.10; Thu, 31 Aug 2017 01:37:11 -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=@smtpservice.net header.s=m78bu0.a1-4.dyn header.b=vR+I3yQU; 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=QUARANTINE sp=NONE dis=NONE) header.from=akamai.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BEC6468A1C5; Thu, 31 Aug 2017 11:37:06 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from a1i844.smtp2go.com (a1i844.smtp2go.com [43.228.187.76]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EEB976891FC for ; Thu, 31 Aug 2017 11:37:04 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=smtpservice.net; s=m78bu0.a1-4.dyn; x=1504190226; h=Feedback-ID: X-Smtpcorp-Track:Message-Id:Date:Subject:To:From:Reply-To:Sender: List-Unsubscribe; bh=5HnqR9XhBCSSopQvjyHxTOxFyfVgW0g8ivYTLoEt9zo=; b=vR+I3yQU fdc+99fe1NeNax2O7gw6kcbZxz/HWzNZK373QScs31fNq29o1r88zsRifK5dFYYN+E1TJCOfCXVcW Xcz7D/ubwT84dpi76Qt+Moxy4Mnvo5LHuKgQKotGz291iskoS3cqnWoBl0WZ9VhU2iSsxlmibgiHN HjBpY/1PKZmW208xFeSILPfRMNYKACKp6d18j+Ols5OWwKkpjYtlccoCFhwwmAWPhblDCWj73mUZQ YWF2RcJOJzfi+ado+fF6/SnfwQqB04KfvrdCxeKxS++DnQmS14+xV8A+G9ZjgRkxaKhR4Q8BSTJF5 MzT53qJDi33dg6gogwoKee6FnQ==; From: kjeyapal@akamai.com To: ffmpeg-devel@ffmpeg.org Date: Thu, 31 Aug 2017 14:06:48 +0530 Message-Id: <1504168610-2427-2-git-send-email-kjeyapal@akamai.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1504168610-2427-1-git-send-email-kjeyapal@akamai.com> References: <1504168610-2427-1-git-send-email-kjeyapal@akamai.com> X-Smtpcorp-Track: 1dnKyD4ba63Y8E.p4qsQzulm Feedback-ID: 337386m:337386asVRLGB:337386s6oJXg8ygL:SMTPCORP X-Report-Abuse: Please forward a copy of this message, including all headers, to Subject: [FFmpeg-devel] [PATCH 2/4] avdevice/decklink_dec: Extraction of luma from V210 VANC modularized 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: Karthick J MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Karthick J In preparation to support multiple VANC data decode Signed-off-by: Karthick J --- libavdevice/decklink_dec.cpp | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/libavdevice/decklink_dec.cpp b/libavdevice/decklink_dec.cpp index 40ef655..0b88fc8 100644 --- a/libavdevice/decklink_dec.cpp +++ b/libavdevice/decklink_dec.cpp @@ -106,6 +106,18 @@ static void get_vanc_lines(int bmd_field_dominance, int height, int *field0_vanc } } +/* The 10-bit VANC data is packed in V210, we only need the luma component. */ +static void extract_luma_from_v210(uint16_t *dst, const uint8_t *src, int width) +{ + int i; + for (i = 0; i < width / 3; i += 3) { + *dst++ = (src[1] >> 2) + ((src[2] & 15) << 6); + *dst++ = src[4] + ((src[5] & 3) << 8); + *dst++ = (src[6] >> 4) + ((src[7] & 63) << 4); + src += 8; + } +} + static uint8_t calc_parity_and_line_offset(int line) { uint8_t ret = (line < 313) << 5; @@ -221,19 +233,10 @@ static uint8_t* teletext_data_unit_from_ancillary_packet(uint16_t *py, uint16_t return tgt; } -static uint8_t* teletext_data_unit_from_vanc_data(uint8_t *src, uint8_t *tgt, int64_t wanted_lines) +static uint8_t* teletext_data_unit_from_vanc_data(uint16_t *py, uint8_t *tgt, int64_t wanted_lines) { - uint16_t y[1920]; - uint16_t *py = y; - uint16_t *pend = y + 1920; - /* The 10-bit VANC data is packed in V210, we only need the luma component. */ - while (py < pend) { - *py++ = (src[1] >> 2) + ((src[2] & 15) << 6); - *py++ = src[4] + ((src[5] & 3) << 8); - *py++ = (src[6] >> 4) + ((src[7] & 63) << 4); - src += 8; - } - py = y; + uint16_t *pend = py + 1920; + while (py < pend - 6) { if (py[0] == 0 && py[1] == 0x3ff && py[2] == 0x3ff) { // ancillary data flag py += 3; @@ -570,8 +573,10 @@ HRESULT decklink_input_callback::VideoInputFrameArrived( for (i = 0; i <= vanc_end; i++) { uint8_t *buf; if (vanc->GetBufferForVerticalBlankingLine(i, (void**)&buf) == S_OK) { + uint16_t luma_vanc[4096]; // Allocated for highest width (4K) + extract_luma_from_v210(luma_vanc, buf, videoFrame->GetWidth()); if (videoFrame->GetWidth() == 1920) { - txt_buf = teletext_data_unit_from_vanc_data(buf, txt_buf, ctx->teletext_lines); + txt_buf = teletext_data_unit_from_vanc_data(luma_vanc, txt_buf, ctx->teletext_lines); if (txt_buf - txt_buf0 > 1611) { // ensure we still have at least 1920 bytes free in the buffer av_log(avctx, AV_LOG_ERROR, "Too many OP47 teletext packets.\n"); break;