提交 648b8cca 编写于 作者: M Marton Balint

avdevice/xcbgrab: wrap non-shm image replies in a buffer ref

This avoids a memcpy improving performance if SHM is not used.
Signed-off-by: NMarton Balint <cus@passwd.hu>
上级 b66a8008
...@@ -146,6 +146,11 @@ static int xcbgrab_reposition(AVFormatContext *s, ...@@ -146,6 +146,11 @@ static int xcbgrab_reposition(AVFormatContext *s,
return 0; return 0;
} }
static void xcbgrab_image_reply_free(void *opaque, uint8_t *data)
{
free(opaque);
}
static int xcbgrab_frame(AVFormatContext *s, AVPacket *pkt) static int xcbgrab_frame(AVFormatContext *s, AVPacket *pkt)
{ {
XCBGrabContext *c = s->priv_data; XCBGrabContext *c = s->priv_data;
...@@ -154,7 +159,7 @@ static int xcbgrab_frame(AVFormatContext *s, AVPacket *pkt) ...@@ -154,7 +159,7 @@ static int xcbgrab_frame(AVFormatContext *s, AVPacket *pkt)
xcb_drawable_t drawable = c->screen->root; xcb_drawable_t drawable = c->screen->root;
xcb_generic_error_t *e = NULL; xcb_generic_error_t *e = NULL;
uint8_t *data; uint8_t *data;
int length, ret; int length;
iq = xcb_get_image(c->conn, XCB_IMAGE_FORMAT_Z_PIXMAP, drawable, iq = xcb_get_image(c->conn, XCB_IMAGE_FORMAT_Z_PIXMAP, drawable,
c->x, c->y, c->width, c->height, ~0); c->x, c->y, c->width, c->height, ~0);
...@@ -178,14 +183,18 @@ static int xcbgrab_frame(AVFormatContext *s, AVPacket *pkt) ...@@ -178,14 +183,18 @@ static int xcbgrab_frame(AVFormatContext *s, AVPacket *pkt)
data = xcb_get_image_data(img); data = xcb_get_image_data(img);
length = xcb_get_image_data_length(img); length = xcb_get_image_data_length(img);
ret = av_new_packet(pkt, length); av_init_packet(pkt);
if (!ret) pkt->buf = av_buffer_create(data, length, xcbgrab_image_reply_free, img, 0);
memcpy(pkt->data, data, length); if (!pkt->buf) {
free(img);
return AVERROR(ENOMEM);
}
free(img); pkt->data = data;
pkt->size = length;
return ret; return 0;
} }
static void wait_frame(AVFormatContext *s, AVPacket *pkt) static void wait_frame(AVFormatContext *s, AVPacket *pkt)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册