GNOME Bugzilla – Bug 660203
Add webcam support to gnome-shell-recorder
Last modified: 2013-03-03 21:40:47 UTC
The gnome shell recorder should be able to record screencasts with a picture-in-picture webcam overlay of the user while he/she operates the computer.
Created attachment 197538 [details] [review] patch to add webcam support This patch implements basic support for picture-in-picture webcam overlay in gnome-shell-recorder. To test this, you need a webcam available at /dev/video0/ (this device path is hardcoded now, but should be configurable somehow in the future) Press Ctrl+Alt+Shift+R to start/stop recording. Video is saved to ~/shell-*.webm
Review of attachment 197538 [details] [review]: Doesn't seem like the webcam should "always be on". Maybe this could be something an external "screencasting" tool would turn on through a DBus API? It's worth thinking about. I'd suggest you talk to the designers and other people to see how this could work. Hop on #gnome-design on irc.gnome.org. If you want to continue to working on the patch, there's a few things that can be done: * Replacing// C++ style comments with /* C style comments */ * Obeying our brace and whitespace conventions. See existing code around you for examples. * Fixing up some of the things mentioned in the TODO. An API like "shell_recorder_record_with_webcam" with all the currently hardcoded parmaeters for the shell JS code to use seems like a fair compromise. ::: src/shell-recorder.c @@ +19,3 @@ + +void create_webcam_overlay(ShellRecorder *recorder); +void delete_webcam_overlay(ShellRecorder *recorder); We use "static" instead of putting declarations at the top of C files like this. @@ +216,3 @@ +//TODO: hardcoded webcam overlay dimensions +#define webcam_width (recorder->stage_width/6) +#define webcam_height (recorder->stage_height/6) This needs to keep the aspect ratio of the webcam. If you plug in a second monitor your webcam shouldn't stretch horizontally. @@ +218,3 @@ +#define webcam_height (recorder->stage_height/6) + +void create_webcam_overlay(ShellRecorder *recorder) { This needs to be: static void create_webcam_overlay (ShellRecorder *recorder) { ... } @@ +230,3 @@ + clutter_actor_set_opacity(recorder->webcam_overlay, 230);//TODO: hardcoded webcam opacity + + GstElement* videosink = clutter_gst_video_sink_new ((ClutterTexture *) recorder->webcam_overlay); We require ANSI C. All variable declarations must go at the top of a scope. We also put the pointer declaration on the variable itself. GstElement *videosink;
Created attachment 197638 [details] [review] addressed most issues pointed out in previous patch code review I have addressed most of the issues you pointed out in the previous code review. I have added gsettings keys for optionally enabling the webcam overlay (defaulting to false), webcam opacity value and video device (defaulting to /dev/video0). I haven't yet added keys for webcam overlay positioning/dimensions because I would like to have some feedback regarding how to store options like "bottom-right", "top-left", "top-center", etc. without having to rely on storing strings. Also, I would not want to reduce flexibility. Maybe I should simply store screen width/height percentages? Also, I was not able to properly test these settings. When I list the gsettings schemas I can see the options there, but when I try to set an option, for instance, doing something like: gsettings set org.gnome.shell.recorder record-webcam true I get this error message: ** (process:7918): WARNING **: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name ca.desrt.dconf was not provided by any .service files Any idea what I am doing wrong? It is the first time I deal with GSettings, so please tell me if my code is ok. I tried to follow the example of the other settings we have in the current GNOME Shell Recorder code.
(In reply to comment #3) > I haven't yet added keys for webcam overlay positioning/dimensions because I > would like to have some feedback regarding how to store options like > "bottom-right", "top-left", "top-center", etc. without having to rely on > storing strings. Also, I would not want to reduce flexibility. Maybe I should > simply store screen width/height percentages? You should store these as a GSettings enum. See how the MouseTrackingMode enum is handled in js/ui/magnifier.js and in the corresponding desktop-wide schema at http://git.gnome.org/browse/gsettings-desktop-schemas/tree/schemas/org.gnome.desktop.a11y.magnifier.gschema.xml.in.in Also read about enums in the reference GLib doc for GSettings. > Also, I was not able to properly test these settings. When I list the gsettings > schemas I can see the options there, but when I try to set an option, for > instance, doing something like: > > gsettings set org.gnome.shell.recorder record-webcam true > > I get this error message: > ** (process:7918): WARNING **: > GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name ca.desrt.dconf > was not provided by any .service files > > Any idea what I am doing wrong? Are you using a distribution that ships GNOME 3.0 or 3.2?
> Are you using a distribution that ships GNOME 3.0 or 3.2? I am running Trisquel GNU/Linux 5.0 with older GNOME version. I have built GNOME Shell with jhbuild.
(In reply to comment #5) > I am running Trisquel GNU/Linux 5.0 with older GNOME version. I have built > GNOME Shell with jhbuild. So you probably need to use 'jhbuild run gsettings etc.', and start dconf manually when testing (the executable is in the same prefix as gnome-shell).
I guess you mean I should try: jhbuild run gsettings set org.gnome.shell.recorder record-webcam true but it seems to me that it is equivalent to running the gsettings commands inside the jhbuild shell: jhbuild shell gsettings set org.gnome.shell.recorder record-webcam true which is what I did when I got the error message. Regarding your suggestion to start dconf manually, could you provide more detailed info, please? I have no idea how to do it here. This is my first attempt at patching GNOME, so I am still kind of newbie... :-)
(In reply to comment #7) > I guess you mean I should try: > jhbuild run gsettings set org.gnome.shell.recorder record-webcam true > > but it seems to me that it is equivalent to running the gsettings commands > inside the jhbuild shell: > jhbuild shell > gsettings set org.gnome.shell.recorder record-webcam true > > which is what I did when I got the error message. OK. > Regarding your suggestion to start dconf manually, could you provide more > detailed info, please? I have no idea how to do it here. This is my first > attempt at patching GNOME, so I am still kind of newbie... :-) Well, if you installed the Shell in ~/gnome-shell/install/, then start dconf with ~/gnome-shell/install/bin/dconf from inside jhbuild.
(In reply to comment #8) > Well, if you installed the Shell in ~/gnome-shell/install/, then start dconf > with ~/gnome-shell/install/bin/dconf from inside jhbuild. I installed it in /opt/gnome/ running /opt/gnome/bin/dconf outputs a usage message: felipe@simon:~/devel/gnome/checkout/gnome-shell$ /opt/gnome/bin/dconf error: no command specified Usage: dconf COMMAND [ARGS...] Commands: help Show this information read Read the value of a key list List the contents of a dir write Change the value of a key reset Reset the value of a key or dir update Update the system databases watch Watch a path for changes Use 'dconf help COMMAND' to get detailed help.
I am not sure I understood it well. But it seems to me that dconf is one of the possible settings backends for gsettings, right? So then we would need some sort of daemon? Instead, /opt/gnome/bin/dconf seems to be a client tool for managing settings.
Review of attachment 197638 [details] [review]: I'd rather have a dbus interface to control the recorder rather then adding tons of config knobs. That way one could write a simply app that sets the params via dbus and have a "start record" button initiate the recording.
(In reply to comment #10) > I am not sure I understood it well. But it seems to me that dconf is one of the > possible settings backends for gsettings, right? Right. > So then we would need some sort of daemon? Instead, /opt/gnome/bin/dconf seems > to be a client tool for managing settings. Yeah, sorry, that's /opt/gnome/libexec/dconf-service (probably changed since I last checked...).
ok. Now it worked here. Is there anything else I am supposed to do before someone apply this patch to master?
Review of attachment 197638 [details] [review]: (In reply to comment #14) > ok. Now it worked here. > > Is there anything else I am supposed to do before someone apply this patch to > master? I think we need to make some decisions: * Do we want the recorder to be the implementation of a tool like gnome-screenshot? This means that we remove the current gsettings keys and turn it into a DBus interface like the Screenshot iface. * Should we support recording individual windows or areas like the screenshot tool, or just full-stage recording? Are there any areas we can share between the two currently separate codebases. drago01 implemented both the recorder and screenshot code, so he may have some knowledge to share. Have you tested: * Turning on Zoom Mode while recording? * Going into the overview? Trying as many Shell features as possible. I'm afraid that adding an untracked actor like that will be tricky to manage. ::: data/org.gnome.shell.gschema.xml.in @@ +150,3 @@ + </_description> + </key> + <key name="webcam-device" type="s"> "webcam-device" isn't appropriate for a setting. It should be something that's autodetected. Talk to the Cheese people about this. ::: src/shell-recorder.c @@ +185,3 @@ * show up in the frame. */ + Don't introduce whitespace. @@ +238,3 @@ +/* TODO: hardcoded webcam overlay dimensions */ +#define webcam_height (recorder->stage_height/6) +#define webcam_width (webcam_aspect_ratio*webcam_height) If you're going to do this (you shouldn't), #undef afterwards. @@ +252,3 @@ + +/* TODO: hardcoded webcam overlay positioning on the stage */ + clutter_actor_set_position(recorder->webcam_overlay, Watch your whitespace. @@ +268,3 @@ + gst_element_link_many (v4l2src, ffmpegcolor, videosink, NULL); + + gst_element_set_state(recorder->webcam_pipeline, GST_STATE_PLAYING); Watch your whitespace. @@ +994,3 @@ +static void recorder_set_record_webcam (ShellRecorder *recorder, + gboolean doit) Whitespace is messed up; this needs to be: static void recorder_set_record_webcam (ShellRecorder *recorder, gboolean value) @@ +1019,3 @@ +{ + if (device == recorder->webcam_device || + (device && recorder->webcam_device && strcmp (recorder->webcam_device, device) == 0)) I'm not sure we want to microoptimize for this. if (recorder->webcam_device == device) return; seems perfectly fine. @@ +1151,3 @@ + PROP_RECORD_WEBCAM, + g_param_spec_boolean ("recordwebcam", + "RecordWebcam", "Record webcam" @@ +1158,3 @@ + PROP_WEBCAM_OPACITY, + g_param_spec_int ("webcam-opacity", + "WebcamOpacity", "Webcam opacity" @@ +1167,3 @@ + PROP_WEBCAM_DEVICE, + g_param_spec_string ("webcam-device", + "WebcamDevice", "Webcam device" @@ +1789,3 @@ + * shell_recorder_set_record_webcam: + * @recorder: the #ShellRecorder + * @doit: a boolean value. True if a webcam overlay should be recorded use %TRUE and %FALSE @@ +1797,3 @@ +void +shell_recorder_set_record_webcam (ShellRecorder *recorder, + gboolean doit) Whitespace is messed up, and "doit" is a terrible variable name.
(In reply to comment #15) > * Do we want the recorder to be the implementation of a tool like > gnome-screenshot? This means that we remove the current gsettings keys and turn > it into a DBus interface like the Screenshot iface. Can you tell me more about this suggested dbus interface, please? I looked at the Gnome-Screenshot source code and the only dbus related code that I found there are calls to org.gnome.Nautilus.FileOperations (CopyFile) and org.gnome.ColorManager (GetProfileForWindow), which seems to be unrelated to what we're discussing. So I am a bit confused about that. What would it be like the dbus interface you're suggesting for a Gnome-Screencast tool ? For instance, I think that some other features for the screencast tool would be: * (optional) a semi-transparent circle placed at the cursor coordinates to highlight it in the recording. * (optional) "bubbles" to highlight mouse button up/down events * (optional) an overlay with keyboard event labels so that viewers can understand what's been typed in the keyboard during the recording.
(In reply to comment #16) > (In reply to comment #15) > > * Do we want the recorder to be the implementation of a tool like > > gnome-screenshot? This means that we remove the current gsettings keys and turn > > it into a DBus interface like the Screenshot iface. > > Can you tell me more about this suggested dbus interface, please? I looked at > the Gnome-Screenshot source code and the only dbus related code that I found > there are calls to org.gnome.Nautilus.FileOperations (CopyFile) and > org.gnome.ColorManager (GetProfileForWindow), which seems to be unrelated to > what we're discussing. So I am a bit confused about that. > > What would it be like the dbus interface you're suggesting for a > Gnome-Screencast tool ? He was talking about the screenshot interface in shellDbus.js , which is not yet used by gnome-screenshot. My point was rather if we want to extend the screenscast tool with stuff like webcam overlay we shouldn't just add gsettings knobs but simply have a dbus interface that allows controlling the recorder (start, stop, pause, select codec, enable webcam overlay etc.) > This means that we remove the current gsettings keys and turn > it into a DBus interface like the Screenshot iface. I'd rather keep the basic support there, poeple how want to use "advanced" stuff can use the app which interacts via dbus.
I am unsure if it is a requirement to store and set setting via dbus, or if it is a welcome refinement that can be done in a later release. I am keen to get something in the hands of users that works in a stable way as soon as possible.
(In reply to comment #18) > I am unsure if it is a requirement to store and set setting via dbus, or if it > is a welcome refinement that can be done in a later release. > > I am keen to get something in the hands of users that works in a stable way as > soon as possible. Things like "webcam device" are not appropriate to be in a setting. We need to think of what we want the recorder to become: just a small easter egg that's turned on with a magic keyboard shortcut, or an actual tool like gnome-screenshot? If it's still the former, I don't think webcam support is appropriate here. If it's the latter, well, we need to develop a custom tool to start the Shell recorder, and add a DBus iface.
Yes, I and Felipe are implementing an actual tool like gnome-screenshot for doing UX testing. Felipe can develop a custom tool to start the Shell recorder and add a DBus iface, but he needs technical direction :)
(In reply to comment #20) > Yes, I and Felipe are implementing an actual tool like gnome-screenshot for > doing UX testing. Felipe can develop a custom tool to start the Shell recorder > and add a DBus iface, but he needs technical direction :) If you're developing an internal/one-day-hack tool for UX testing, just do whatever is quickest for you. If you're developing "gnome-screencast" with intent for it to be a module in 3.4, develop a DBus iface.
Yes, we're developing "gnome-screencast" with intent for it to be a module in 3.4 :)
Created attachment 198750 [details] [review] DBUS interface + webcam support This path implements a DBUS interface for the gnome-shell-recorder and adds support for webcam overlay. A few features controlled by the DBUS interface are not implemented yet: rendering a cursor highlight and graphical representations of cursor and keyboard events such as mouse clicks and key presses. These features will be implemented later. I kept the video-device attribute, defaulting to /dev/video0 and let it be able to be explicitely set by the user (without webcam auto-detection) because I think it is the most generic interface for the core recorder to be able to handle any arbitrary video source (not just webcams). The users will probably not use this parameter explicitely, in general. The most common use of this parameter will be indirectly when set by tools such as GNOME Screencast (which I have just started implementing and will attach a patch to the gnome-utils module tonight with the initial implementation of it). GNOME Screencast (or other tools using the core gnome-shell-recorder) will be responsible for selecting the desired video device, ideally by using some sort of auto-detectino routine. I appreciate if you can provide me some more feedback on this new patch. Would you consider it ready for git master? What else should I still tweak in it? happy hacking, Felipe "Juca" Sanches
Here is the bug for implementation of the GNOME Screencast tool: https://bugzilla.gnome.org/show_bug.cgi?id=661426 I have attached a patch there. Please use that for testing the latest patch that I have submitted here.
Review of attachment 198750 [details] [review]: This one looks better. There are still some issues left though (see review) and some of the coding style does not match. ::: js/ui/shellDBus.js @@ +193,3 @@ + */ + ScreencastStart : function () { + return global.screencast_start (); Why the global wrapper? You can/should just use the recorder directly. (Same applies to the other global wrappers). ::: src/shell-global.c @@ +1934,3 @@ + */ +gboolean +shell_global_screencast_start (ShellGlobal *global) Most (all) of this shouldn't be needed. Just access the recorder object from JS. ::: src/shell-recorder.c @@ +112,3 @@ const char *filename); +static void recorder_set_record_webcam (ShellRecorder *recorder, + gboolean value); Align the second parameter. @@ +114,3 @@ + gboolean value); +static void recorder_set_webcam_opacity (ShellRecorder *recorder, + int opacity); Align the second parameter. @@ +116,3 @@ + int opacity); +static void recorder_set_webcam_device (ShellRecorder *recorder, + const char *device); Align the second parameter. @@ +118,3 @@ + const char *device); +static void recorder_set_pointer_highlight (ShellRecorder *recorder, + gboolean value); Align the second parameter. @@ +120,3 @@ + gboolean value); +static void recorder_set_pointer_events (ShellRecorder *recorder, + gboolean value); Align the second parameter. @@ +122,3 @@ + gboolean value); +static void recorder_set_keyboard_events (ShellRecorder *recorder, + gboolean value); Align the second parameter. @@ +246,3 @@ } +/* TODO: how do we detect the webcam aspect ratio ? */ You should be able to compute that from the resolution. @@ +250,3 @@ + +/* TODO: hardcoded webcam overlay dimensions */ +#define webcam_height (recorder->stage_height/6) 1) Don't make it a fraction of the state's size but rather use the primary monitor's dimensions. 2) Don't hardcode it but pass it from the shell. @@ +259,3 @@ + + recorder->webcam_overlay = clutter_texture_new(); + clutter_actor_show (recorder->webcam_overlay); You don't have to call actor_show here. @@ +267,3 @@ + clutter_actor_set_position(recorder->webcam_overlay, + recorder->stage_width - 1.3*webcam_width, + recorder->stage_height - 1.3*webcam_height); Again basing it on the stage will look wrong in multi monitor setups, and this shouldn't be hardcoded here as well. @@ +268,3 @@ + recorder->stage_width - 1.3*webcam_width, + recorder->stage_height - 1.3*webcam_height); + clutter_actor_set_size(recorder->webcam_overlay, webcam_width, webcam_height); Missing space before bracket. @@ +269,3 @@ + recorder->stage_height - 1.3*webcam_height); + clutter_actor_set_size(recorder->webcam_overlay, webcam_width, webcam_height); + clutter_actor_set_opacity(recorder->webcam_overlay, recorder->webcam_opacity); Missing space before bracket. @@ +273,3 @@ + videosink = clutter_gst_video_sink_new ((ClutterTexture *) recorder->webcam_overlay); + v4l2src = gst_element_factory_make ("v4l2src", NULL); + g_object_set(G_OBJECT(v4l2src), "device", recorder->webcam_device, NULL); Missing space before bracket. @@ +281,3 @@ + gst_element_link_many (v4l2src, ffmpegcolor, videosink, NULL); + + gst_element_set_state(recorder->webcam_pipeline, GST_STATE_PLAYING); Missing space before bracket. @@ +285,3 @@ + +static void +delete_webcam_overlay (ShellRecorder *recorder) s/delete/destroy/ @@ +287,3 @@ +delete_webcam_overlay (ShellRecorder *recorder) +{ + gst_element_set_state(recorder->webcam_pipeline, GST_STATE_NULL); Missing space before bracket. @@ +289,3 @@ + gst_element_set_state(recorder->webcam_pipeline, GST_STATE_NULL); + gst_object_unref (recorder->webcam_pipeline); + clutter_container_remove_actor (CLUTTER_CONTAINER (recorder->stage), recorder->webcam_overlay); Just use clutter_actor_destroy() @@ +352,2 @@ recorder->state = RECORDER_STATE_CLOSED; + shell_recorder_set_framerate(recorder, DEFAULT_FRAMES_PER_SECOND); Missing space before bracket. @@ +352,3 @@ recorder->state = RECORDER_STATE_CLOSED; + shell_recorder_set_framerate(recorder, DEFAULT_FRAMES_PER_SECOND); + shell_recorder_set_webcam_device(recorder, DEFAULT_WEBCAM_DEVICE); Missing space before bracket. @@ +353,3 @@ + shell_recorder_set_framerate(recorder, DEFAULT_FRAMES_PER_SECOND); + shell_recorder_set_webcam_device(recorder, DEFAULT_WEBCAM_DEVICE); + shell_recorder_set_webcam_opacity(recorder, DEFAULT_WEBCAM_OPACITY); Missing space before bracket. @@ +354,3 @@ + shell_recorder_set_webcam_device(recorder, DEFAULT_WEBCAM_DEVICE); + shell_recorder_set_webcam_opacity(recorder, DEFAULT_WEBCAM_OPACITY); + shell_recorder_set_record_webcam(recorder, FALSE); Missing space before bracket. @@ +355,3 @@ + shell_recorder_set_webcam_opacity(recorder, DEFAULT_WEBCAM_OPACITY); + shell_recorder_set_record_webcam(recorder, FALSE); + shell_recorder_set_pointer_highlight(recorder, FALSE); Missing space before bracket. @@ +356,3 @@ + shell_recorder_set_record_webcam(recorder, FALSE); + shell_recorder_set_pointer_highlight(recorder, FALSE); + shell_recorder_set_pointer_events(recorder, FALSE); Missing space before bracket. @@ +357,3 @@ + shell_recorder_set_pointer_highlight(recorder, FALSE); + shell_recorder_set_pointer_events(recorder, FALSE); + shell_recorder_set_keyboard_events(recorder, FALSE); Missing space before bracket. @@ +1014,3 @@ static void +recorder_set_record_webcam (ShellRecorder *recorder, + gboolean value) Align the second parameter. @@ +1021,3 @@ + recorder->record_webcam = value; + + g_object_notify (G_OBJECT (recorder), "record-webcam"); Should wrap that around freeze_notify/thaw_notify. @@ +1026,3 @@ +static void +recorder_set_webcam_opacity (ShellRecorder *recorder, + int opacity) Align the second parameter. @@ +1033,3 @@ + recorder->webcam_opacity = opacity; + + g_object_notify (G_OBJECT (recorder), "webcam-opacity"); Should wrap that around freeze_notify/thaw_notify. @@ +1038,3 @@ +static void +recorder_set_webcam_device (ShellRecorder *recorder, + const char *device) Align the second parameter. @@ +1040,3 @@ + const char *device) +{ + if (device == recorder->webcam_device || Comparing the two pointers doesn't really make much sense. @@ +1049,3 @@ + recorder->webcam_device = g_strdup (device); + + g_object_notify (G_OBJECT (recorder), "webcam-device"); Should wrap that around freeze_notify/thaw_notify. @@ +1055,3 @@ +static void +recorder_set_pointer_highlight (ShellRecorder *recorder, + gboolean value) Align the second parameter. @@ +1057,3 @@ + gboolean value) +{ + g_warning("ShellRecorder: Pointer highlighting is not implemented yet."); This shouldn't be in the patch then. We can add it once we have an implementation. @@ +1070,3 @@ + gboolean value) +{ + g_warning("ShellRecorder: Rendering of pointer events is not implemented yet."); Same here. @@ +1084,3 @@ + gboolean value) +{ + g_warning("ShellRecorder: Rendering of keyboard events is not implemented yet."); Same here. @@ +1165,3 @@ + break; + case PROP_WEBCAM_OPACITY: + g_value_set_int ( value, recorder->webcam_opacity); Remove the space. @@ +1168,3 @@ + break; + case PROP_RECORD_WEBCAM: + g_value_set_boolean ( value, recorder->record_webcam); Remove the space. @@ +1171,3 @@ + break; + case PROP_POINTER_HIGHLIGHT: + g_value_set_boolean ( value, recorder->pointer_highlight); Remove the space. @@ +1174,3 @@ + break; + case PROP_POINTER_EVENTS: + g_value_set_boolean ( value, recorder->pointer_events); Remove the space. @@ +1177,3 @@ + break; + case PROP_KEYBOARD_EVENTS: + g_value_set_boolean ( value, recorder->keyboard_events); Remove the space. @@ +1841,3 @@ +void +shell_recorder_set_pointer_highlight (ShellRecorder *recorder, + gboolean value) Align the second parameter. @@ +1859,3 @@ +void +shell_recorder_set_pointer_events (ShellRecorder *recorder, + gboolean value) Align the second parameter. @@ +1877,3 @@ +void +shell_recorder_set_keyboard_events (ShellRecorder *recorder, + gboolean value) Align the second parameter. @@ +1954,3 @@ +void +shell_recorder_set_record_webcam (ShellRecorder *recorder, + gboolean value) Align the second parameter. @@ +1973,3 @@ +void +shell_recorder_set_webcam_opacity (ShellRecorder *recorder, + int opacity) Align the second parameter. @@ +1976,3 @@ +{ + g_return_if_fail (SHELL_IS_RECORDER (recorder)); + g_return_if_fail (opacity>=0 && opacity<=255); Missing space around ">=" and "<=" @@ +1989,3 @@ +void +shell_recorder_set_webcam_device (ShellRecorder *recorder, + const char *device) Align the second parameter. @@ +2074,3 @@ + if (recorder->webcam_overlay) + delete_webcam_overlay(recorder); You have to free the webcam_device as well. ::: src/shell-recorder.h @@ +38,3 @@ const char *pipeline); +void shell_recorder_set_record_webcam (ShellRecorder *recorder, + gboolean value); Align the second parameter. @@ +40,3 @@ + gboolean value); +void shell_recorder_set_webcam_opacity (ShellRecorder *recorder, + int opacity); Align the second parameter. @@ +42,3 @@ + int opacity); +void shell_recorder_set_webcam_device (ShellRecorder *recorder, + const char *device); Align the second parameter. @@ +44,3 @@ + const char *device); +void shell_recorder_set_pointer_highlight (ShellRecorder *recorder, + gboolean value); Align the second parameter. @@ +46,3 @@ + gboolean value); +void shell_recorder_set_pointer_events (ShellRecorder *recorder, + gboolean value); Align the second parameter. @@ +48,3 @@ + gboolean value); +void shell_recorder_set_keyboard_events (ShellRecorder *recorder, + gboolean value); Align the second parameter.
Created attachment 199025 [details] [review] DBUS interface + webcam support This patch addresses the issues pointed out in the previous code-review.
I am waiting for a code review and, hopefully, for this code to be committed to master.
(In reply to comment #27) > I am waiting for a code review and, hopefully, for this code to be committed to > master. We still need green light from the designers, my last discussion with them on IRC went into the direction that this is probably a too specialiced tool to be part of the shell. Adding the ui-review for further feedback / discussion.
My reaction without being able to see what is proposed is that this is indeed too specialized and should be done by an app. That said, I know we'd really like to have such an app :) I think we don't want the shell to start growing app-like features such as recording and syncing audio and doing composition and overlays. But perhaps I'm not understanding what is actually being proposed here.
I think you have understood - for a concrete idea, you can look to silverbackapp.com - and your answer is reasonable. Felipe has ceased working actively on this project and so its going to be dormant until I find someone else to pick it up. I hope whoever implements GNOME Shell's simple Screencast tool can get in touch with me to discuss making the more useful application I require for my own work :-)
I agree with Jon. I think this is more for an application, where compositing can be done in post instead of real-time.