From patchwork Tue Dec 17 08:15:56 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "fgodtdev@hotmail.com" X-Patchwork-Id: 16846 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 6EAA844B04E for ; Tue, 17 Dec 2019 10:16:22 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4B402688384; Tue, 17 Dec 2019 10:16:22 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from APC01-PU1-obe.outbound.protection.outlook.com (mail-oln040092254106.outbound.protection.outlook.com [40.92.254.106]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 253DF688345 for ; Tue, 17 Dec 2019 10:16:15 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GVxCLknZA3CC7M1n7UL6+ztGipJfJ1wuS/O//dzE0zJrXWq8TxAbr88vSRi3xhHgxNxAAfiPqVpbwVl3qDVg3MxzVRK0kZ7iDwXYBZSeq+G8RfJ90ZzE74E07CnLPWiWbNHm20/ydDmawVOy2Z/QoduqDEJLP6v/8wOdZavGXk2dTE5thx1wz77UwZyq0sfGY0In2Yr4OgXppyHIFHptOMC7GuNTCYWMbSGZgGe8cBvRJuQc8vPyc5+YPNxyWPEOA1cxUFT/J/28KlY6sWio5DtTgchsDNrARuXRyezFu2wNvQT4cSApJAGnVpKpCXOOBQ89yKOTiJatZkS6xRcrWw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7y29lphWxs2fpRRblQ1V2iqaBWdbaKoud2sRSkJY+Lw=; b=ZX7TXVckrsnDGp5JOz80JS6Gk13CdUbgOmlJ1Rksn9MJrIFCF0hSZKCAztqRzk/dgRj4COUSU1cNxjk703uh+6u6qey5641/NlEdzKLZ/S6MneXsnyrTnP9+HDLVsMx0Qsfrv4GXtipsCfwtsy6Xy8Ji7SrKJJF+DcKmExqU9SzQkb52n98Ed0ythXgR8ybobXPWqENFS/E07IniGtt/raHPYFNunI0vl/+bYohQO9CTwryXfBAeGg0u0DTspI/ocaGVWXBJfiJT6kGL+A+P55/tWyh3cvErlDr0sBNyWFT6ZXxtKd+gFK0G7BuZe4m9M+tK+EySWPBlsW9fMp+zEg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=hotmail.com; dmarc=pass action=none header.from=hotmail.com; dkim=pass header.d=hotmail.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7y29lphWxs2fpRRblQ1V2iqaBWdbaKoud2sRSkJY+Lw=; b=Fi8cvwWebIi2BchfnVuNc7vsEI+ki97YffNnJboqeZzWG3qH/f5PrBIPbYezEyumivMuuRLduQbEGsMWIPL357Ydw+QPRR9Y+uXpnY83GNnBST5gcDLW1HtH+4dzSNHAxptuiX6GGwaMwMa+BkklIWsr6AfH0MG2Us5Wu0HF9xYXj6ib7L4d2/FDZQ6Tw0S6FhxecdaoIzXviB0KzxtxZOabXQIh0M0gWj/Ytp3DX8xL8er/AYmi90AXWPH/N/IxhTHEXk7nuKa4c+l194l+UciSQ3CmUOO3vIvKww3Z7sWrMuWTgjTHkOPj44OJmyB6lPQqJmwu4awA0o6EqMqB4w== Received: from PU1APC01FT045.eop-APC01.prod.protection.outlook.com (10.152.252.53) by PU1APC01HT127.eop-APC01.prod.protection.outlook.com (10.152.253.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2538.15; Tue, 17 Dec 2019 08:16:11 +0000 Received: from HK2PR03MB4596.apcprd03.prod.outlook.com (10.152.252.56) by PU1APC01FT045.mail.protection.outlook.com (10.152.253.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2538.15 via Frontend Transport; Tue, 17 Dec 2019 08:16:11 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:1C76DF3A9E69FCE3975FDDBFB9846C4C73537D15890B1571AD848D686625C839; UpperCasedChecksum:AE909E2DB742A030741C8E5D44AD36E0FC6A0E1C23C6F55EE14F909ACC2E9501; SizeAsReceived:7439; Count:47 Received: from HK2PR03MB4596.apcprd03.prod.outlook.com ([fe80::640c:1614:9a91:248b]) by HK2PR03MB4596.apcprd03.prod.outlook.com ([fe80::640c:1614:9a91:248b%6]) with mapi id 15.20.2559.012; Tue, 17 Dec 2019 08:16:11 +0000 From: fgodtdev@hotmail.com To: ffmpeg-devel@ffmpeg.org Date: Tue, 17 Dec 2019 16:15:56 +0800 Message-ID: X-Mailer: git-send-email 2.20.1 X-ClientProxiedBy: SG3P274CA0009.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:be::21) To HK2PR03MB4596.apcprd03.prod.outlook.com (2603:1096:202:1b::14) X-Microsoft-Original-Message-ID: <20191217081556.3396-1-fgodtdev@hotmail.com> MIME-Version: 1.0 Received: from debian.localdomain (182.138.89.72) by SG3P274CA0009.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:be::21) with Microsoft SMTP Server (version=TLS1_2, cipher=) via Frontend Transport; Tue, 17 Dec 2019 08:16:10 +0000 X-Mailer: git-send-email 2.20.1 X-Microsoft-Original-Message-ID: <20191217081556.3396-1-fgodtdev@hotmail.com> X-TMN: [zNgWniEIc8p3HgbskYgzOUxReplTgFTo] X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 47 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: d87a41b2-4d14-4c8d-80c3-08d782c96059 X-MS-Exchange-SLBlob-MailProps: gjx25WM8ZNXKTmKKl99imNcestgU70FphQwD7sZ8V93nR8bIZVen+M4W2LuyQ6wBz3ptg8YGnxBqAtG7m/ewkj2jo1htb3gFy9UxRzdDOJU/NFfu3iAQq0q4fq3f4D20tvzMwqTyK5Rj0hMDqkWQwEeAfcaI4btDBQx9PPC9Dd+5Mz1YY96nKJb37TTUpqv75rkvC/HK4hR2btiwKk031pvzq5Dl6H9b3emAoLfjiXA2nEXNAmFAtzpgw/bgmFzX9Brp+rZofGAQLMzkgUJafJaLv3d3DllEN7dCeNZKOZh8SZ0kMnU8S0VmvnNFaB6cX2SynujliC3vWGXcgUo71wS6cetanOX+b6DwFPIUhKTLzqvWrPoCYfRm1k5hw9YzjJWmaUPBmv2YCPcNyo7jlbfU8KpKAWlHx+3KCEyZvxbAZHhjbD0gcpzP+JlgFYlS+18lZgvj2lvp3RJbKWzAABFtvCy5Ye66QAGG36Qiy48hVfRz/Nz4lRdoU/aGIQIKgJJ+dMbpSCWg5ihActdQ/El8d2MymtuWfwwqqP9+FlzAfzj2OGR3wvWQQanfGtBulAZNQN9Abtcx4lALEG6Bp+BP9AqIYaok38WEu6/d9DK1hIBHumGWWHbO8klpSx91gsl7OWzkXvWK4Lp9evmQa8Spt20Ng1RWJS2Q0zbkLuavTQMKDVkao/UIb6RfbdqW90fR0mldhsn+N73jqcE1l7un+LS88xY2om0INZunOa8= X-MS-TrafficTypeDiagnostic: PU1APC01HT127: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 6h0xEpf1vrGIiUoYp1kh+jf+pRdoRG03AkUAZ8XF13KPDuHivtCQVqBcdlaaVnaaOjLRjhD+aZ/v2PvUzNerG6jsz7qMDETa3ZM1hMkFySN54h3XB7lV69+5ouq5CjI3mA1S1BDqnRP+hV53GfP/Vx+eJwMF6wGOya9s8QrIsaEOD+sFpMI3dt1bkcLXOfm7 X-OriginatorOrg: hotmail.com X-MS-Exchange-CrossTenant-Network-Message-Id: d87a41b2-4d14-4c8d-80c3-08d782c96059 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2019 08:16:11.5448 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PU1APC01HT127 Subject: [FFmpeg-devel] [PATCH v2 1/1] avdevice/gdigrab: Add use_captureblt option for diable CAPTUREBLT, when useing the bitblt function with CAPTUREBLT it caused the mouse cursor flicker. most time we dont need this flag to capture window 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: FgoDt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: FgoDt Signed-off-by: fgodt --- doc/indevs.texi | 6 ++++++ libavdevice/gdigrab.c | 10 +++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/doc/indevs.texi b/doc/indevs.texi index 92bc65be41..43b0bd0465 100644 --- a/doc/indevs.texi +++ b/doc/indevs.texi @@ -748,6 +748,12 @@ When capturing a region with @var{video_size}, set the distance from the top edg Note that the offset calculation is from the top left corner of the primary monitor on Windows. If you have a monitor positioned above your primary monitor, you will need to use a negative @var{offset_y} value to move the region to that monitor. +@item use_captureblt +When use gdigrab to capture window or desktop, the mouse cursor will flicker. +Disable CAPTUREBLT FLAG by set value @code{0} to fix cursor flickering. Default value is @code{1} + +Note the value @code{1} is essential to capture specific window + @end table @section iec61883 diff --git a/libavdevice/gdigrab.c b/libavdevice/gdigrab.c index f4444406fa..658719e929 100644 --- a/libavdevice/gdigrab.c +++ b/libavdevice/gdigrab.c @@ -53,6 +53,8 @@ struct gdigrab { int offset_x; /**< Capture x offset (private option) */ int offset_y; /**< Capture y offset (private option) */ + int use_captureblt; /**< Capture gdi window with CAPTUREBLT flag (private option) */ + HWND hwnd; /**< Handle of the window for the grab */ HDC source_hdc; /**< Source device context */ HDC dest_hdc; /**< Destination, source-compatible DC */ @@ -542,6 +544,8 @@ static int gdigrab_read_packet(AVFormatContext *s1, AVPacket *pkt) int64_t curtime, delay; + unsigned long flag = SRCCOPY; + /* Calculate the time of the next frame */ time_frame += INT64_C(1000000); @@ -570,12 +574,15 @@ static int gdigrab_read_packet(AVFormatContext *s1, AVPacket *pkt) return AVERROR(ENOMEM); pkt->pts = curtime; + if(gdigrab->use_captureblt) + flag |= CAPTUREBLT; + /* Blit screen grab */ if (!BitBlt(dest_hdc, 0, 0, clip_rect.right - clip_rect.left, clip_rect.bottom - clip_rect.top, source_hdc, - clip_rect.left, clip_rect.top, SRCCOPY | CAPTUREBLT)) { + clip_rect.left, clip_rect.top, flag)) { WIN32_API_ERROR("Failed to capture image"); return AVERROR(EIO); } @@ -639,6 +646,7 @@ static const AVOption options[] = { { "video_size", "set video frame size", OFFSET(width), AV_OPT_TYPE_IMAGE_SIZE, {.str = NULL}, 0, 0, DEC }, { "offset_x", "capture area x offset", OFFSET(offset_x), AV_OPT_TYPE_INT, {.i64 = 0}, INT_MIN, INT_MAX, DEC }, { "offset_y", "capture area y offset", OFFSET(offset_y), AV_OPT_TYPE_INT, {.i64 = 0}, INT_MIN, INT_MAX, DEC }, + { "use_captureblt", "capture gdi window use CAPTTUREBLT flag", OFFSET(use_captureblt), AV_OPT_TYPE_INT, {.i64 = 1}, 0, 1, DEC }, { NULL }, };