mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
tv standard selection support for dv1394 and grab (v4l)
Originally committed as revision 1987 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
93caefc7d6
commit
e3ee328330
8
ffmpeg.c
8
ffmpeg.c
@ -159,6 +159,7 @@ static int rate_emu = 0;
|
||||
static char *video_grab_format = "video4linux";
|
||||
static char *video_device = NULL;
|
||||
static int video_channel = 0;
|
||||
static char *video_standard = "ntsc";
|
||||
|
||||
static char *audio_grab_format = "audio_device";
|
||||
static char *audio_device = NULL;
|
||||
@ -1858,6 +1859,11 @@ static void opt_video_channel(const char *arg)
|
||||
video_channel = strtol(arg, NULL, 0);
|
||||
}
|
||||
|
||||
static void opt_video_standard(const char *arg)
|
||||
{
|
||||
video_standard = av_strdup(arg);
|
||||
}
|
||||
|
||||
static void opt_audio_device(const char *arg)
|
||||
{
|
||||
audio_device = av_strdup(arg);
|
||||
@ -2457,6 +2463,7 @@ static void prepare_grab(void)
|
||||
fmt1 = av_find_input_format(video_grab_format);
|
||||
vp->device = video_device;
|
||||
vp->channel = video_channel;
|
||||
vp->standard = video_standard;
|
||||
if (av_open_input_file(&ic, "", fmt1, 0, vp) < 0) {
|
||||
fprintf(stderr, "Could not find video grab device\n");
|
||||
exit(1);
|
||||
@ -2644,6 +2651,7 @@ const OptionDef options[] = {
|
||||
{ "bufsize", HAS_ARG, {(void*)opt_video_buffer_size}, "set ratecontrol buffere size (in kbit)", "size" },
|
||||
{ "vd", HAS_ARG | OPT_EXPERT, {(void*)opt_video_device}, "set video grab device", "device" },
|
||||
{ "vc", HAS_ARG | OPT_EXPERT, {(void*)opt_video_channel}, "set video grab channel (DV1394 only)", "channel" },
|
||||
{ "tvstd", HAS_ARG | OPT_EXPERT, {(void*)opt_video_standard}, "set television standard (NTSC, PAL (SECAM))", "standard" },
|
||||
{ "dv1394", OPT_EXPERT, {(void*)opt_dv1394}, "set DV1394 grab", "" },
|
||||
{ "vcodec", HAS_ARG | OPT_EXPERT, {(void*)opt_video_codec}, "force video codec ('copy' to copy stream)", "codec" },
|
||||
{ "me", HAS_ARG | OPT_EXPERT, {(void*)opt_motion_estimation}, "set motion estimation method",
|
||||
|
@ -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 */
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user