mirror of
https://git.videolan.org/git/ffmpeg.git
synced 2024-08-21 16:55:05 +02:00
v4l2: do not force interlaced mode
Video4linux2 supports both interlaced and non-interlaced mode, do not ask for interlaced if not necessary.
This commit is contained in:
parent
a2d1d21629
commit
af7123b2ad
@ -64,6 +64,7 @@ struct video_data {
|
|||||||
enum io_method io_method;
|
enum io_method io_method;
|
||||||
int width, height;
|
int width, height;
|
||||||
int frame_size;
|
int frame_size;
|
||||||
|
int interlaced;
|
||||||
int top_field_first;
|
int top_field_first;
|
||||||
|
|
||||||
int buffers;
|
int buffers;
|
||||||
@ -162,7 +163,7 @@ static int device_init(AVFormatContext *ctx, int *width, int *height, uint32_t p
|
|||||||
fmt.fmt.pix.width = *width;
|
fmt.fmt.pix.width = *width;
|
||||||
fmt.fmt.pix.height = *height;
|
fmt.fmt.pix.height = *height;
|
||||||
fmt.fmt.pix.pixelformat = pix_fmt;
|
fmt.fmt.pix.pixelformat = pix_fmt;
|
||||||
fmt.fmt.pix.field = V4L2_FIELD_INTERLACED;
|
fmt.fmt.pix.field = V4L2_FIELD_ANY;
|
||||||
res = ioctl(fd, VIDIOC_S_FMT, &fmt);
|
res = ioctl(fd, VIDIOC_S_FMT, &fmt);
|
||||||
if ((*width != fmt.fmt.pix.width) || (*height != fmt.fmt.pix.height)) {
|
if ((*width != fmt.fmt.pix.width) || (*height != fmt.fmt.pix.height)) {
|
||||||
av_log(ctx, AV_LOG_INFO, "The V4L2 driver changed the video from %dx%d to %dx%d\n", *width, *height, fmt.fmt.pix.width, fmt.fmt.pix.height);
|
av_log(ctx, AV_LOG_INFO, "The V4L2 driver changed the video from %dx%d to %dx%d\n", *width, *height, fmt.fmt.pix.width, fmt.fmt.pix.height);
|
||||||
@ -175,6 +176,11 @@ static int device_init(AVFormatContext *ctx, int *width, int *height, uint32_t p
|
|||||||
res = -1;
|
res = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (fmt.fmt.pix.field == V4L2_FIELD_INTERLACED) {
|
||||||
|
av_log(ctx, AV_LOG_DEBUG, "The V4L2 driver using the interlaced mode");
|
||||||
|
s->interlaced = 1;
|
||||||
|
}
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -686,7 +692,7 @@ static int v4l2_read_packet(AVFormatContext *s1, AVPacket *pkt)
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (s1->streams[0]->codec->coded_frame) {
|
if (s1->streams[0]->codec->coded_frame && s->interlaced) {
|
||||||
s1->streams[0]->codec->coded_frame->interlaced_frame = 1;
|
s1->streams[0]->codec->coded_frame->interlaced_frame = 1;
|
||||||
s1->streams[0]->codec->coded_frame->top_field_first = s->top_field_first;
|
s1->streams[0]->codec->coded_frame->top_field_first = s->top_field_first;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user