/**
* @file
- * X11 frame device demuxer by Clemens Fruhwirth <clemens@endorphin.org>
- * and Edouard Gomez <ed.gomez@free.fr>.
+ * X11 frame device demuxer
+ * @author Clemens Fruhwirth <clemens@endorphin.org>
+ * @author Edouard Gomez <ed.gomez@free.fr>
*/
#include "config.h"
#include "libavutil/log.h"
#include "libavutil/opt.h"
#include "libavutil/parseutils.h"
+#include "libavutil/time.h"
#include <time.h>
#include <X11/X.h>
#include <X11/Xlib.h>
/**
* X11 Device Demuxer context
*/
-struct x11_grab
-{
+struct x11grab {
const AVClass *class; /**< Class for private options. */
int frame_size; /**< Size in bytes of a grabbed frame */
AVRational time_base; /**< Time base */
/**
* Draw grabbing region window
*
- * @param s x11_grab context
+ * @param s x11grab context
*/
static void
-x11grab_draw_region_win(struct x11_grab *s)
+x11grab_draw_region_win(struct x11grab *s)
{
Display *dpy = s->dpy;
int screen;
/**
* Initialize grabbing region window
*
- * @param s x11_grab context
+ * @param s x11grab context
*/
static void
-x11grab_region_win_init(struct x11_grab *s)
+x11grab_region_win_init(struct x11grab *s)
{
Display *dpy = s->dpy;
int screen;
* Initialize the x11 grab device demuxer (public device demuxer API).
*
* @param s1 Context from avformat core
- * @param ap Parameters from avformat core
* @return <ul>
* <li>AVERROR(ENOMEM) no memory left</li>
* <li>AVERROR(EIO) other failure case</li>
* </ul>
*/
static int
-x11grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
+x11grab_read_header(AVFormatContext *s1)
{
- struct x11_grab *x11grab = s1->priv_data;
+ struct x11grab *x11grab = s1->priv_data;
Display *dpy;
AVStream *st = NULL;
enum PixelFormat input_pixfmt;
AVRational framerate;
param = av_strdup(s1->filename);
+ if (!param)
+ goto out;
+
offset = strchr(param, '+');
if (offset) {
sscanf(offset, "%d,%d", &x_off, &y_off);
st->codec->bit_rate = x11grab->frame_size * 1/av_q2d(x11grab->time_base) * 8;
out:
+ av_free(param);
return ret;
}
* coordinates
*/
static void
-paint_mouse_pointer(XImage *image, struct x11_grab *s)
+paint_mouse_pointer(XImage *image, struct x11grab *s)
{
int x_off = s->x_off;
int y_off = s->y_off;
static int
x11grab_read_packet(AVFormatContext *s1, AVPacket *pkt)
{
- struct x11_grab *s = s1->priv_data;
+ struct x11grab *s = s1->priv_data;
Display *dpy = s->dpy;
XImage *image = s->image;
int x_off = s->x_off;
static int
x11grab_read_close(AVFormatContext *s1)
{
- struct x11_grab *x11grab = s1->priv_data;
+ struct x11grab *x11grab = s1->priv_data;
/* Detach cleanly from shared mem */
if (x11grab->use_shm) {
return 0;
}
-#define OFFSET(x) offsetof(struct x11_grab, x)
+#define OFFSET(x) offsetof(struct x11grab, x)
#define DEC AV_OPT_FLAG_DECODING_PARAM
static const AVOption options[] = {
{ "video_size", "A string describing frame size, such as 640x480 or hd720.", OFFSET(video_size), AV_OPT_TYPE_STRING, {.str = "vga"}, 0, 0, DEC },
};
/** x11 grabber device demuxer declaration */
-AVInputFormat ff_x11_grab_device_demuxer = {
+AVInputFormat ff_x11grab_demuxer = {
.name = "x11grab",
.long_name = NULL_IF_CONFIG_SMALL("X11grab"),
- .priv_data_size = sizeof(struct x11_grab),
+ .priv_data_size = sizeof(struct x11grab),
.read_header = x11grab_read_header,
.read_packet = x11grab_read_packet,
.read_close = x11grab_read_close,