Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
16a75eaa
Commit
16a75eaa
authored
May 19, 2013
by
Clément Bœsch
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lavd: add v4l2 outdev.
parent
8eec6553
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
115 additions
and
3 deletions
+115
-3
Changelog
Changelog
+1
-0
configure
configure
+1
-0
general.texi
doc/general.texi
+1
-1
Makefile
libavdevice/Makefile
+1
-0
alldevices.c
libavdevice/alldevices.c
+1
-1
v4l2enc.c
libavdevice/v4l2enc.c
+109
-0
version.h
libavdevice/version.h
+1
-1
No files found.
Changelog
View file @
16a75eaa
...
...
@@ -51,6 +51,7 @@ version <next>:
- Apple Intermediate Codec decoder
- Escape 130 video decoder
- FTP protocol support
- V4L2 output device
version 1.2:
...
...
configure
View file @
16a75eaa
...
...
@@ -2079,6 +2079,7 @@ 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"
...
...
doc/general.texi
View file @
16a75eaa
...
...
@@ -1000,7 +1000,7 @@ performance on systems without hardware floating point support).
@item OSS @tab X @tab X
@item Pulseaudio @tab X @tab
@item SDL @tab @tab X
@item Video4Linux2 @tab X @tab
@item Video4Linux2 @tab X @tab
X
@item VfW capture @tab X @tab
@item X11 grabbing @tab X @tab
@end multitable
...
...
libavdevice/Makefile
View file @
16a75eaa
...
...
@@ -33,6 +33,7 @@ OBJS-$(CONFIG_SDL_OUTDEV) += sdl.o
OBJS-$(CONFIG_SNDIO_INDEV)
+=
sndio_common.o
sndio_dec.o
OBJS-$(CONFIG_SNDIO_OUTDEV)
+=
sndio_common.o
sndio_enc.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
...
...
libavdevice/alldevices.c
View file @
16a75eaa
...
...
@@ -60,7 +60,7 @@ void avdevice_register_all(void)
REGISTER_INDEV
(
PULSE
,
pulse
);
REGISTER_OUTDEV
(
SDL
,
sdl
);
REGISTER_INOUTDEV
(
SNDIO
,
sndio
);
REGISTER_IN
DEV
(
V4L2
,
v4l2
);
REGISTER_IN
OUTDEV
(
V4L2
,
v4l2
);
// REGISTER_INDEV (V4L, v4l
REGISTER_INDEV
(
VFWCAP
,
vfwcap
);
REGISTER_INDEV
(
X11GRAB
,
x11grab
);
...
...
libavdevice/v4l2enc.c
0 → 100644
View file @
16a75eaa
/*
* Copyright (c) 2013 Clément Bœsch
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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
*/
#include "v4l2-common.h"
#include "avdevice.h"
typedef
struct
{
int
fd
;
}
V4L2Context
;
static
av_cold
int
write_header
(
AVFormatContext
*
s1
)
{
int
res
=
0
,
flags
=
O_RDWR
;
struct
v4l2_format
fmt
=
{
.
type
=
V4L2_BUF_TYPE_VIDEO_OUTPUT
};
V4L2Context
*
s
=
s1
->
priv_data
;
AVCodecContext
*
enc_ctx
;
uint32_t
v4l2_pixfmt
;
if
(
s1
->
flags
&
AVFMT_FLAG_NONBLOCK
)
flags
|=
O_NONBLOCK
;
s
->
fd
=
open
(
s1
->
filename
,
flags
);
if
(
s
->
fd
<
0
)
{
res
=
AVERROR
(
errno
);
av_log
(
s1
,
AV_LOG_ERROR
,
"Unable to open V4L2 device '%s'
\n
"
,
s1
->
filename
);
return
res
;
}
if
(
s1
->
nb_streams
!=
1
||
s1
->
streams
[
0
]
->
codec
->
codec_type
!=
AVMEDIA_TYPE_VIDEO
||
s1
->
streams
[
0
]
->
codec
->
codec_id
!=
AV_CODEC_ID_RAWVIDEO
)
{
av_log
(
s1
,
AV_LOG_ERROR
,
"V4L2 output device supports only a single raw video stream
\n
"
);
return
AVERROR
(
EINVAL
);
}
enc_ctx
=
s1
->
streams
[
0
]
->
codec
;
v4l2_pixfmt
=
avpriv_fmt_ff2v4l
(
enc_ctx
->
pix_fmt
,
AV_CODEC_ID_RAWVIDEO
);
if
(
!
v4l2_pixfmt
)
{
// XXX: try to force them one by one?
av_log
(
s1
,
AV_LOG_ERROR
,
"Unknown V4L2 pixel format equivalent for %s
\n
"
,
av_get_pix_fmt_name
(
enc_ctx
->
pix_fmt
));
return
AVERROR
(
EINVAL
);
}
if
(
ioctl
(
s
->
fd
,
VIDIOC_G_FMT
,
&
fmt
)
<
0
)
{
res
=
AVERROR
(
errno
);
av_log
(
s1
,
AV_LOG_ERROR
,
"ioctl(VIDIOC_G_FMT): %s
\n
"
,
av_err2str
(
res
));
return
res
;
}
fmt
.
fmt
.
pix
.
width
=
enc_ctx
->
width
;
fmt
.
fmt
.
pix
.
height
=
enc_ctx
->
height
;
fmt
.
fmt
.
pix
.
pixelformat
=
v4l2_pixfmt
;
fmt
.
fmt
.
pix
.
sizeimage
=
av_image_get_buffer_size
(
enc_ctx
->
pix_fmt
,
enc_ctx
->
width
,
enc_ctx
->
height
,
1
);
if
(
ioctl
(
s
->
fd
,
VIDIOC_S_FMT
,
&
fmt
)
<
0
)
{
res
=
AVERROR
(
errno
);
av_log
(
s1
,
AV_LOG_ERROR
,
"ioctl(VIDIOC_S_FMT): %s
\n
"
,
av_err2str
(
res
));
return
res
;
}
return
res
;
}
static
int
write_packet
(
AVFormatContext
*
s1
,
AVPacket
*
pkt
)
{
const
V4L2Context
*
s
=
s1
->
priv_data
;
write
(
s
->
fd
,
pkt
->
data
,
pkt
->
size
);
return
0
;
}
static
int
write_trailer
(
AVFormatContext
*
s1
)
{
const
V4L2Context
*
s
=
s1
->
priv_data
;
close
(
s
->
fd
);
return
0
;
}
AVOutputFormat
ff_v4l2_muxer
=
{
.
name
=
"v4l2"
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"Video4Linux2 output device"
),
.
priv_data_size
=
sizeof
(
V4L2Context
),
.
audio_codec
=
AV_CODEC_ID_NONE
,
.
video_codec
=
AV_CODEC_ID_RAWVIDEO
,
.
write_header
=
write_header
,
.
write_packet
=
write_packet
,
.
write_trailer
=
write_trailer
,
.
flags
=
AVFMT_NOFILE
,
};
libavdevice/version.h
View file @
16a75eaa
...
...
@@ -28,7 +28,7 @@
#include "libavutil/avutil.h"
#define LIBAVDEVICE_VERSION_MAJOR 55
#define LIBAVDEVICE_VERSION_MINOR
0
#define LIBAVDEVICE_VERSION_MINOR
1
#define LIBAVDEVICE_VERSION_MICRO 100
#define LIBAVDEVICE_VERSION_INT AV_VERSION_INT(LIBAVDEVICE_VERSION_MAJOR, \
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment