• Nicolas George's avatar
    lavd/xcbgrab: do not try to create refcounted packets. · 0bd1be65
    Nicolas George authored
    The framework will allocate a buffer and copy the data to it,
    that takes time. But it avoids constently creating and
    destroyng the shared memory segment, and that saves more time.
    
    On my setup,
    from ~200 to ~300 FPS at full screen (1920×1200),
    from ~1400 to ~3300 at smaller size (640×480),
    similar to legacy x11grab and confirmed by others.
    
    Plus, shared memory segments are a scarce resource,
    allocating potentially many is a bad idea.
    
    Note: if the application were to drop all references to the
    buffer before the next call to av_read_frame(), then passing
    the shared memory segment as a refcounted buffer would be
    even more efficient, but it is hard to guarantee, and it does
    not happen with the ffmpeg command-line tool. Using a small
    number of preallocated buffers and resorting to a copy when
    the pool is exhausted would be a solution to get the better
    of both worlds.
    0bd1be65
xcbgrab.c 19.7 KB