From patchwork Sat Jan 11 09:18:08 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "fgodtdev@hotmail.com" X-Patchwork-Id: 17301 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 6228944BDFF for ; Sat, 11 Jan 2020 11:18:42 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3D78568AE75; Sat, 11 Jan 2020 11:18:42 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from APC01-SG2-obe.outbound.protection.outlook.com (mail-oln040092253030.outbound.protection.outlook.com [40.92.253.30]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 99ABC68A0C7 for ; Sat, 11 Jan 2020 11:18:35 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lRPrFoXW2orhnQ4Vku6rXrKEYgoN77aG5XPkoo93obTjJ68/VATU+webGf3qB8AEhFmytCefOA50q/SKVRTX8xYbGizCme2wl3tia9cTQiYM3RLxs+P+xDJoBsD5hc2nXEkzGzwGWx56Ks4LiflvI3/I6PTfdY2d1gBqxr90rsg70g2HpZQ7YnzRruYdj+pNy8OV/eDy6oU8hS9DIezvagsaGiIsO1pWed38ZNcxSNrf+qqWkkztn7/MXdlss9utc8PlcEF81g0EaOoWUQlCFSX0/kKFfxR4j/KHBHRwEpj4NcJm+IYiA5SxsxZ31YVQmocvPJvKvL8yPwmhANrC8g== 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=ZoLhpHCMaLD6VqLHzIkMPise27BF5hq+k/ne8QChrGY=; b=lGrev2wCf2c4TOaMaFYlXPN/C6zrto7RYX+UbAlrTH+84qRc5VrMHNXeI1VviAAH4m8pDrdGyQz8U8iMOa/hHiVwLi0dQHb6shgHst4fey3TF4B+ht95B3DcbLra5GK0Sdz4J2VHv+bekhFliHIn0Nd8xbxjCRngjUejj+Ys/fB4NqmjhYgkD+IDljKRms5mNYFwcAkTU8aqGwb6FAyq1UTc+KUDI/6V6nFh2mwrf74pO6UuXqWUoHyolnVrdSuDcEZs20RuUPMSPQ63XVR6HjhpMY28cQjipjzTNtINV0ZuS9Tq3F5PYaXgl9SwwwnYoV+3lr7ZWx3R2UnRMkohSw== 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=ZoLhpHCMaLD6VqLHzIkMPise27BF5hq+k/ne8QChrGY=; b=LBT+FNmszDtSmGbQIGC5QXKooWfRqCdtxEK47EkOwvt7LxpOXuwfNdBbK2ceBSSKX7YaV5Nq5EiEXxJbFpjU2DdRibuG/0/ASoW5dhDD824krs8lTS48ny/bJQeJHm6XtzQ56wJyYI+5IE5LEKSVBPyqf2VDO3ukIYg2R1X1GPBV4SkMzgW87X3g6TV7YKg5Y0EvDZTULytL+OLaXmLM/XGvJNyPYKNTlwDTthRNNdlXUU2cX/K3bN2WgsA9+XrqHyDZLsIiupaGpUJuJ4TBgN+DHWww6F4zXjv0QnR2zK40k0IPok3xYtF0RBj54ouFO2SIQggH+ZgA0U8HgDBn2g== Received: from HK2APC01FT046.eop-APC01.prod.protection.outlook.com (10.152.248.52) by HK2APC01HT069.eop-APC01.prod.protection.outlook.com (10.152.249.225) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2602.11; Sat, 11 Jan 2020 09:18:32 +0000 Received: from HK2PR03MB4596.apcprd03.prod.outlook.com (10.152.248.51) by HK2APC01FT046.mail.protection.outlook.com (10.152.249.180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2602.11 via Frontend Transport; Sat, 11 Jan 2020 09:18:32 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:C3284ACF84990F6648C14B8D81BED402030867F8DCCE49AA7C575E19BBF319F4; UpperCasedChecksum:EDBD76F42EB6E67C27F46C012A44FB1FFF3D6F6FCE3267477A9BD7757F0C5A05; SizeAsReceived:7363; 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.2644.012; Sat, 11 Jan 2020 09:18:32 +0000 From: fgodtdev@hotmail.com To: ffmpeg-devel@ffmpeg.org Date: Sat, 11 Jan 2020 17:18:08 +0800 Message-ID: X-Mailer: git-send-email 2.20.1 X-ClientProxiedBy: HK2PR0302CA0022.apcprd03.prod.outlook.com (2603:1096:202::32) To HK2PR03MB4596.apcprd03.prod.outlook.com (2603:1096:202:1b::14) X-Microsoft-Original-Message-ID: <20200111091808.3132-1-fgodtdev@hotmail.com> MIME-Version: 1.0 Received: from debian.localdomain (182.138.151.167) by HK2PR0302CA0022.apcprd03.prod.outlook.com (2603:1096:202::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.6 via Frontend Transport; Sat, 11 Jan 2020 09:18:31 +0000 X-Mailer: git-send-email 2.20.1 X-Microsoft-Original-Message-ID: <20200111091808.3132-1-fgodtdev@hotmail.com> X-TMN: [2H9TBhHryEoCsoqbRpiK9E5545EKYorqV3sJCKTMNOw=] X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 47 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: 01069cc0-aa4a-4b22-4de9-08d796773a69 X-MS-Exchange-SLBlob-MailProps: gjx25WM8ZNW8tG6z73IrQ+OBZF3O7k7S9PjhfD68cYTTLeAeaf28aKs0uUY11RyWMOzSZJaWoVGF+1kj5warBiqL+w0rsRm1hrEqRYR+9yqDPd4aq87oGLu3wq6bJna8DLuvt8EWjFAWtCz3Fi4RwRil4BryHWKYZr0E9Nben2qykS5pDs2BuIgZ0BFUKwTIQIp2Iu1T7trGySP54K0oxHJrkFmAlZgqla9+ImZL8J3PMGiyt1KlvC2QuqAjxk1K+E8Qv0ZF2+hXXIGdOJit1hL+jTmLVWxq5sKXKcuw5tLZ0waS8vXiy+Rw+IcoM4pTHF8Sa9hT2r6ZO7oaDN+B/dPAEdl6d/NB/noz7iihxQIiZP+Ic02T9XLMtb7deVO/G85YAua7RpyIaheQ8xPw/b+K2KfeyMw3cHpNydyF4zwQwnvBDI74mSRmu+Czqoe/vAXSIfY3wYfXyPbDeCiB6G2dhc4wofSAZzC0/9tfmDRDhARedycN/0yFWZuMH48YU6FlSraWFQ0RKk9IX03ObTwO6LnG3GXiel/mXpJaJK/Qj32CzynKWbrYdMv7fI/pqwPZeFbbK2of1UIeqjDiVNo9BBDubawJ6K+5co9mHuo8WA54YuJ0vwdnzGOhoZ5c4Nqyh4TXcpKVJyotYQ21RCMeFp5UGRlxOu1POqyN/Y9Lovi88Wc5fKYeUDFm4oMHJsqFVgW8+1okJIdTLCafp2U5lexnLAFShfkIixE+tTY= X-MS-TrafficTypeDiagnostic: HK2APC01HT069: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 8QrMmu9mYAnovTHvcxe1nl7eyzzSPd9FAcM2CHgCmyPkyRCfgSzeae8SvBmJLtwoCVVPqOuHJSclT4M9fwPBWEnTdVh+eZNk2CEWgsHhUqPiJ6LJxmD9SBpaL0IcVgD1CsmF5u6gwjwgRdm5S1ReSVYhlhJPZ5XAwj6r6/QQjJ/sNDQ1dXD89B+q+m3NfndZ X-OriginatorOrg: hotmail.com X-MS-Exchange-CrossTenant-Network-Message-Id: 01069cc0-aa4a-4b22-4de9-08d796773a69 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Jan 2020 09:18:32.3537 (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: HK2APC01HT069 Subject: [FFmpeg-devel] [PATCH v4 1/1] avdevice/gdigrab add use_captureblt option 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 Add use_captureblt option for disable or use CAPTUREBLT flag, when useing the bitblt function with CAPTUREBLT may caused the Windows mouse cursor flicker. most time we don't need this flag to capture window I tested on Windows 10 works fine Signed-off-by: fgodt --- doc/indevs.texi | 7 +++++++ libavdevice/gdigrab.c | 10 +++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/doc/indevs.texi b/doc/indevs.texi index 6f5afaf344..967ae22991 100644 --- a/doc/indevs.texi +++ b/doc/indevs.texi @@ -743,6 +743,13 @@ 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 +gdigrab use CAPTUREBLT flag to capture window or desktop by default, which may make Windows mouse cursor flickering. +If not capture layered window you can set value @code{0} disable CAPTUREBLT flag, to fix Windows cursor flickering. +Default value is @code{1} + +Note the value @code{1} is essential to capture layered 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 }, };