On Wed, 11. Dec 09:01, _ FgoDt wrote: > did someone review the patch? > > ________________________________ > 发件人: _ FgoDt <[email protected]> > 发送时间: 2019年11月15日 15:03 > 收件人: [email protected] <[email protected]> > 抄送: _ FgoDt <[email protected]> > 主题: [PATCH 1/1] add without_captureblt option for libavdevice/gdigrab.c, when > useing the bitblt function with CAPTUREBLT it caused the mouse cursor > flicker. most time we dont need this flag to capture window
> > From: fgodt <[email protected]> This would be in commit, you should use your name. > > Signed-off-by: fgodt <[email protected]> > --- > libavdevice/gdigrab.c | 11 ++++++++++- > 1 file changed, 10 insertions(+), 1 deletion(-) > > diff --git a/libavdevice/gdigrab.c b/libavdevice/gdigrab.c > index f4444406fa..0ab0cfed01 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 without_captureblt; /**< capture without captureblt */ > + > 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; > + > /* Calculate the time of the next frame */ > time_frame += INT64_C(1000000); > > @@ -570,12 +574,16 @@ static int gdigrab_read_packet(AVFormatContext *s1, > AVPacket *pkt) > return AVERROR(ENOMEM); > pkt->pts = curtime; > > + flag = SRCCOPY; > + if(!gdigrab->without_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 +647,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 }, > + { "without_captureblt", "capture without captureblt", > OFFSET(without_captureblt), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, DEC }, > { NULL }, > }; IMO a not negated option would be better. i.e. use_captureblt that's enabled by default. You also need to update the docs. I don't have windows so can't test on my machine. -- Andriy _______________________________________________ ffmpeg-devel mailing list [email protected] https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email [email protected] with subject "unsubscribe".
