diff options
author | Alex Beregszaszi <alex@rtfs.hu> | 2003-06-25 10:21:45 +0000 |
---|---|---|
committer | Alex Beregszaszi <alex@rtfs.hu> | 2003-06-25 10:21:45 +0000 |
commit | e3ee328330e924e6524003a6e082934fddb87a44 (patch) | |
tree | 1737169dd2e55b799c854862ce012cf6433bfd48 /libavformat | |
parent | 93caefc7d6608f109ae9ab16c2f6d5ae6c75cffd (diff) | |
download | ffmpeg-streaming-e3ee328330e924e6524003a6e082934fddb87a44.zip ffmpeg-streaming-e3ee328330e924e6524003a6e082934fddb87a44.tar.gz |
tv standard selection support for dv1394 and grab (v4l)
Originally committed as revision 1987 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/avformat.h | 1 | ||||
-rw-r--r-- | libavformat/dv1394.c | 6 | ||||
-rw-r--r-- | libavformat/grab.c | 12 |
3 files changed, 17 insertions, 2 deletions
diff --git a/libavformat/avformat.h b/libavformat/avformat.h index e7dab88..29ca987 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -86,6 +86,7 @@ typedef struct AVFormatParameters { struct AVImageFormat *image_format; int channel; /* used to select dv channel */ const char *device; /* video4linux, audio or DV device */ + const char *standard; /* tv standard, NTSC, PAL, SECAM */ } AVFormatParameters; #define AVFMT_NOFILE 0x0001 /* no file should be opened */ diff --git a/libavformat/dv1394.c b/libavformat/dv1394.c index 5e8b83d..0e373a3 100644 --- a/libavformat/dv1394.c +++ b/libavformat/dv1394.c @@ -91,8 +91,10 @@ static int dv1394_read_header(AVFormatContext * context, AVFormatParameters * ap return -ENOMEM; } - /* FIXME: Need a format change parameter */ - dv->format = DV1394_NTSC; + if (ap->standard && !strcasecmp(ap->standard, "pal")) + dv->format = DV1394_PAL; + else + dv->format = DV1394_NTSC; if (ap->channel) dv->channel = ap->channel; diff --git a/libavformat/grab.c b/libavformat/grab.c index 3a99704..cd4b8fe 100644 --- a/libavformat/grab.c +++ b/libavformat/grab.c @@ -62,6 +62,7 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap) int video_fd, frame_size; int ret, frame_rate, frame_rate_base; int desired_palette; + struct video_tuner tuner; struct video_audio audio; const char *video_device; @@ -109,6 +110,17 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap) } else if (st->codec.pix_fmt == PIX_FMT_BGR24) { desired_palette = VIDEO_PALETTE_RGB24; } + + /* set tv standard */ + if (ap->standard && !ioctl(video_fd, VIDIOCGTUNER, &tuner)) { + if (!strcasecmp(ap->standard, "pal")) + tuner.mode = VIDEO_MODE_PAL; + else if (!strcasecmp(ap->standard, "secam")) + tuner.mode = VIDEO_MODE_SECAM; + else + tuner.mode = VIDEO_MODE_NTSC; + ioctl(video_fd, VIDIOCSTUNER, &tuner); + } /* unmute audio */ audio.audio = 0; |