ffmpeg | branch: master | Clément Bœsch <u...@pkh.me> | Wed Mar 15 22:07:47 2017 +0100| [4a9c5f6bc5a825f10b77f6ce084aa840d5c1d93e] | committer: Clément Bœsch
Merge commit '4fef648d10bf3bcfd4b8fa5755c1128966a2427c' * commit '4fef648d10bf3bcfd4b8fa5755c1128966a2427c': Remove the legacy X11 screen grabber Merged-by: Clément Bœsch <u...@pkh.me> > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=4a9c5f6bc5a825f10b77f6ce084aa840d5c1d93e --- Changelog | 2 + LICENSE.md | 1 - configure | 11 +- libavdevice/Makefile | 1 - libavdevice/alldevices.c | 1 - libavdevice/avdevice.h | 2 +- libavdevice/x11grab.c | 695 ----------------------------------------------- 7 files changed, 4 insertions(+), 709 deletions(-) diff --git a/Changelog b/Changelog index b9d1a3c..ca6f404 100644 --- a/Changelog +++ b/Changelog @@ -28,6 +28,8 @@ version <next>: - incomplete ClearVideo decoder - Intel QSV video scaling and deinterlacing filters - XPM decoder +- Removed the legacy X11 screen grabber, use XCB instead + version 3.2: - libopenmpt demuxer diff --git a/LICENSE.md b/LICENSE.md index 640633c..ba65b05 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -17,7 +17,6 @@ Specifically, the GPL parts of FFmpeg are: - `libavcodec/x86/flac_dsp_gpl.asm` - `libavcodec/x86/idct_mmx.c` - `libavfilter/x86/vf_removegrain.asm` -- the X11 grabber in `libavdevice/x11grab.c` - the following building and testing tools - `compat/solaris/make_sunver.pl` - `doc/t2h.pm` diff --git a/configure b/configure index 68cc0c8..488e803 100755 --- a/configure +++ b/configure @@ -290,7 +290,6 @@ External library support: --disable-sdl2 disable sdl2 [autodetect] --disable-securetransport disable Secure Transport, needed for TLS support on OSX if openssl and gnutls are not used [autodetect] - --enable-x11grab enable X11 grabbing (legacy) [no] --disable-xlib disable xlib [autodetect] --disable-zlib disable zlib [autodetect] @@ -1520,7 +1519,6 @@ EXTERNAL_LIBRARY_GPL_LIST=" libx265 libxavs libxvid - x11grab " EXTERNAL_LIBRARY_NONFREE_LIST=" @@ -3033,7 +3031,6 @@ v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h" v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h" vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines" vfwcap_indev_extralibs="-lavicap32" -x11grab_indev_deps="x11grab" x11grab_xcb_indev_deps="libxcb" xv_outdev_deps="X11_extensions_Xvlib_h XvGetPortAttribute" xv_outdev_extralibs="-lXv -lX11 -lXext" @@ -6035,7 +6032,7 @@ enabled xlib && if ! disabled libxcb; then check_pkg_config "xcb >= 1.4" xcb/xcb.h xcb_connect || { enabled libxcb && die "ERROR: libxcb >= 1.4 not found"; - } && disable x11grab && enable libxcb + } && enable libxcb if enabled libxcb; then disabled libxcb_shm || { @@ -6058,12 +6055,6 @@ if enabled libxcb; then fi fi -if enabled x11grab; then - enabled xlib || die "ERROR: Xlib not found" - require Xext X11/extensions/XShm.h XShmCreateImage -lXext - require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes -fi - check_func_headers "windows.h" CreateDIBSection "$gdigrab_indev_extralibs" enabled dxva2api_h && diff --git a/libavdevice/Makefile b/libavdevice/Makefile index 256e140..90ebc95 100644 --- a/libavdevice/Makefile +++ b/libavdevice/Makefile @@ -47,7 +47,6 @@ OBJS-$(CONFIG_V4L2_INDEV) += v4l2.o v4l2-common.o timefilter.o OBJS-$(CONFIG_V4L2_OUTDEV) += v4l2enc.o v4l2-common.o OBJS-$(CONFIG_V4L_INDEV) += v4l.o OBJS-$(CONFIG_VFWCAP_INDEV) += vfwcap.o -OBJS-$(CONFIG_X11GRAB_INDEV) += x11grab.o OBJS-$(CONFIG_X11GRAB_XCB_INDEV) += xcbgrab.o OBJS-$(CONFIG_XV_OUTDEV) += xv.o diff --git a/libavdevice/alldevices.c b/libavdevice/alldevices.c index 75f4ae0..f8f31ed 100644 --- a/libavdevice/alldevices.c +++ b/libavdevice/alldevices.c @@ -63,7 +63,6 @@ static void register_all(void) REGISTER_INOUTDEV(V4L2, v4l2); // REGISTER_INDEV (V4L, v4l REGISTER_INDEV (VFWCAP, vfwcap); - REGISTER_INDEV (X11GRAB, x11grab); REGISTER_INDEV (X11GRAB_XCB, x11grab_xcb); REGISTER_OUTDEV (XV, xv); diff --git a/libavdevice/avdevice.h b/libavdevice/avdevice.h index 84f374a..4315768 100644 --- a/libavdevice/avdevice.h +++ b/libavdevice/avdevice.h @@ -37,7 +37,7 @@ * (de)muxers in libavdevice are of the AVFMT_NOFILE type (they use their own * I/O functions). The filename passed to avformat_open_input() often does not * refer to an actually existing file, but has some special device-specific - * meaning - e.g. for x11grab it is the display name. + * meaning - e.g. for x11grab_xcb it is the display name. * * To use libavdevice, simply call avdevice_register_all() to register all * compiled muxers and demuxers. They all use standard libavformat API. diff --git a/libavdevice/x11grab.c b/libavdevice/x11grab.c deleted file mode 100644 index 65b409f..0000000 --- a/libavdevice/x11grab.c +++ /dev/null @@ -1,695 +0,0 @@ -/* - * X11 video grab interface - * - * This file is part of FFmpeg. - * - * FFmpeg integration: - * Copyright (C) 2006 Clemens Fruhwirth <clem...@endorphin.org> - * Edouard Gomez <ed.go...@free.fr> - * - * This file contains code from grab.c: - * Copyright (c) 2000-2001 Fabrice Bellard - * - * This file contains code from the xvidcap project: - * Copyright (C) 1997-1998 Rasca, Berlin - * 2003-2004 Karl H. Beckers, Frankfurt - * - * FFmpeg is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * X11 frame device demuxer - * @author Clemens Fruhwirth <clem...@endorphin.org> - * @author Edouard Gomez <ed.go...@free.fr> - */ - -#include "config.h" - -#include <time.h> -#include <sys/shm.h> - -#include <X11/cursorfont.h> -#include <X11/X.h> -#include <X11/Xlib.h> -#include <X11/Xlibint.h> -#include <X11/Xproto.h> -#include <X11/Xutil.h> - -#include <X11/extensions/shape.h> -#include <X11/extensions/Xfixes.h> -#include <X11/extensions/XShm.h> - -#include "libavutil/internal.h" -#include "libavutil/log.h" -#include "libavutil/opt.h" -#include "libavutil/parseutils.h" -#include "libavutil/time.h" - -#include "libavformat/internal.h" - -#include "avdevice.h" - -/** X11 device demuxer context */ -typedef struct X11GrabContext { - const AVClass *class; /**< Class for private options. */ - int frame_size; /**< Size in bytes of a grabbed frame */ - AVRational time_base; /**< Time base */ - int64_t time_frame; /**< Current time */ - - int width; /**< Width of the grab frame */ - int height; /**< Height of the grab frame */ - int x_off; /**< Horizontal top-left corner coordinate */ - int y_off; /**< Vertical top-left corner coordinate */ - - Display *dpy; /**< X11 display from which x11grab grabs frames */ - XImage *image; /**< X11 image holding the grab */ - int use_shm; /**< !0 when using XShm extension */ - XShmSegmentInfo shminfo; /**< When using XShm, keeps track of XShm info */ - int draw_mouse; /**< Set by a private option. */ - int follow_mouse; /**< Set by a private option. */ - int show_region; /**< set by a private option. */ - AVRational framerate; /**< Set by a private option. */ - int palette_changed; - uint32_t palette[256]; - - Cursor c; - Window region_win; /**< This is used by show_region option. */ -} X11GrabContext; - -#define REGION_WIN_BORDER 3 - -/** - * Draw grabbing region window - * - * @param s x11grab context - */ -static void x11grab_draw_region_win(X11GrabContext *s) -{ - Display *dpy = s->dpy; - Window win = s->region_win; - int screen = DefaultScreen(dpy); - GC gc = XCreateGC(dpy, win, 0, 0); - - XSetForeground(dpy, gc, WhitePixel(dpy, screen)); - XSetBackground(dpy, gc, BlackPixel(dpy, screen)); - XSetLineAttributes(dpy, gc, REGION_WIN_BORDER, LineDoubleDash, 0, 0); - XDrawRectangle(dpy, win, gc, 1, 1, - (s->width + REGION_WIN_BORDER * 2) - 1 * 2 - 1, - (s->height + REGION_WIN_BORDER * 2) - 1 * 2 - 1); - XFreeGC(dpy, gc); -} - -/** - * Initialize grabbing region window - * - * @param s x11grab context - */ -static void x11grab_region_win_init(X11GrabContext *s) -{ - Display *dpy = s->dpy; - XRectangle rect; - XSetWindowAttributes attribs = { .override_redirect = True }; - int screen = DefaultScreen(dpy); - - s->region_win = XCreateWindow(dpy, RootWindow(dpy, screen), - s->x_off - REGION_WIN_BORDER, - s->y_off - REGION_WIN_BORDER, - s->width + REGION_WIN_BORDER * 2, - s->height + REGION_WIN_BORDER * 2, - 0, CopyFromParent, - InputOutput, CopyFromParent, - CWOverrideRedirect, &attribs); - rect.x = 0; - rect.y = 0; - rect.width = s->width; - rect.height = s->height; - XShapeCombineRectangles(dpy, s->region_win, - ShapeBounding, REGION_WIN_BORDER, REGION_WIN_BORDER, - &rect, 1, ShapeSubtract, 0); - XMapWindow(dpy, s->region_win); - XSelectInput(dpy, s->region_win, ExposureMask | StructureNotifyMask); - x11grab_draw_region_win(s); -} - -static int setup_shm(AVFormatContext *s, Display *dpy, XImage **image) -{ - X11GrabContext *g = s->priv_data; - int scr = XDefaultScreen(dpy); - XImage *img = XShmCreateImage(dpy, DefaultVisual(dpy, scr), - DefaultDepth(dpy, scr), ZPixmap, NULL, - &g->shminfo, g->width, g->height); - - g->shminfo.shmid = shmget(IPC_PRIVATE, img->bytes_per_line * img->height, - IPC_CREAT | 0777); - - if (g->shminfo.shmid == -1) { - av_log(s, AV_LOG_ERROR, "Cannot get shared memory!\n"); - return AVERROR(ENOMEM); - } - - g->shminfo.shmaddr = img->data = shmat(g->shminfo.shmid, 0, 0); - g->shminfo.readOnly = False; - - if (!XShmAttach(dpy, &g->shminfo)) { - av_log(s, AV_LOG_ERROR, "Failed to attach shared memory!\n"); - /* needs some better error subroutine :) */ - return AVERROR(EIO); - } - - *image = img; - return 0; -} - -static int setup_mouse(Display *dpy, int screen) -{ - int ev_ret, ev_err; - - if (XFixesQueryExtension(dpy, &ev_ret, &ev_err)) { - Window root = RootWindow(dpy, screen); - XFixesSelectCursorInput(dpy, root, XFixesDisplayCursorNotifyMask); - return 0; - } - - return AVERROR(ENOSYS); -} - -static int pixfmt_from_image(AVFormatContext *s, XImage *image, int *pix_fmt) -{ - av_log(s, AV_LOG_DEBUG, - "Image r 0x%.6lx g 0x%.6lx b 0x%.6lx and depth %i\n", - image->red_mask, - image->green_mask, - image->blue_mask, - image->bits_per_pixel); - - *pix_fmt = AV_PIX_FMT_NONE; - - switch (image->bits_per_pixel) { - case 8: - *pix_fmt = AV_PIX_FMT_PAL8; - break; - case 16: - if (image->red_mask == 0xf800 && - image->green_mask == 0x07e0 && - image->blue_mask == 0x001f) { - *pix_fmt = AV_PIX_FMT_RGB565; - } else if (image->red_mask == 0x7c00 && - image->green_mask == 0x03e0 && - image->blue_mask == 0x001f) { - *pix_fmt = AV_PIX_FMT_RGB555; - } - break; - case 24: - if (image->red_mask == 0xff0000 && - image->green_mask == 0x00ff00 && - image->blue_mask == 0x0000ff) { - *pix_fmt = AV_PIX_FMT_BGR24; - } else if (image->red_mask == 0x0000ff && - image->green_mask == 0x00ff00 && - image->blue_mask == 0xff0000) { - *pix_fmt = AV_PIX_FMT_RGB24; - } - break; - case 32: - if (image->red_mask == 0xff0000 && - image->green_mask == 0x00ff00 && - image->blue_mask == 0x0000ff ) { - *pix_fmt = AV_PIX_FMT_0RGB32; - } - break; - } - if (*pix_fmt == AV_PIX_FMT_NONE) { - av_log(s, AV_LOG_ERROR, - "XImages with RGB mask 0x%.6lx 0x%.6lx 0x%.6lx and depth %i " - "are currently not supported.\n", - image->red_mask, - image->green_mask, - image->blue_mask, - image->bits_per_pixel); - - return AVERROR_PATCHWELCOME; - } - - return 0; -} - -/** - * Initialize the x11 grab device demuxer (public device demuxer API). - * - * @param s1 Context from avformat core - * @return <ul> - * <li>AVERROR(ENOMEM) no memory left</li> - * <li>AVERROR(EIO) other failure case</li> - * <li>0 success</li> - * </ul> - */ -static int x11grab_read_header(AVFormatContext *s1) -{ - X11GrabContext *x11grab = s1->priv_data; - Display *dpy; - AVStream *st = NULL; - XImage *image; - int x_off = 0, y_off = 0, ret = 0, screen, use_shm = 0; - char *dpyname, *offset; - Colormap color_map; - XColor color[256]; - int i; - - dpyname = av_strdup(s1->filename); - if (!dpyname) - goto out; - - offset = strchr(dpyname, '+'); - if (offset) { - sscanf(offset, "%d,%d", &x_off, &y_off); - if (strstr(offset, "nomouse")) { - av_log(s1, AV_LOG_WARNING, - "'nomouse' specification in argument is deprecated: " - "use 'draw_mouse' option with value 0 instead\n"); - x11grab->draw_mouse = 0; - } - *offset = 0; - } - - av_log(s1, AV_LOG_INFO, - "device: %s -> display: %s x: %d y: %d width: %d height: %d\n", - s1->filename, dpyname, x_off, y_off, x11grab->width, x11grab->height); - - dpy = XOpenDisplay(dpyname); - av_freep(&dpyname); - if (!dpy) { - av_log(s1, AV_LOG_ERROR, "Could not open X display.\n"); - ret = AVERROR(EIO); - goto out; - } - - st = avformat_new_stream(s1, NULL); - if (!st) { - ret = AVERROR(ENOMEM); - goto out; - } - avpriv_set_pts_info(st, 64, 1, 1000000); /* 64 bits pts in us */ - - screen = DefaultScreen(dpy); - - if (x11grab->follow_mouse) { - int screen_w, screen_h; - Window w; - - screen_w = DisplayWidth(dpy, screen); - screen_h = DisplayHeight(dpy, screen); - XQueryPointer(dpy, RootWindow(dpy, screen), &w, &w, &x_off, &y_off, - &ret, &ret, &ret); - x_off -= x11grab->width / 2; - y_off -= x11grab->height / 2; - x_off = av_clip(x_off, 0, screen_w - x11grab->width); - y_off = av_clip(y_off, 0, screen_h - x11grab->height); - av_log(s1, AV_LOG_INFO, - "followmouse is enabled, resetting grabbing region to x: %d y: %d\n", - x_off, y_off); - } - - if (x11grab->use_shm) { - use_shm = XShmQueryExtension(dpy); - av_log(s1, AV_LOG_INFO, - "shared memory extension %sfound\n", use_shm ? "" : "not "); - } - - if (use_shm && setup_shm(s1, dpy, &image) < 0) { - av_log(s1, AV_LOG_WARNING, "Falling back to XGetImage\n"); - use_shm = 0; - } - - if (!use_shm) { - image = XGetImage(dpy, RootWindow(dpy, screen), - x_off, y_off, - x11grab->width, x11grab->height, - AllPlanes, ZPixmap); - } - - if (x11grab->draw_mouse && setup_mouse(dpy, screen) < 0) { - av_log(s1, AV_LOG_WARNING, - "XFixes not available, cannot draw the mouse cursor\n"); - x11grab->draw_mouse = 0; - } - - x11grab->frame_size = x11grab->width * x11grab->height * image->bits_per_pixel / 8; - x11grab->dpy = dpy; - x11grab->time_base = av_inv_q(x11grab->framerate); - x11grab->time_frame = av_gettime() / av_q2d(x11grab->time_base); - x11grab->x_off = x_off; - x11grab->y_off = y_off; - x11grab->image = image; - x11grab->use_shm = use_shm; - - ret = pixfmt_from_image(s1, image, &st->codecpar->format); - if (ret < 0) - goto out; - - if (st->codecpar->format == AV_PIX_FMT_PAL8) { - color_map = DefaultColormap(dpy, screen); - for (i = 0; i < 256; ++i) - color[i].pixel = i; - XQueryColors(dpy, color_map, color, 256); - for (i = 0; i < 256; ++i) - x11grab->palette[i] = (color[i].red & 0xFF00) << 8 | - (color[i].green & 0xFF00) | - (color[i].blue & 0xFF00) >> 8; - x11grab->palette_changed = 1; - } - - - st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; - st->codecpar->codec_id = AV_CODEC_ID_RAWVIDEO; - st->codecpar->width = x11grab->width; - st->codecpar->height = x11grab->height; - st->codecpar->bit_rate = x11grab->frame_size * 1 / av_q2d(x11grab->time_base) * 8; - - st->avg_frame_rate = av_inv_q(x11grab->time_base); - -out: - av_free(dpyname); - return ret; -} - -/** - * Paint a mouse pointer in an X11 image. - * - * @param image image to paint the mouse pointer to - * @param s context used to retrieve original grabbing rectangle - * coordinates - */ -static void paint_mouse_pointer(XImage *image, AVFormatContext *s1) -{ - X11GrabContext *s = s1->priv_data; - int x_off = s->x_off; - int y_off = s->y_off; - int width = s->width; - int height = s->height; - Display *dpy = s->dpy; - XFixesCursorImage *xcim; - int x, y; - int line, column; - int to_line, to_column; - int pixstride = image->bits_per_pixel >> 3; - /* Warning: in its insanity, xlib provides unsigned image data through a - * char* pointer, so we have to make it uint8_t to make things not break. - * Anyone who performs further investigation of the xlib API likely risks - * permanent brain damage. */ - uint8_t *pix = image->data; - Window root; - XSetWindowAttributes attr; - - /* Code doesn't currently support 16-bit or PAL8 */ - if (image->bits_per_pixel != 24 && image->bits_per_pixel != 32) - return; - - if (!s->c) - s->c = XCreateFontCursor(dpy, XC_left_ptr); - root = DefaultRootWindow(dpy); - attr.cursor = s->c; - XChangeWindowAttributes(dpy, root, CWCursor, &attr); - - xcim = XFixesGetCursorImage(dpy); - if (!xcim) { - av_log(s1, AV_LOG_WARNING, - "XFixesGetCursorImage failed\n"); - return; - } - - x = xcim->x - xcim->xhot; - y = xcim->y - xcim->yhot; - - to_line = FFMIN((y + xcim->height), (height + y_off)); - to_column = FFMIN((x + xcim->width), (width + x_off)); - - for (line = FFMAX(y, y_off); line < to_line; line++) { - for (column = FFMAX(x, x_off); column < to_column; column++) { - int xcim_addr = (line - y) * xcim->width + column - x; - int image_addr = ((line - y_off) * width + column - x_off) * pixstride; - int r = (uint8_t)(xcim->pixels[xcim_addr] >> 0); - int g = (uint8_t)(xcim->pixels[xcim_addr] >> 8); - int b = (uint8_t)(xcim->pixels[xcim_addr] >> 16); - int a = (uint8_t)(xcim->pixels[xcim_addr] >> 24); - - if (a == 255) { - pix[image_addr + 0] = r; - pix[image_addr + 1] = g; - pix[image_addr + 2] = b; - } else if (a) { - /* pixel values from XFixesGetCursorImage come premultiplied by alpha */ - pix[image_addr + 0] = r + (pix[image_addr + 0] * (255 - a) + 255 / 2) / 255; - pix[image_addr + 1] = g + (pix[image_addr + 1] * (255 - a) + 255 / 2) / 255; - pix[image_addr + 2] = b + (pix[image_addr + 2] * (255 - a) + 255 / 2) / 255; - } - } - } - - XFree(xcim); - xcim = NULL; -} - -/** - * Read new data in the image structure. - * - * @param dpy X11 display to grab from - * @param d - * @param image Image where the grab will be put - * @param x Top-Left grabbing rectangle horizontal coordinate - * @param y Top-Left grabbing rectangle vertical coordinate - * @return 0 if error, !0 if successful - */ -static int xget_zpixmap(Display *dpy, Drawable d, XImage *image, int x, int y) -{ - xGetImageReply rep; - xGetImageReq *req; - long nbytes; - - if (!image) - return 0; - - LockDisplay(dpy); - GetReq(GetImage, req); - - /* First set up the standard stuff in the request */ - req->drawable = d; - req->x = x; - req->y = y; - req->width = image->width; - req->height = image->height; - req->planeMask = (unsigned int)AllPlanes; - req->format = ZPixmap; - - if (!_XReply(dpy, (xReply *)&rep, 0, xFalse) || !rep.length) { - UnlockDisplay(dpy); - SyncHandle(); - return 0; - } - - nbytes = (long)rep.length << 2; - _XReadPad(dpy, image->data, nbytes); - - UnlockDisplay(dpy); - SyncHandle(); - return 1; -} - -/** - * Grab a frame from x11 (public device demuxer API). - * - * @param s1 Context from avformat core - * @param pkt Packet holding the brabbed frame - * @return frame size in bytes - */ -static int x11grab_read_packet(AVFormatContext *s1, AVPacket *pkt) -{ - X11GrabContext *s = s1->priv_data; - Display *dpy = s->dpy; - XImage *image = s->image; - int x_off = s->x_off; - int y_off = s->y_off; - int follow_mouse = s->follow_mouse; - int screen, pointer_x, pointer_y, _, same_screen = 1; - Window w, root; - int64_t curtime, delay; - struct timespec ts; - - /* wait based on the frame rate */ - for (;;) { - curtime = av_gettime(); - delay = s->time_frame * av_q2d(s->time_base) - curtime; - if (delay <= 0) { - break; - } - ts.tv_sec = delay / 1000000; - ts.tv_nsec = (delay % 1000000) * 1000; - nanosleep(&ts, NULL); - } - - /* Calculate the time of the next frame */ - do { - s->time_frame += INT64_C(1000000); - } while ((s->time_frame * av_q2d(s->time_base) - curtime) <= 0); - - pkt->data = image->data; - pkt->size = s->frame_size; - pkt->pts = curtime; - if (s->palette_changed) { - uint8_t *pal = av_packet_new_side_data(pkt, AV_PKT_DATA_PALETTE, - AVPALETTE_SIZE); - if (!pal) { - av_log(s, AV_LOG_ERROR, "Cannot append palette to packet\n"); - } else { - memcpy(pal, s->palette, AVPALETTE_SIZE); - s->palette_changed = 0; - } - } - - screen = DefaultScreen(dpy); - root = RootWindow(dpy, screen); - - if (follow_mouse || s->draw_mouse) - same_screen = XQueryPointer(dpy, root, &w, &w, - &pointer_x, &pointer_y, &_, &_, &_); - - if (follow_mouse && same_screen) { - int screen_w, screen_h; - - screen_w = DisplayWidth(dpy, screen); - screen_h = DisplayHeight(dpy, screen); - if (follow_mouse == -1) { - // follow the mouse, put it at center of grabbing region - x_off += pointer_x - s->width / 2 - x_off; - y_off += pointer_y - s->height / 2 - y_off; - } else { - // follow the mouse, but only move the grabbing region when mouse - // reaches within certain pixels to the edge. - if (pointer_x > x_off + s->width - follow_mouse) - x_off += pointer_x - (x_off + s->width - follow_mouse); - else if (pointer_x < x_off + follow_mouse) - x_off -= (x_off + follow_mouse) - pointer_x; - if (pointer_y > y_off + s->height - follow_mouse) - y_off += pointer_y - (y_off + s->height - follow_mouse); - else if (pointer_y < y_off + follow_mouse) - y_off -= (y_off + follow_mouse) - pointer_y; - } - // adjust grabbing region position if it goes out of screen. - s->x_off = x_off = av_clip(x_off, 0, screen_w - s->width); - s->y_off = y_off = av_clip(y_off, 0, screen_h - s->height); - - if (s->show_region && s->region_win) - XMoveWindow(dpy, s->region_win, - s->x_off - REGION_WIN_BORDER, - s->y_off - REGION_WIN_BORDER); - } - - if (s->show_region && same_screen) { - if (s->region_win) { - XEvent evt = { .type = NoEventMask }; - // Clean up the events, and do the initial draw or redraw. - while (XCheckMaskEvent(dpy, ExposureMask | StructureNotifyMask, - &evt)) - ; - if (evt.type) - x11grab_draw_region_win(s); - } else { - x11grab_region_win_init(s); - } - } - - if (s->use_shm) { - if (!XShmGetImage(dpy, root, image, x_off, y_off, AllPlanes)) - av_log(s1, AV_LOG_INFO, "XShmGetImage() failed\n"); - } else { - if (!xget_zpixmap(dpy, root, image, x_off, y_off)) - av_log(s1, AV_LOG_INFO, "XGetZPixmap() failed\n"); - } - - if (s->draw_mouse && same_screen) - paint_mouse_pointer(image, s1); - - return s->frame_size; -} - -/** - * Close x11 frame grabber (public device demuxer API). - * - * @param s1 Context from avformat core - * @return 0 success, !0 failure - */ -static int x11grab_read_close(AVFormatContext *s1) -{ - X11GrabContext *x11grab = s1->priv_data; - - /* Detach cleanly from shared mem */ - if (x11grab->use_shm) { - XShmDetach(x11grab->dpy, &x11grab->shminfo); - shmdt(x11grab->shminfo.shmaddr); - shmctl(x11grab->shminfo.shmid, IPC_RMID, NULL); - } - - /* Destroy X11 image */ - if (x11grab->image) { - XDestroyImage(x11grab->image); - x11grab->image = NULL; - } - - if (x11grab->region_win) - XDestroyWindow(x11grab->dpy, x11grab->region_win); - - /* Free X11 display */ - XCloseDisplay(x11grab->dpy); - return 0; -} - -#define OFFSET(x) offsetof(X11GrabContext, x) -#define DEC AV_OPT_FLAG_DECODING_PARAM -static const AVOption options[] = { - { "grab_x", "Initial x coordinate.", OFFSET(x_off), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, DEC }, - { "grab_y", "Initial y coordinate.", OFFSET(y_off), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, DEC }, - { "draw_mouse", "draw the mouse pointer", OFFSET(draw_mouse), AV_OPT_TYPE_INT, {.i64 = 1}, 0, 1, DEC }, - - { "follow_mouse", "move the grabbing region when the mouse pointer reaches within specified amount of pixels to the edge of region", - OFFSET(follow_mouse), AV_OPT_TYPE_INT, {.i64 = 0}, -1, INT_MAX, DEC, "follow_mouse" }, - { "centered", "keep the mouse pointer at the center of grabbing region when following", - 0, AV_OPT_TYPE_CONST, {.i64 = -1}, INT_MIN, INT_MAX, DEC, "follow_mouse" }, - - { "framerate", "set video frame rate", OFFSET(framerate), AV_OPT_TYPE_VIDEO_RATE, {.str = "ntsc"}, 0, INT_MAX, DEC }, - { "show_region", "show the grabbing region", OFFSET(show_region), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, DEC }, - { "video_size", "set video frame size", OFFSET(width), AV_OPT_TYPE_IMAGE_SIZE, {.str = "vga"}, 0, 0, DEC }, - { "use_shm", "use MIT-SHM extension", OFFSET(use_shm), AV_OPT_TYPE_INT, {.i64 = 1}, 0, 1, DEC }, - { NULL }, -}; - -static const AVClass x11_class = { - .class_name = "X11grab indev", - .item_name = av_default_item_name, - .option = options, - .version = LIBAVUTIL_VERSION_INT, - .category = AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT, -}; - -/** x11 grabber device demuxer declaration */ -AVInputFormat ff_x11grab_demuxer = { - .name = "x11grab", - .long_name = NULL_IF_CONFIG_SMALL("X11grab"), - .priv_data_size = sizeof(X11GrabContext), - .read_header = x11grab_read_header, - .read_packet = x11grab_read_packet, - .read_close = x11grab_read_close, - .flags = AVFMT_NOFILE, - .priv_class = &x11_class, -}; ====================================================================== diff --cc Changelog index b9d1a3c,0d04f47..ca6f404 --- a/Changelog +++ b/Changelog @@@ -2,286 -2,17 +2,288 @@@ Entries are sorted chronologically fro releases are sorted from youngest to oldest. version <next>: -- aliases and defaults for Ogg subtypes (opus, spx) -- HEVC/H.265 RTP payload format (draft v6) packetizer and depacketizer -- avplay now exits by default at the end of playback -- XCB-based screen-grabber -- creating DASH compatible fragmented MP4, MPEG-DASH segmenting muxer -- H.261 RTP payload format (RFC 4587) depacketizer and experimental packetizer +- CrystalHD decoder moved to new decode API +- add internal ebur128 library, remove external libebur128 dependency +- Pro-MPEG CoP #3-R2 FEC protocol +- premultiply video filter +- Support for spherical videos +- configure now fails if autodetect-libraries are requested but not found +- PSD Decoder +- 16.8 floating point pcm decoder +- 24.0 floating point pcm decoder +- Apple Pixlet decoder +- QDMC audio decoder +- NewTek SpeedHQ decoder +- MIDI Sample Dump Standard demuxer +- readeia608 filter +- Sample Dump eXchange demuxer +- abitscope multimedia filter +- Scenarist Closed Captions demuxer and muxer +- threshold filter +- midequalizer filter +- Optimal Huffman tables for (M)JPEG encoding +- FM Screen Capture Codec decoder +- native Opus encoder +- ScreenPressor decoder +- incomplete ClearVideo decoder +- Intel QSV video scaling and deinterlacing filters +- XPM decoder ++- Removed the legacy X11 screen grabber, use XCB instead ++ + +version 3.2: +- libopenmpt demuxer +- tee protocol +- Changed metadata print option to accept general urls +- Alias muxer for Ogg Video (.ogv) +- VP8 in Ogg muxing +- curves filter doesn't automatically insert points at x=0 and x=1 anymore +- 16-bit support in curves filter and selectivecolor filter +- OpenH264 decoder wrapper +- MediaCodec H.264/HEVC/MPEG-4/VP8/VP9 hwaccel +- True Audio (TTA) muxer +- crystalizer audio filter +- acrusher audio filter +- bitplanenoise video filter +- floating point support in als decoder +- fifo muxer +- maskedclamp filter +- hysteresis filter +- lut2 filter +- yuvtestsrc filter +- CUDA CUVID H.263/VP8/VP9/10 bit HEVC (Dithered) Decoding +- vaguedenoiser filter +- added threads option per filter instance +- weave filter +- gblur filter +- avgblur filter +- sobel and prewitt filter +- MediaCodec HEVC/MPEG-4/VP8/VP9 decoding +- Meridian Lossless Packing (MLP) / TrueHD encoder +- Non-Local Means (nlmeans) denoising filter +- sdl2 output device and ffplay support +- sdl1 output device and sdl1 support removed +- extended mov edit list support +- libfaac encoder removed +- Matroska muxer now writes CRC32 elements by default in all Level 1 elements +- sidedata video and asidedata audio filter +- Changed mapping of rtp MIME type G726 to codec g726le. +- spec compliant VAAPI/DXVA2 VC-1 decoding of slices in frame-coded images + + +version 3.1: +- DXVA2-accelerated HEVC Main10 decoding +- fieldhint filter +- loop video filter and aloop audio filter +- Bob Weaver deinterlacing filter +- firequalizer filter +- datascope filter +- bench and abench filters +- ciescope filter +- protocol blacklisting API +- MediaCodec H264 decoding +- VC-2 HQ RTP payload format (draft v1) depacketizer and packetizer +- VP9 RTP payload format (draft v2) packetizer +- AudioToolbox audio decoders +- AudioToolbox audio encoders +- coreimage filter (GPU based image filtering on OSX) +- libdcadec removed +- bitstream filter for extracting DTS core +- ADPCM IMA DAT4 decoder +- musx demuxer +- aix demuxer +- remap filter +- hash and framehash muxers +- colorspace filter +- hdcd filter +- readvitc filter +- VAAPI-accelerated format conversion and scaling +- libnpp/CUDA-accelerated format conversion and scaling +- Duck TrueMotion 2.0 Real Time decoder +- Wideband Single-bit Data (WSD) demuxer +- VAAPI-accelerated H.264/HEVC/MJPEG encoding +- DTS Express (LBR) decoder +- Generic OpenMAX IL encoder with support for Raspberry Pi +- IFF ANIM demuxer & decoder +- Direct Stream Transfer (DST) decoder +- loudnorm filter +- MTAF demuxer and decoder +- MagicYUV decoder +- OpenExr improvements (tile data and B44/B44A support) +- BitJazz SheerVideo decoder +- CUDA CUVID H264/HEVC decoder +- 10-bit depth support in native utvideo decoder +- libutvideo wrapper removed +- YUY2 Lossless Codec decoder +- VideoToolbox H.264 encoder +- VAAPI-accelerated MPEG-2 and VP8 encoding + + +version 3.0: +- Common Encryption (CENC) MP4 encoding and decoding support +- DXV decoding +- extrastereo filter +- ocr filter +- alimiter filter +- stereowiden filter +- stereotools filter +- rubberband filter +- tremolo filter +- agate filter +- chromakey filter +- maskedmerge filter +- Screenpresso SPV1 decoding +- chromaprint fingerprinting muxer +- ffplay dynamic volume control +- displace filter +- selectivecolor filter +- extensive native AAC encoder improvements and removal of experimental flag +- ADPCM PSX decoder +- 3dostr, dcstr, fsb, genh, vag, xvag, ads, msf, svag & vpk demuxer +- zscale filter +- wve demuxer +- zero-copy Intel QSV transcoding in ffmpeg +- shuffleframes filter +- SDX2 DPCM decoder +- vibrato filter +- innoHeim/Rsupport Screen Capture Codec decoder +- ADPCM AICA decoder +- Interplay ACM demuxer and audio decoder +- XMA1 & XMA2 decoder +- realtime filter +- anoisesrc audio filter source +- IVR demuxer +- compensationdelay filter +- acompressor filter +- support encoding 16-bit RLE SGI images +- apulsator filter +- sidechaingate audio filter +- mipsdspr1 option has been renamed to mipsdsp +- aemphasis filter +- mips32r5 option has been removed +- mips64r6 option has been removed +- DXVA2-accelerated VP9 decoding +- SOFAlizer: virtual binaural acoustics filter +- VAAPI VP9 hwaccel +- audio high-order multiband parametric equalizer +- automatic bitstream filtering +- showspectrumpic filter +- libstagefright support removed +- spectrumsynth filter +- ahistogram filter +- only seek with the right mouse button in ffplay +- toggle full screen when double-clicking with the left mouse button in ffplay +- afftfilt filter +- convolution filter +- libquvi support removed +- support for dvaudio in wav and avi +- libaacplus and libvo-aacenc support removed +- Cineform HD decoder +- new DCA decoder with full support for DTS-HD extensions +- significant performance improvements in Windows Television (WTV) demuxer +- nnedi deinterlacer +- streamselect video and astreamselect audio filter +- swaprect filter +- metadata video and ametadata audio filter +- SMPTE VC-2 HQ profile support for the Dirac decoder +- SMPTE VC-2 native encoder supporting the HQ profile + + +version 2.8: +- colorkey video filter +- BFSTM/BCSTM demuxer +- little-endian ADPCM_THP decoder +- Hap decoder and encoder +- DirectDraw Surface image/texture decoder +- ssim filter +- optional new ASF demuxer +- showvolume filter +- Many improvements to the JPEG 2000 decoder +- Go2Meeting decoding support +- adrawgraph audio and drawgraph video filter +- removegrain video filter +- Intel QSV-accelerated MPEG-2 video and HEVC encoding +- Intel QSV-accelerated MPEG-2 video and HEVC decoding +- Intel QSV-accelerated VC-1 video decoding +- libkvazaar HEVC encoder +- erosion, dilation, deflate and inflate video filters +- Dynamic Audio Normalizer as dynaudnorm filter +- Reverse video and areverse audio filter +- Random filter +- deband filter +- AAC fixed-point decoding +- sidechaincompress audio filter +- bitstream filter for converting HEVC from MP4 to Annex B +- acrossfade audio filter +- allyuv and allrgb video sources +- atadenoise video filter +- OS X VideoToolbox support +- aphasemeter filter +- showfreqs filter +- vectorscope filter +- waveform filter +- hstack and vstack filter +- Support DNx100 (1440x1080@8) +- VAAPI hevc hwaccel +- VDPAU hevc hwaccel +- framerate filter +- Switched default encoders for webm to VP9 and Opus +- Removed experimental flag from the JPEG 2000 encoder + + +version 2.7: +- FFT video filter +- TDSC decoder +- DTS lossless extension (XLL) decoding (not lossless, disabled by default) +- showwavespic filter +- DTS decoding through libdcadec +- Drop support for nvenc API before 5.0 +- nvenc HEVC encoder +- Detelecine filter +- Intel QSV-accelerated H.264 encoding +- MMAL-accelerated H.264 decoding +- basic APNG encoder and muxer with default extension "apng" +- unpack DivX-style packed B-frames in MPEG-4 bitstream filter +- WebM Live Chunk Muxer +- nvenc level and tier options +- chorus filter +- Canopus HQ/HQA decoder +- Automatically rotate videos based on metadata in ffmpeg +- improved Quickdraw compatibility +- VP9 high bit-depth and extended colorspaces decoding support +- WebPAnimEncoder API when available for encoding and muxing WebP +- Direct3D11-accelerated decoding +- Support Secure Transport +- Multipart JPEG demuxer + + +version 2.6: +- nvenc encoder +- 10bit spp filter +- colorlevels filter +- RIFX format for *.wav files - RTP/mpegts muxer -- VP8 in Ogg demuxing +- non continuous cache protocol support +- tblend filter +- cropdetect support for non 8bpp, absolute (if limit >= 1) and relative (if limit < 1.0) threshold +- Camellia symmetric block cipher - OpenH264 encoder wrapper +- VOC seeking support +- Closed caption Decoder +- fspp, uspp, pp7 MPlayer postprocessing filters ported to native filters +- showpalette filter +- Twofish symmetric block cipher - Support DNx100 (960x720@8) -- Direct3D11-accelerated decoding +- eq2 filter ported from libmpcodecs as eq filter +- removed libmpcodecs +- Changed default DNxHD colour range in QuickTime .mov derivatives to mpeg range +- ported softpulldown filter from libmpcodecs as repeatfields filter +- dcshift filter +- RTP depacketizer for loss tolerant payload format for MP3 audio (RFC 5219) +- RTP depacketizer for AC3 payload format (RFC 4184) +- palettegen and paletteuse filters +- VP9 RTP payload format (draft 0) experimental depacketizer +- RTP depacketizer for DV (RFC 6469) - DXVA2-accelerated HEVC decoding - AAC ELD 480 decoding - Intel QSV-accelerated H.264 decoding diff --cc LICENSE.md index 640633c,0000000..ba65b05 mode 100644,000000..100644 --- a/LICENSE.md +++ b/LICENSE.md @@@ -1,121 -1,0 +1,120 @@@ +# License + +Most files in FFmpeg are under the GNU Lesser General Public License version 2.1 +or later (LGPL v2.1+). Read the file `COPYING.LGPLv2.1` for details. Some other +files have MIT/X11/BSD-style licenses. In combination the LGPL v2.1+ applies to +FFmpeg. + +Some optional parts of FFmpeg are licensed under the GNU General Public License +version 2 or later (GPL v2+). See the file `COPYING.GPLv2` for details. None of +these parts are used by default, you have to explicitly pass `--enable-gpl` to +configure to activate them. In this case, FFmpeg's license changes to GPL v2+. + +Specifically, the GPL parts of FFmpeg are: + +- libpostproc +- optional x86 optimization in the files + - `libavcodec/x86/flac_dsp_gpl.asm` + - `libavcodec/x86/idct_mmx.c` + - `libavfilter/x86/vf_removegrain.asm` - - the X11 grabber in `libavdevice/x11grab.c` +- the following building and testing tools + - `compat/solaris/make_sunver.pl` + - `doc/t2h.pm` + - `doc/texi2pod.pl` + - `libswresample/swresample-test.c` + - `tests/checkasm/*` + - `tests/tiny_ssim.c` +- the following filters in libavfilter: + - `vf_blackframe.c` + - `vf_boxblur.c` + - `vf_colormatrix.c` + - `vf_cover_rect.c` + - `vf_cropdetect.c` + - `vf_delogo.c` + - `vf_eq.c` + - `vf_find_rect.c` + - `vf_fspp.c` + - `vf_geq.c` + - `vf_histeq.c` + - `vf_hqdn3d.c` + - `vf_interlace.c` + - `vf_kerndeint.c` + - `vf_mcdeint.c` + - `vf_mpdecimate.c` + - `vf_owdenoise.c` + - `vf_perspective.c` + - `vf_phase.c` + - `vf_pp.c` + - `vf_pp7.c` + - `vf_pullup.c` + - `vf_repeatfields.c` + - `vf_sab.c` + - `vf_smartblur.c` + - `vf_spp.c` + - `vf_stereo3d.c` + - `vf_super2xsai.c` + - `vf_tinterlace.c` + - `vf_uspp.c` + - `vsrc_mptestsrc.c` + +Should you, for whatever reason, prefer to use version 3 of the (L)GPL, then +the configure parameter `--enable-version3` will activate this licensing option +for you. Read the file `COPYING.LGPLv3` or, if you have enabled GPL parts, +`COPYING.GPLv3` to learn the exact legal terms that apply in this case. + +There are a handful of files under other licensing terms, namely: + +* The files `libavcodec/jfdctfst.c`, `libavcodec/jfdctint_template.c` and + `libavcodec/jrevdct.c` are taken from libjpeg, see the top of the files for + licensing details. Specifically note that you must credit the IJG in the + documentation accompanying your program if you only distribute executables. + You must also indicate any changes including additions and deletions to + those three files in the documentation. +* `tests/reference.pnm` is under the expat license. + + +## External libraries + +FFmpeg can be combined with a number of external libraries, which sometimes +affect the licensing of binaries resulting from the combination. + +### Compatible libraries + +The following libraries are under GPL: +- frei0r +- libcdio +- librubberband +- libvidstab +- libx264 +- libx265 +- libxavs +- libxvid + +When combining them with FFmpeg, FFmpeg needs to be licensed as GPL as well by +passing `--enable-gpl` to configure. + +The OpenCORE and VisualOn libraries are under the Apache License 2.0. That +license is incompatible with the LGPL v2.1 and the GPL v2, but not with +version 3 of those licenses. So to combine these libraries with FFmpeg, the +license version needs to be upgraded by passing `--enable-version3` to configure. + +### Incompatible libraries + +There are certain libraries you can combine with FFmpeg whose licenses are not +compatible with the GPL and/or the LGPL. If you wish to enable these +libraries, even in circumstances that their license may be incompatible, pass +`--enable-nonfree` to configure. But note that if you enable any of these +libraries the resulting binary will be under a complex license mix that is +more restrictive than the LGPL and that may result in additional obligations. +It is possible that these restrictions cause the resulting binary to be +unredistributable. + +The Fraunhofer FDK AAC and OpenSSL libraries are under licenses which are +incompatible with the GPLv2 and v3. To the best of our knowledge, they are +compatible with the LGPL. + +The NVENC library, while its header file is licensed under the compatible MIT +license, requires a proprietary binary blob at run time, and is deemed to be +incompatible with the GPL. We are not certain if it is compatible with the +LGPL, but we require `--enable-nonfree` even with LGPL configurations in case +it is not. diff --cc configure index 68cc0c8,45f5256..488e803 --- a/configure +++ b/configure @@@ -198,118 -182,66 +198,117 @@@ External library support libraries must be explicitly enabled. Also note that the following help text describes the purpose of the libraries - themselves, not all their features will necessarily be usable by Libav. - - --enable-avisynth video frameserver - --enable-bzlib bzip2 compression [autodetect] - --enable-frei0r video filtering plugins - --enable-gnutls crypto - --enable-libbs2b Bauer stereophonic-to-binaural DSP - --enable-libcdio audio CD input - --enable-libdc1394 IEEE 1394/Firewire camera input - --enable-libdcadec DCA audio decoding - --enable-libfaac AAC audio encoding - --enable-libfdk-aac AAC audio encoding/decoding - --enable-libfontconfig font configuration and management - --enable-libfreetype font rendering - --enable-libgsm GSM audio encoding/decoding - --enable-libilbc ILBC audio encoding/decoding - --enable-libkvazaar HEVC video encoding - --enable-libmp3lame MP3 audio encoding - --enable-libopencore-amrnb AMR-NB audio encoding/decoding - --enable-libopencore-amrwb AMR-WB audio decoding - --enable-libopencv computer vision - --enable-libopenh264 H.264 video encoding/decoding - --enable-libopenjpeg JPEG 2000 image encoding/decoding - --enable-libopus Opus audio encoding/decoding - --enable-libpulse Pulseaudio sound server - --enable-librtmp RTMP streaming - --enable-libschroedinger Dirac video encoding/decoding - --enable-libsnappy snappy compression - --enable-libspeex Speex audio encoding/decoding - --enable-libtheora Theora video encoding/decoding - --enable-libtwolame MP2 audio encoding - --enable-libvo-aacenc AAC audio encoding - --enable-libvo-amrwbenc AMR-WB audio encoding - --enable-libvorbis Vorbis audio encoding/decoding - --enable-libvpx VP* video encoding/decoding - --enable-libwavpack Wavpack audio encoding/decoding - --enable-libwebp WebP image encoding/decoding - --enable-libx264 H.264 video encoding - --enable-libx265 HEVC video encoding - --enable-libxavs Chinese AVS video encoding - --enable-libxcb X window system protocol communication - --enable-libxcb-shm X11 shm communication [auto] - --enable-libxcb-xfixes X11 mouse rendering [auto] - --enable-libxvid MPEG-4 ASP video encoding - --enable-openssl crypto - --enable-zlib compression [autodetect] + themselves, not all their features will necessarily be usable by FFmpeg. + + --enable-avisynth enable reading of AviSynth script files [no] + --disable-bzlib disable bzlib [autodetect] + --enable-chromaprint enable audio fingerprinting with chromaprint [no] + --enable-frei0r enable frei0r video filtering [no] + --enable-gcrypt enable gcrypt, needed for rtmp(t)e support + if openssl, librtmp or gmp is not used [no] + --enable-gmp enable gmp, needed for rtmp(t)e support + if openssl or librtmp is not used [no] + --enable-gnutls enable gnutls, needed for https support + if openssl is not used [no] + --disable-iconv disable iconv [autodetect] + --enable-jni enable JNI support [no] + --enable-ladspa enable LADSPA audio filtering [no] + --enable-libass enable libass subtitles rendering, + needed for subtitles and ass filter [no] + --enable-libbluray enable BluRay reading using libbluray [no] + --enable-libbs2b enable bs2b DSP library [no] + --enable-libcaca enable textual display using libcaca [no] + --enable-libcelt enable CELT decoding via libcelt [no] + --enable-libcdio enable audio CD grabbing with libcdio [no] + --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394 + and libraw1394 [no] + --enable-libfdk-aac enable AAC de/encoding via libfdk-aac [no] + --enable-libflite enable flite (voice synthesis) support via libflite [no] + --enable-libfontconfig enable libfontconfig, useful for drawtext filter [no] + --enable-libfreetype enable libfreetype, needed for drawtext filter [no] + --enable-libfribidi enable libfribidi, improves drawtext filter [no] + --enable-libgme enable Game Music Emu via libgme [no] + --enable-libgsm enable GSM de/encoding via libgsm [no] + --enable-libiec61883 enable iec61883 via libiec61883 [no] + --enable-libilbc enable iLBC de/encoding via libilbc [no] + --enable-libkvazaar enable HEVC encoding via libkvazaar [no] + --enable-libmodplug enable ModPlug via libmodplug [no] + --enable-libmp3lame enable MP3 encoding via libmp3lame [no] + --enable-libnut enable NUT (de)muxing via libnut, + native (de)muxer exists [no] + --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no] + --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no] + --enable-libopencv enable video filtering via libopencv [no] + --enable-libopenh264 enable H.264 encoding via OpenH264 [no] + --enable-libopenjpeg enable JPEG 2000 de/encoding via OpenJPEG [no] + --enable-libopenmpt enable decoding tracked files via libopenmpt [no] + --enable-libopus enable Opus de/encoding via libopus [no] + --enable-libpulse enable Pulseaudio input via libpulse [no] + --enable-librubberband enable rubberband needed for rubberband filter [no] + --enable-librtmp enable RTMP[E] support via librtmp [no] + --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no] + --enable-libshine enable fixed-point MP3 encoding via libshine [no] + --enable-libsmbclient enable Samba protocol via libsmbclient [no] + --enable-libsnappy enable Snappy compression, needed for hap encoding [no] + --enable-libsoxr enable Include libsoxr resampling [no] + --enable-libspeex enable Speex de/encoding via libspeex [no] + --enable-libssh enable SFTP protocol via libssh [no] + --enable-libtesseract enable Tesseract, needed for ocr filter [no] + --enable-libtheora enable Theora encoding via libtheora [no] + --enable-libtwolame enable MP2 encoding via libtwolame [no] + --enable-libv4l2 enable libv4l2/v4l-utils [no] + --enable-libvidstab enable video stabilization using vid.stab [no] + --enable-libvo-amrwbenc enable AMR-WB encoding via libvo-amrwbenc [no] + --enable-libvorbis enable Vorbis en/decoding via libvorbis, + native implementation exists [no] + --enable-libvpx enable VP8 and VP9 de/encoding via libvpx [no] + --enable-libwavpack enable wavpack encoding via libwavpack [no] + --enable-libwebp enable WebP encoding via libwebp [no] + --enable-libx264 enable H.264 encoding via x264 [no] + --enable-libx265 enable HEVC encoding via x265 [no] + --enable-libxavs enable AVS encoding via xavs [no] + --enable-libxcb enable X11 grabbing using XCB [autodetect] + --enable-libxcb-shm enable X11 grabbing shm communication [autodetect] + --enable-libxcb-xfixes enable X11 grabbing mouse rendering [autodetect] + --enable-libxcb-shape enable X11 grabbing shape rendering [autodetect] + --enable-libxvid enable Xvid encoding via xvidcore, + native MPEG-4/Xvid encoder exists [no] + --enable-libzimg enable z.lib, needed for zscale filter [no] + --enable-libzmq enable message passing via libzmq [no] + --enable-libzvbi enable teletext support via libzvbi [no] + --disable-lzma disable lzma [autodetect] + --enable-decklink enable Blackmagic DeckLink I/O support [no] + --enable-mediacodec enable Android MediaCodec support [no] + --enable-netcdf enable NetCDF, needed for sofalizer filter [no] + --enable-openal enable OpenAL 1.1 capture support [no] + --enable-opencl enable OpenCL code + --enable-opengl enable OpenGL rendering [no] + --enable-openssl enable openssl, needed for https support + if gnutls is not used [no] + --disable-schannel disable SChannel SSP, needed for TLS support on + Windows if openssl and gnutls are not used [autodetect] + --disable-sdl2 disable sdl2 [autodetect] + --disable-securetransport disable Secure Transport, needed for TLS support + on OSX if openssl and gnutls are not used [autodetect] - --enable-x11grab enable X11 grabbing (legacy) [no] + --disable-xlib disable xlib [autodetect] + --disable-zlib disable zlib [autodetect] The following libraries provide various hardware acceleration features: - --enable-cuda Nvidia CUDA (dynamically linked) - --enable-d3d11va Microsoft Direct3D 11 video acceleration [auto] - --enable-dxva2 Microsoft DirectX 9 video acceleration [auto] - --enable-libmfx Intel MediaSDK (AKA Quick Sync Video) - --enable-libnpp Nvidia CUDA processing - --enable-mmal Broadcom Multi-Media Abstraction Layer (Raspberry Pi) - --enable-nvenc Nvidia video encoding - --enable-omx OpenMAX IL - --enable-omx-rpi OpenMAX IL for Raspberry Pi - --enable-vaapi Video Acceleration API (mainly Unix/Intel) - --enable-vda Apple Video Decode Acceleration [auto] - --enable-vdpau Nvidia Video Decode and Presentation API for Unix [auto] + --disable-audiotoolbox disable Apple AudioToolbox code [autodetect] + --disable-cuda disable dynamically linked Nvidia CUDA code [autodetect] + --disable-cuvid disable Nvidia CUVID support [autodetect] + --disable-d3d11va disable Microsoft Direct3D 11 video acceleration code [autodetect] + --disable-dxva2 disable Microsoft DirectX 9 video acceleration code [autodetect] + --enable-libmfx enable Intel MediaSDK (AKA Quick Sync Video) code via libmfx [no] + --enable-libnpp enable Nvidia Performance Primitives-based code [no] + --enable-mmal enable Broadcom Multi-Media Abstraction Layer (Raspberry Pi) via MMAL [no] + --disable-nvenc disable Nvidia video encoding code [autodetect] + --enable-omx enable OpenMAX IL code [no] + --enable-omx-rpi enable OpenMAX IL code for Raspberry Pi [no] + --disable-vaapi disable Video Acceleration API (mainly Unix/Intel) code [autodetect] + --disable-vda disable Apple Video Decode Acceleration code [autodetect] + --disable-vdpau disable Nvidia Video Decode and Presentation API for Unix code [autodetect] + --disable-videotoolbox disable VideoToolbox code [autodetect] Toolchain options: --arch=ARCH select architecture [$arch] @@@ -3022,25 -2362,14 +3020,24 @@@ opengl_outdev_deps="opengl oss_indev_deps_any="soundcard_h sys_soundcard_h" oss_outdev_deps_any="soundcard_h sys_soundcard_h" pulse_indev_deps="libpulse" +pulse_outdev_deps="libpulse" +qtkit_indev_extralibs="-framework QTKit -framework Foundation -framework QuartzCore" +qtkit_indev_select="qtkit" +sdl2_outdev_deps="sdl2" sndio_indev_deps="sndio_h" sndio_outdev_deps="sndio_h" +v4l_indev_deps="linux_videodev_h" v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h" +v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h" vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines" vfwcap_indev_extralibs="-lavicap32" - x11grab_indev_deps="x11grab" x11grab_xcb_indev_deps="libxcb" +xv_outdev_deps="X11_extensions_Xvlib_h XvGetPortAttribute" +xv_outdev_extralibs="-lXv -lX11 -lXext" # protocols +async_protocol_deps="threads" +bluray_protocol_deps="libbluray" ffrtmpcrypt_protocol_deps="!librtmp_protocol" ffrtmpcrypt_protocol_deps_any="gcrypt gmp openssl" ffrtmpcrypt_protocol_select="tcp_protocol" @@@ -6029,57 -4747,27 +6026,51 @@@ if enabled libcdio; the die "ERROR: No usable libcdio/cdparanoia found" fi -check_lib X11/Xlib.h XOpenDisplay -lX11 && enable xlib +enabled xlib && + check_lib X11/Xlib.h XOpenDisplay -lX11 || disable xlib -if enabled libxcb; then - check_pkg_config xcb-shape xcb/shape.h xcb_shape_rectangles || { - enabled libxcb && die "ERROR: libxcb not found"; +if ! disabled libxcb; then + check_pkg_config "xcb >= 1.4" xcb/xcb.h xcb_connect || { + enabled libxcb && die "ERROR: libxcb >= 1.4 not found"; - } && disable x11grab && enable libxcb + } && enable libxcb - disabled libxcb_shm || +if enabled libxcb; then + disabled libxcb_shm || { check_pkg_config xcb-shm xcb/shm.h xcb_shm_attach || { enabled libxcb_shm && die "ERROR: libxcb_shm not found"; - } && check_header sys/shm.h && enable libxcb_shm + } && check_header sys/shm.h && enable libxcb_shm; } - disabled libxcb_xfixes || + disabled libxcb_xfixes || { check_pkg_config xcb-xfixes xcb/xfixes.h xcb_xfixes_get_cursor_image || { enabled libxcb_xfixes && die "ERROR: libxcb_xfixes not found"; - } && enable libxcb_xfixes + } && enable libxcb_xfixes; } + + disabled libxcb_shape || { + check_pkg_config xcb-shape xcb/shape.h xcb_shape_get_rectangles || { + enabled libxcb_shape && die "ERROR: libxcb_shape not found"; + } && enable libxcb_shape; } - add_cflags "$xcb_event_cflags $xcb_shm_cflags $xcb_xfixes_cflags" - add_extralibs "$xcb_event_libs $xcb_shm_libs $xcb_xfixes_libs" + add_cflags $xcb_cflags $xcb_shm_cflags $xcb_xfixes_cflags $xcb_shape_cflags + add_extralibs $xcb_libs $xcb_shm_libs $xcb_xfixes_libs $xcb_shape_libs +fi fi - if enabled x11grab; then - enabled xlib || die "ERROR: Xlib not found" - require Xext X11/extensions/XShm.h XShmCreateImage -lXext - require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes - fi - +check_func_headers "windows.h" CreateDIBSection "$gdigrab_indev_extralibs" + +enabled dxva2api_h && + check_cc <<EOF && enable dxva2api_cobj +#define _WIN32_WINNT 0x0600 +#define COBJMACROS +#include <windows.h> +#include <d3d9.h> +#include <dxva2api.h> +int main(void) { IDirectXVideoDecoder *o = NULL; IDirectXVideoDecoder_Release(o); return 0; } +EOF + +enabled vaapi && + check_lib va/va.h vaInitialize -lva || + disable vaapi + enabled vaapi && check_code cc "va/va.h" "vaCreateSurfaces(0, 0, 0, 0, 0, 0, 0, 0)" || disable vaapi diff --cc libavdevice/Makefile index 256e140,a4c96ef..90ebc95 --- a/libavdevice/Makefile +++ b/libavdevice/Makefile @@@ -12,44 -9,21 +12,43 @@@ OBJS = alldevices. OBJS-$(HAVE_LIBC_MSVCRT) += file_open.o # input/output devices -OBJS-$(CONFIG_ALSA_INDEV) += alsa_dec.o alsa.o +OBJS-$(CONFIG_ALSA_INDEV) += alsa_dec.o alsa.o timefilter.o OBJS-$(CONFIG_ALSA_OUTDEV) += alsa_enc.o alsa.o -OBJS-$(CONFIG_AVFOUNDATION_INDEV) += avfoundation_dec.o +OBJS-$(CONFIG_AVFOUNDATION_INDEV) += avfoundation.o OBJS-$(CONFIG_BKTR_INDEV) += bktr.o +OBJS-$(CONFIG_CACA_OUTDEV) += caca.o +OBJS-$(CONFIG_DECKLINK_OUTDEV) += decklink_enc.o decklink_enc_c.o decklink_common.o +OBJS-$(CONFIG_DECKLINK_INDEV) += decklink_dec.o decklink_dec_c.o decklink_common.o +OBJS-$(CONFIG_DSHOW_INDEV) += dshow_crossbar.o dshow.o dshow_enummediatypes.o \ + dshow_enumpins.o dshow_filter.o \ + dshow_pin.o dshow_common.o OBJS-$(CONFIG_DV1394_INDEV) += dv1394.o -OBJS-$(CONFIG_FBDEV_INDEV) += fbdev.o +OBJS-$(CONFIG_FBDEV_INDEV) += fbdev_dec.o \ + fbdev_common.o +OBJS-$(CONFIG_FBDEV_OUTDEV) += fbdev_enc.o \ + fbdev_common.o +OBJS-$(CONFIG_GDIGRAB_INDEV) += gdigrab.o +OBJS-$(CONFIG_IEC61883_INDEV) += iec61883.o OBJS-$(CONFIG_JACK_INDEV) += jack.o timefilter.o +OBJS-$(CONFIG_LAVFI_INDEV) += lavfi.o +OBJS-$(CONFIG_OPENAL_INDEV) += openal-dec.o +OBJS-$(CONFIG_OPENGL_OUTDEV) += opengl_enc.o OBJS-$(CONFIG_OSS_INDEV) += oss_dec.o oss.o OBJS-$(CONFIG_OSS_OUTDEV) += oss_enc.o oss.o -OBJS-$(CONFIG_PULSE_INDEV) += pulse.o +OBJS-$(CONFIG_PULSE_INDEV) += pulse_audio_dec.o \ + pulse_audio_common.o timefilter.o +OBJS-$(CONFIG_PULSE_OUTDEV) += pulse_audio_enc.o \ + pulse_audio_common.o +OBJS-$(CONFIG_QTKIT_INDEV) += qtkit.o +OBJS-$(CONFIG_SDL2_OUTDEV) += sdl2.o OBJS-$(CONFIG_SNDIO_INDEV) += sndio_dec.o sndio.o OBJS-$(CONFIG_SNDIO_OUTDEV) += sndio_enc.o sndio.o -OBJS-$(CONFIG_V4L2_INDEV) += v4l2.o +OBJS-$(CONFIG_V4L2_INDEV) += v4l2.o v4l2-common.o timefilter.o +OBJS-$(CONFIG_V4L2_OUTDEV) += v4l2enc.o v4l2-common.o +OBJS-$(CONFIG_V4L_INDEV) += v4l.o OBJS-$(CONFIG_VFWCAP_INDEV) += vfwcap.o - OBJS-$(CONFIG_X11GRAB_INDEV) += x11grab.o OBJS-$(CONFIG_X11GRAB_XCB_INDEV) += xcbgrab.o +OBJS-$(CONFIG_XV_OUTDEV) += xv.o # external libraries OBJS-$(CONFIG_LIBCDIO_INDEV) += libcdio.o diff --cc libavdevice/alldevices.c index 75f4ae0,8541dba..f8f31ed --- a/libavdevice/alldevices.c +++ b/libavdevice/alldevices.c @@@ -44,28 -50,15 +44,27 @@@ static void register_all(void REGISTER_INOUTDEV(ALSA, alsa); REGISTER_INDEV (AVFOUNDATION, avfoundation); REGISTER_INDEV (BKTR, bktr); + REGISTER_OUTDEV (CACA, caca); + REGISTER_INOUTDEV(DECKLINK, decklink); + REGISTER_INDEV (DSHOW, dshow); REGISTER_INDEV (DV1394, dv1394); - REGISTER_INDEV (FBDEV, fbdev); + REGISTER_INOUTDEV(FBDEV, fbdev); + REGISTER_INDEV (GDIGRAB, gdigrab); + REGISTER_INDEV (IEC61883, iec61883); REGISTER_INDEV (JACK, jack); + REGISTER_INDEV (LAVFI, lavfi); + REGISTER_INDEV (OPENAL, openal); + REGISTER_OUTDEV (OPENGL, opengl); REGISTER_INOUTDEV(OSS, oss); - REGISTER_INDEV (PULSE, pulse); + REGISTER_INOUTDEV(PULSE, pulse); + REGISTER_INDEV (QTKIT, qtkit); + REGISTER_OUTDEV (SDL2, sdl2); REGISTER_INOUTDEV(SNDIO, sndio); - REGISTER_INDEV (V4L2, v4l2); + REGISTER_INOUTDEV(V4L2, v4l2); +// REGISTER_INDEV (V4L, v4l REGISTER_INDEV (VFWCAP, vfwcap); - REGISTER_INDEV (X11GRAB, x11grab); REGISTER_INDEV (X11GRAB_XCB, x11grab_xcb); + REGISTER_OUTDEV (XV, xv); /* external libraries */ REGISTER_INDEV (LIBCDIO, libcdio); _______________________________________________ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog