24 #undef __STRICT_ANSI__ //workaround due to broken kernel headers 
   31 #include "libavcodec/dsputil.h" 
   34 #include <sys/ioctl.h> 
   37 #define _LINUX_TIME_H 1 
   38 #include <linux/videodev.h> 
   49     struct video_capability video_cap;
 
   50     struct video_audio audio_saved;
 
   51     struct video_window video_win;
 
   53     struct video_mbuf gb_buffers;
 
   54     struct video_mmap gb_buf;
 
   80     int desired_palette, desired_depth;
 
   81     struct video_tuner tuner;
 
   82     struct video_audio audio;
 
   83     struct video_picture pict;
 
   87     av_log(s1, 
AV_LOG_WARNING, 
"V4L input device is deprecated and will be removed in the next release.");
 
   89     if (ap->time_base.den <= 0) {
 
  103     video_fd = open(s1->
filename, O_RDWR);
 
  109     if (ioctl(video_fd, VIDIOCGCAP, &s->
video_cap) < 0) {
 
  114     if (!(s->
video_cap.type & VID_TYPE_CAPTURE)) {
 
  130     desired_palette = -1;
 
  132     for (j = 0; j < vformat_num; j++) {
 
  141     if (!ioctl(video_fd, VIDIOCGTUNER, &tuner)) {
 
  143         ioctl(video_fd, VIDIOCSTUNER, &tuner);
 
  148     ioctl(video_fd, VIDIOCGAUDIO, &audio);
 
  150     audio.flags &= ~VIDEO_AUDIO_MUTE;
 
  151     ioctl(video_fd, VIDIOCSAUDIO, &audio);
 
  153     ioctl(video_fd, VIDIOCGPICT, &pict);
 
  154     av_dlog(s1, 
"v4l: colour=%d hue=%d brightness=%d constrast=%d whiteness=%d\n",
 
  155             pict.colour, pict.hue, pict.brightness, pict.contrast, pict.whiteness);
 
  157     pict.palette = desired_palette;
 
  158     pict.depth= desired_depth;
 
  159     if (desired_palette == -1 || ioctl(video_fd, VIDIOCSPICT, &pict) < 0) {
 
  160         for (j = 0; j < vformat_num; j++) {
 
  163             if (-1 != ioctl(video_fd, VIDIOCSPICT, &pict))
 
  166         if (j >= vformat_num)
 
  170     if (ioctl(video_fd, VIDIOCGMBUF, &s->
gb_buffers) < 0) {
 
  179         if (ioctl(video_fd, VIDIOCSWIN, s->
video_win) < 0) {
 
  187         if (ioctl(video_fd, VIDIOCCAPTURE, &val) < 0) {
 
  196         if ((
unsigned char*)-1 == s->
video_buf) {
 
  197             s->
video_buf = mmap(0, s->
gb_buffers.size, PROT_READ|PROT_WRITE, MAP_PRIVATE, video_fd, 0);
 
  198             if ((
unsigned char*)-1 == s->
video_buf) {
 
  210         s->
gb_buf.format = pict.palette;
 
  212         if (ioctl(video_fd, VIDIOCMCAPTURE, &s->
gb_buf) < 0) {
 
  213             if (errno != EAGAIN) {
 
  223           ioctl(video_fd, VIDIOCMCAPTURE, &s->
gb_buf);
 
  229     for (j = 0; j < vformat_num; j++) {
 
  237     if (j >= vformat_num)
 
  260     while (ioctl(s->
fd, VIDIOCSYNC, &s->
gb_frame) < 0 &&
 
  261            (errno == EAGAIN || errno == EINTR));
 
  268     if (ioctl(s->
fd, VIDIOCMCAPTURE, &s->
gb_buf) < 0) {
 
  285     int64_t curtime, delay;
 
  302         ts.tv_sec = delay / 1000000;
 
  303         ts.tv_nsec = (delay % 1000000) * 1000;
 
  304         nanosleep(&ts, 
NULL);
 
  339     { 
"standard", 
"", offsetof(
VideoData, standard), 
AV_OPT_TYPE_INT, {.i64 = VIDEO_MODE_NTSC}, VIDEO_MODE_PAL, VIDEO_MODE_NTSC, 
AV_OPT_FLAG_DECODING_PARAM, 
"standard" },
 
  355     .
name           = 
"video4linux,v4l",
 
  362     .priv_class     = &v4l_class,
 
packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1 
 
const char const char void * val
 
#define AV_LOG_WARNING
Something somehow does not look correct. 
 
#define LIBAVUTIL_VERSION_INT
 
struct video_capability video_cap
 
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx. 
 
#define FF_ARRAY_ELEMS(a)
 
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
 
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
 
struct video_window video_win
 
AVStream * avformat_new_stream(AVFormatContext *s, const AVCodec *c)
Add a new stream to a media file. 
 
static double av_q2d(AVRational a)
Convert rational to double. 
 
static av_cold int read_close(AVFormatContext *ctx)
 
enum AVPixelFormat pix_fmt
 
Main libavdevice API header. 
 
int av_new_packet(AVPacket *pkt, int size)
Allocate the payload of a packet and initialize its fields with default values. 
 
static int grab_read_packet(AVFormatContext *s1, AVPacket *pkt)
 
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered. 
 
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
 
static const struct @115 video_formats[]
 
AVCodecContext * codec
Codec context associated with this stream. 
 
int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx)
Check if the given dimension of an image is valid, meaning that all bytes of the image can be address...
 
static const AVClass v4l_class
 
int bit_rate
the average bitrate 
 
char filename[1024]
input or output filename 
 
int width
picture width / height. 
 
static int v4l_mm_read_picture(VideoData *s, uint8_t *buf)
 
packed RGB 8:8:8, 24bpp, BGRBGR... 
 
static int read_header(FFV1Context *f)
 
int64_t av_gettime(void)
Get the current time in microseconds. 
 
#define av_dlog(pctx,...)
av_dlog macros 
 
static int read_packet(void *opaque, uint8_t *buf, int buf_size)
 
enum AVMediaType codec_type
 
packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr 
 
Describe the class of an AVClass context structure. 
 
rational number numerator/denominator 
 
#define AV_OPT_FLAG_DECODING_PARAM
a generic parameter which can be set by the user for demuxing or decoding 
 
static const AVOption options[]
 
#define AV_PIX_FMT_BGR565
 
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples) 
 
static int grab_read_close(AVFormatContext *s1)
 
struct video_mbuf gb_buffers
 
static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
 
AVInputFormat ff_v4l_demuxer
 
void * priv_data
Format private data. 
 
struct video_audio audio_saved
 
AVPixelFormat
Pixel format. 
 
This structure stores compressed data. 
 
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...