Commit Graph

10 Commits

Author SHA1 Message Date
Chris Michael
2ec5f2a633 cosmetic: Remove use of C++ style comments
Patch updated to remove dead lines as suggested by Daniel Stone

Signed-off-by: Chris Michael <cp.michael@samsung.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
2015-12-03 15:28:53 -08:00
Lucas Tanure
bfae30d814 vaapi-recorder: Fix allocator sizeof operand mismatch
Result of 'calloc' is converted to a pointer of type 'unsigned int', which is
incompatible with sizeof operand type 'int'

Signed-off-by: Lucas Tanure <tanure@linux.com>
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
2015-09-22 17:22:19 -07:00
Bryce Harrington
73ad676a54 vaapi-recorder: Drop redundant license
This file was provided under both the Expat and X11 variants of the MIT
license.  We don't need the latter, so remove it and leave just Expat.
And reformat the Expat license so it matches our standard boilerplate.
2015-06-15 13:04:19 -07:00
Bryce Harrington
de16d89306 Use zalloc instead of calloc(1, ...)
Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
Reviewed-by: Marek Chalupa <mchqwerty@gmail.com>
2014-11-28 16:13:13 +02:00
Ander Conselvan de Oliveira
2d13fde9c7 vaapi-recorder: Don't loop trying to write on out of space condition
The error handling for the function that writes the encoded frame on
the disk was bogus, always assuming the buffer supplied to the encoder
was too small. That would cause a bigger buffer to be allocated and
another attempt to encode the frame was done. In the case of a failure
to write to disk (due to ENOSPC, for instance) that would cause an
endless loop.

Possibly-related-to: https://bugs.freedesktop.org/show_bug.cgi?id=69330
2014-05-09 14:12:38 -07:00
Andrew Wedgbury
9cd661e746 Make sure config.h is included before any system headers
There was an issue recently in screen-share.c where config.h was not
being included, resulting in the wrong definition for off_t being used on
32 bit systems. I checked and I don't think this problem is happening
elsewhere, but to help avoid this sort of problem in the future, I went
through and made sure that config.h is included first whenever system
headers are included.

The config.h header should be included before any system headers, failing
to do this can result in the wrong type sizes being defined on certain
systems, e.g. off_t from sys/types.h

Signed-off-by: Andrew Wedgbury <andrew.wedgbury@realvnc.com>
2014-04-07 10:22:28 -07:00
Kristian Høgsberg
a2e20c369b vaapi-recorder: Don't leak fd on thread error path
If we successfully open the file but fail to create the thread we
leak the fd.
2013-10-10 16:50:18 -07:00
Ander Conselvan de Oliveira
a62ef3e0b6 vaapi-recorder: Don't leak drm fd
Make vaapi_recorder take onwership of the fd and close it at destroy
time.
2013-09-11 11:55:32 -07:00
Ander Conselvan de Oliveira
b85ded0cb8 vaapi-recorder: Encode frames in a separate thread
Previously, vaapi_recorder_frame() would wait until the encoded
contents for a frame is written to the output file descriptor. This
delayed the repainting of the next frame, and affected frame rate
when capturing with high resolutions. Instead, wait only if there is
and attempted to encode two frames at the same time.

Increases framerate from 30 to 60 fps when capturing at 1920x1200 on
my SandryBridge system, although there are periodic slowdowns due to
disk writes.
2013-09-11 11:55:15 -07:00
Ander Conselvan de Oliveira
6aae4d39d5 compositor-drm: Add hardware accelerated capture of screen using libva
This patch adds a feature to the DRM backend that uses libva for
encoding the screen contents in H.264. Screen recording can be
activated by pressing mod-shift-space q. A file named capture.h264
will be created in the current directory, which can be muxed into
an MP4 file with gstreamer using

gst-launch filesrc location=capture.h264 ! h264parse ! mp4mux ! \
           filesink location=file.mp4

This is limitted to the DRM compositor in order to avoid a copy when
submitting the front buffer to libva. The code in vaapi-recorder.c
takes a dma_buf fd referencing it, does a colorspace conversion using
the video post processing pipeline and then uses that as input to the
encoder.

I'm sending this now so I get comments, but this is not ready for
prime time yet. I have a somewhat consistent GPU hang when using
i915 with SandyBridge. Sometimes a page flip never completes. If you
want to try this anyway and your system get stuck, you might need to
run the following:

  # echo 1 > /sys/kernel/debug/dri/0/i915_wedged

After that, alt-sysrq [rv] should work.

Once that's fixed it would also be good to make the parameters used by
the encoder more flexible. For now the QP parameter is hardcoded to 0
and we have only I and P frames (no B frames), which causes the
resulting files to be very large.
2013-08-30 13:44:40 -07:00