diff options
author | Hans Verkuil <hverkuil@xs4all.nl> | 2007-04-27 11:31:00 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2007-04-27 14:43:18 -0400 |
commit | 5eee72e88416ef11f55791626440ac3c9018c4c0 (patch) | |
tree | 0d4f7a69f2ec75c95a459d5ef6ab461e6750910a | |
parent | b7eee616ad8db5db5441a7d82083003df3ab6d3b (diff) |
V4L/DVB (5268): Add support for three new MPEG controls.
Added V4L2_CID_MPEG_AUDIO_MUTE, V4L2_CID_MPEG_VIDEO_MUTE and
V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS controls together with
their implementation in the cx2341x module.
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
-rw-r--r-- | drivers/media/video/cx2341x.c | 72 | ||||
-rw-r--r-- | drivers/media/video/v4l2-common.c | 10 | ||||
-rw-r--r-- | include/linux/videodev2.h | 4 | ||||
-rw-r--r-- | include/media/cx2341x.h | 4 |
4 files changed, 85 insertions, 5 deletions
diff --git a/drivers/media/video/cx2341x.c b/drivers/media/video/cx2341x.c index d60cd5ecf821..88dbdddeec42 100644 --- a/drivers/media/video/cx2341x.c +++ b/drivers/media/video/cx2341x.c | |||
@@ -51,6 +51,7 @@ const u32 cx2341x_mpeg_ctrls[] = { | |||
51 | V4L2_CID_MPEG_AUDIO_MODE_EXTENSION, | 51 | V4L2_CID_MPEG_AUDIO_MODE_EXTENSION, |
52 | V4L2_CID_MPEG_AUDIO_EMPHASIS, | 52 | V4L2_CID_MPEG_AUDIO_EMPHASIS, |
53 | V4L2_CID_MPEG_AUDIO_CRC, | 53 | V4L2_CID_MPEG_AUDIO_CRC, |
54 | V4L2_CID_MPEG_AUDIO_MUTE, | ||
54 | V4L2_CID_MPEG_VIDEO_ENCODING, | 55 | V4L2_CID_MPEG_VIDEO_ENCODING, |
55 | V4L2_CID_MPEG_VIDEO_ASPECT, | 56 | V4L2_CID_MPEG_VIDEO_ASPECT, |
56 | V4L2_CID_MPEG_VIDEO_B_FRAMES, | 57 | V4L2_CID_MPEG_VIDEO_B_FRAMES, |
@@ -60,6 +61,8 @@ const u32 cx2341x_mpeg_ctrls[] = { | |||
60 | V4L2_CID_MPEG_VIDEO_BITRATE, | 61 | V4L2_CID_MPEG_VIDEO_BITRATE, |
61 | V4L2_CID_MPEG_VIDEO_BITRATE_PEAK, | 62 | V4L2_CID_MPEG_VIDEO_BITRATE_PEAK, |
62 | V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION, | 63 | V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION, |
64 | V4L2_CID_MPEG_VIDEO_MUTE, | ||
65 | V4L2_CID_MPEG_VIDEO_MUTE_YUV, | ||
63 | V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE, | 66 | V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE, |
64 | V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER, | 67 | V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER, |
65 | V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE, | 68 | V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE, |
@@ -71,6 +74,7 @@ const u32 cx2341x_mpeg_ctrls[] = { | |||
71 | V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP, | 74 | V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP, |
72 | V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM, | 75 | V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM, |
73 | V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP, | 76 | V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP, |
77 | V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS, | ||
74 | 0 | 78 | 0 |
75 | }; | 79 | }; |
76 | 80 | ||
@@ -102,6 +106,9 @@ static int cx2341x_get_ctrl(struct cx2341x_mpeg_params *params, | |||
102 | case V4L2_CID_MPEG_AUDIO_CRC: | 106 | case V4L2_CID_MPEG_AUDIO_CRC: |
103 | ctrl->value = params->audio_crc; | 107 | ctrl->value = params->audio_crc; |
104 | break; | 108 | break; |
109 | case V4L2_CID_MPEG_AUDIO_MUTE: | ||
110 | ctrl->value = params->audio_mute; | ||
111 | break; | ||
105 | case V4L2_CID_MPEG_VIDEO_ENCODING: | 112 | case V4L2_CID_MPEG_VIDEO_ENCODING: |
106 | ctrl->value = params->video_encoding; | 113 | ctrl->value = params->video_encoding; |
107 | break; | 114 | break; |
@@ -129,6 +136,12 @@ static int cx2341x_get_ctrl(struct cx2341x_mpeg_params *params, | |||
129 | case V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION: | 136 | case V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION: |
130 | ctrl->value = params->video_temporal_decimation; | 137 | ctrl->value = params->video_temporal_decimation; |
131 | break; | 138 | break; |
139 | case V4L2_CID_MPEG_VIDEO_MUTE: | ||
140 | ctrl->value = params->video_mute; | ||
141 | break; | ||
142 | case V4L2_CID_MPEG_VIDEO_MUTE_YUV: | ||
143 | ctrl->value = params->video_mute_yuv; | ||
144 | break; | ||
132 | case V4L2_CID_MPEG_STREAM_TYPE: | 145 | case V4L2_CID_MPEG_STREAM_TYPE: |
133 | ctrl->value = params->stream_type; | 146 | ctrl->value = params->stream_type; |
134 | break; | 147 | break; |
@@ -168,6 +181,9 @@ static int cx2341x_get_ctrl(struct cx2341x_mpeg_params *params, | |||
168 | case V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM: | 181 | case V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM: |
169 | ctrl->value = params->video_chroma_median_filter_bottom; | 182 | ctrl->value = params->video_chroma_median_filter_bottom; |
170 | break; | 183 | break; |
184 | case V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS: | ||
185 | ctrl->value = params->stream_insert_nav_packets; | ||
186 | break; | ||
171 | default: | 187 | default: |
172 | return -EINVAL; | 188 | return -EINVAL; |
173 | } | 189 | } |
@@ -201,6 +217,9 @@ static int cx2341x_set_ctrl(struct cx2341x_mpeg_params *params, | |||
201 | case V4L2_CID_MPEG_AUDIO_CRC: | 217 | case V4L2_CID_MPEG_AUDIO_CRC: |
202 | params->audio_crc = ctrl->value; | 218 | params->audio_crc = ctrl->value; |
203 | break; | 219 | break; |
220 | case V4L2_CID_MPEG_AUDIO_MUTE: | ||
221 | params->audio_mute = ctrl->value; | ||
222 | break; | ||
204 | case V4L2_CID_MPEG_VIDEO_ASPECT: | 223 | case V4L2_CID_MPEG_VIDEO_ASPECT: |
205 | params->video_aspect = ctrl->value; | 224 | params->video_aspect = ctrl->value; |
206 | break; | 225 | break; |
@@ -243,6 +262,12 @@ static int cx2341x_set_ctrl(struct cx2341x_mpeg_params *params, | |||
243 | case V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION: | 262 | case V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION: |
244 | params->video_temporal_decimation = ctrl->value; | 263 | params->video_temporal_decimation = ctrl->value; |
245 | break; | 264 | break; |
265 | case V4L2_CID_MPEG_VIDEO_MUTE: | ||
266 | params->video_mute = (ctrl->value != 0); | ||
267 | break; | ||
268 | case V4L2_CID_MPEG_VIDEO_MUTE_YUV: | ||
269 | params->video_mute_yuv = ctrl->value; | ||
270 | break; | ||
246 | case V4L2_CID_MPEG_STREAM_TYPE: | 271 | case V4L2_CID_MPEG_STREAM_TYPE: |
247 | params->stream_type = ctrl->value; | 272 | params->stream_type = ctrl->value; |
248 | params->video_encoding = | 273 | params->video_encoding = |
@@ -290,6 +315,9 @@ static int cx2341x_set_ctrl(struct cx2341x_mpeg_params *params, | |||
290 | case V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM: | 315 | case V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM: |
291 | params->video_chroma_median_filter_bottom = ctrl->value; | 316 | params->video_chroma_median_filter_bottom = ctrl->value; |
292 | break; | 317 | break; |
318 | case V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS: | ||
319 | params->stream_insert_nav_packets = ctrl->value; | ||
320 | break; | ||
293 | default: | 321 | default: |
294 | return -EINVAL; | 322 | return -EINVAL; |
295 | } | 323 | } |
@@ -336,6 +364,9 @@ static int cx2341x_ctrl_query_fill(struct v4l2_queryctrl *qctrl, s32 min, s32 ma | |||
336 | case V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM: | 364 | case V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM: |
337 | name = "Median Chroma Filter Minimum"; | 365 | name = "Median Chroma Filter Minimum"; |
338 | break; | 366 | break; |
367 | case V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS: | ||
368 | name = "Insert Navigation Packets"; | ||
369 | break; | ||
339 | 370 | ||
340 | default: | 371 | default: |
341 | return v4l2_ctrl_query_fill(qctrl, min, max, step, def); | 372 | return v4l2_ctrl_query_fill(qctrl, min, max, step, def); |
@@ -350,6 +381,12 @@ static int cx2341x_ctrl_query_fill(struct v4l2_queryctrl *qctrl, s32 min, s32 ma | |||
350 | min = 0; | 381 | min = 0; |
351 | step = 1; | 382 | step = 1; |
352 | break; | 383 | break; |
384 | case V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS: | ||
385 | qctrl->type = V4L2_CTRL_TYPE_BOOLEAN; | ||
386 | min = 0; | ||
387 | max = 1; | ||
388 | step = 1; | ||
389 | break; | ||
353 | default: | 390 | default: |
354 | qctrl->type = V4L2_CTRL_TYPE_INTEGER; | 391 | qctrl->type = V4L2_CTRL_TYPE_INTEGER; |
355 | break; | 392 | break; |
@@ -505,6 +542,9 @@ int cx2341x_ctrl_query(struct cx2341x_mpeg_params *params, struct v4l2_queryctrl | |||
505 | qctrl->flags |= V4L2_CTRL_FLAG_INACTIVE; | 542 | qctrl->flags |= V4L2_CTRL_FLAG_INACTIVE; |
506 | return 0; | 543 | return 0; |
507 | 544 | ||
545 | case V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS: | ||
546 | return cx2341x_ctrl_query_fill(qctrl, 0, 1, 1, 0); | ||
547 | |||
508 | default: | 548 | default: |
509 | return v4l2_ctrl_query_fill_std(qctrl); | 549 | return v4l2_ctrl_query_fill_std(qctrl); |
510 | 550 | ||
@@ -656,6 +696,7 @@ void cx2341x_fill_defaults(struct cx2341x_mpeg_params *p) | |||
656 | /* stream */ | 696 | /* stream */ |
657 | .stream_type = V4L2_MPEG_STREAM_TYPE_MPEG2_PS, | 697 | .stream_type = V4L2_MPEG_STREAM_TYPE_MPEG2_PS, |
658 | .stream_vbi_fmt = V4L2_MPEG_STREAM_VBI_FMT_NONE, | 698 | .stream_vbi_fmt = V4L2_MPEG_STREAM_VBI_FMT_NONE, |
699 | .stream_insert_nav_packets = 0, | ||
659 | 700 | ||
660 | /* audio */ | 701 | /* audio */ |
661 | .audio_sampling_freq = V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000, | 702 | .audio_sampling_freq = V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000, |
@@ -665,6 +706,7 @@ void cx2341x_fill_defaults(struct cx2341x_mpeg_params *p) | |||
665 | .audio_mode_extension = V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_4, | 706 | .audio_mode_extension = V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_4, |
666 | .audio_emphasis = V4L2_MPEG_AUDIO_EMPHASIS_NONE, | 707 | .audio_emphasis = V4L2_MPEG_AUDIO_EMPHASIS_NONE, |
667 | .audio_crc = V4L2_MPEG_AUDIO_CRC_NONE, | 708 | .audio_crc = V4L2_MPEG_AUDIO_CRC_NONE, |
709 | .audio_mute = 0, | ||
668 | 710 | ||
669 | /* video */ | 711 | /* video */ |
670 | .video_encoding = V4L2_MPEG_VIDEO_ENCODING_MPEG_2, | 712 | .video_encoding = V4L2_MPEG_VIDEO_ENCODING_MPEG_2, |
@@ -676,6 +718,8 @@ void cx2341x_fill_defaults(struct cx2341x_mpeg_params *p) | |||
676 | .video_bitrate = 6000000, | 718 | .video_bitrate = 6000000, |
677 | .video_bitrate_peak = 8000000, | 719 | .video_bitrate_peak = 8000000, |
678 | .video_temporal_decimation = 0, | 720 | .video_temporal_decimation = 0, |
721 | .video_mute = 0, | ||
722 | .video_mute_yuv = 0x008080, /* YCbCr value for black */ | ||
679 | 723 | ||
680 | /* encoding filters */ | 724 | /* encoding filters */ |
681 | .video_spatial_filter_mode = V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_MANUAL, | 725 | .video_spatial_filter_mode = V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_MANUAL, |
@@ -779,6 +823,10 @@ int cx2341x_update(void *priv, cx2341x_mbox_func func, | |||
779 | err = cx2341x_api(priv, func, CX2341X_ENC_SET_AUDIO_PROPERTIES, 1, new->audio_properties); | 823 | err = cx2341x_api(priv, func, CX2341X_ENC_SET_AUDIO_PROPERTIES, 1, new->audio_properties); |
780 | if (err) return err; | 824 | if (err) return err; |
781 | } | 825 | } |
826 | if (old == NULL || old->audio_mute != new->audio_mute) { | ||
827 | err = cx2341x_api(priv, func, CX2341X_ENC_MUTE_AUDIO, 1, new->audio_mute); | ||
828 | if (err) return err; | ||
829 | } | ||
782 | if (old == NULL || old->video_bitrate_mode != new->video_bitrate_mode || | 830 | if (old == NULL || old->video_bitrate_mode != new->video_bitrate_mode || |
783 | old->video_bitrate != new->video_bitrate || | 831 | old->video_bitrate != new->video_bitrate || |
784 | old->video_bitrate_peak != new->video_bitrate_peak) { | 832 | old->video_bitrate_peak != new->video_bitrate_peak) { |
@@ -826,6 +874,15 @@ int cx2341x_update(void *priv, cx2341x_mbox_func func, | |||
826 | new->video_temporal_decimation); | 874 | new->video_temporal_decimation); |
827 | if (err) return err; | 875 | if (err) return err; |
828 | } | 876 | } |
877 | if (old == NULL || old->video_mute != new->video_mute || | ||
878 | (new->video_mute && old->video_mute_yuv != new->video_mute_yuv)) { | ||
879 | err = cx2341x_api(priv, func, CX2341X_ENC_MUTE_VIDEO, 1, new->video_mute | (new->video_mute_yuv << 8)); | ||
880 | if (err) return err; | ||
881 | } | ||
882 | if (old == NULL || old->stream_insert_nav_packets != new->stream_insert_nav_packets) { | ||
883 | err = cx2341x_api(priv, func, CX2341X_ENC_MISC, 2, 7, new->stream_insert_nav_packets); | ||
884 | if (err) return err; | ||
885 | } | ||
829 | return 0; | 886 | return 0; |
830 | } | 887 | } |
831 | 888 | ||
@@ -854,18 +911,22 @@ void cx2341x_log_status(struct cx2341x_mpeg_params *p, const char *prefix) | |||
854 | int temporal = p->video_temporal_filter; | 911 | int temporal = p->video_temporal_filter; |
855 | 912 | ||
856 | /* Stream */ | 913 | /* Stream */ |
857 | printk(KERN_INFO "%s: Stream: %s\n", | 914 | printk(KERN_INFO "%s: Stream: %s", |
858 | prefix, | 915 | prefix, |
859 | cx2341x_menu_item(p, V4L2_CID_MPEG_STREAM_TYPE)); | 916 | cx2341x_menu_item(p, V4L2_CID_MPEG_STREAM_TYPE)); |
917 | if (p->stream_insert_nav_packets) | ||
918 | printk(" (with navigation packets)"); | ||
919 | printk("\n"); | ||
860 | printk(KERN_INFO "%s: VBI Format: %s\n", | 920 | printk(KERN_INFO "%s: VBI Format: %s\n", |
861 | prefix, | 921 | prefix, |
862 | cx2341x_menu_item(p, V4L2_CID_MPEG_STREAM_VBI_FMT)); | 922 | cx2341x_menu_item(p, V4L2_CID_MPEG_STREAM_VBI_FMT)); |
863 | 923 | ||
864 | /* Video */ | 924 | /* Video */ |
865 | printk(KERN_INFO "%s: Video: %dx%d, %d fps\n", | 925 | printk(KERN_INFO "%s: Video: %dx%d, %d fps%s\n", |
866 | prefix, | 926 | prefix, |
867 | p->width / (is_mpeg1 ? 2 : 1), p->height / (is_mpeg1 ? 2 : 1), | 927 | p->width / (is_mpeg1 ? 2 : 1), p->height / (is_mpeg1 ? 2 : 1), |
868 | p->is_50hz ? 25 : 30); | 928 | p->is_50hz ? 25 : 30, |
929 | (p->video_mute) ? " (muted)" : ""); | ||
869 | printk(KERN_INFO "%s: Video: %s, %s, %s, %d", | 930 | printk(KERN_INFO "%s: Video: %s, %s, %s, %d", |
870 | prefix, | 931 | prefix, |
871 | cx2341x_menu_item(p, V4L2_CID_MPEG_VIDEO_ENCODING), | 932 | cx2341x_menu_item(p, V4L2_CID_MPEG_VIDEO_ENCODING), |
@@ -886,12 +947,13 @@ void cx2341x_log_status(struct cx2341x_mpeg_params *p, const char *prefix) | |||
886 | } | 947 | } |
887 | 948 | ||
888 | /* Audio */ | 949 | /* Audio */ |
889 | printk(KERN_INFO "%s: Audio: %s, %s, %s, %s", | 950 | printk(KERN_INFO "%s: Audio: %s, %s, %s, %s%s", |
890 | prefix, | 951 | prefix, |
891 | cx2341x_menu_item(p, V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ), | 952 | cx2341x_menu_item(p, V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ), |
892 | cx2341x_menu_item(p, V4L2_CID_MPEG_AUDIO_ENCODING), | 953 | cx2341x_menu_item(p, V4L2_CID_MPEG_AUDIO_ENCODING), |
893 | cx2341x_menu_item(p, V4L2_CID_MPEG_AUDIO_L2_BITRATE), | 954 | cx2341x_menu_item(p, V4L2_CID_MPEG_AUDIO_L2_BITRATE), |
894 | cx2341x_menu_item(p, V4L2_CID_MPEG_AUDIO_MODE)); | 955 | cx2341x_menu_item(p, V4L2_CID_MPEG_AUDIO_MODE), |
956 | p->audio_mute ? " (muted)" : ""); | ||
895 | if (p->audio_mode == V4L2_MPEG_AUDIO_MODE_JOINT_STEREO) { | 957 | if (p->audio_mode == V4L2_MPEG_AUDIO_MODE_JOINT_STEREO) { |
896 | printk(", %s", | 958 | printk(", %s", |
897 | cx2341x_menu_item(p, V4L2_CID_MPEG_AUDIO_MODE_EXTENSION)); | 959 | cx2341x_menu_item(p, V4L2_CID_MPEG_AUDIO_MODE_EXTENSION)); |
diff --git a/drivers/media/video/v4l2-common.c b/drivers/media/video/v4l2-common.c index 54747606eae1..43a8467f0209 100644 --- a/drivers/media/video/v4l2-common.c +++ b/drivers/media/video/v4l2-common.c | |||
@@ -680,6 +680,7 @@ int v4l2_ctrl_query_fill(struct v4l2_queryctrl *qctrl, s32 min, s32 max, s32 ste | |||
680 | case V4L2_CID_MPEG_AUDIO_MODE_EXTENSION: name = "Audio Stereo Mode Extension"; break; | 680 | case V4L2_CID_MPEG_AUDIO_MODE_EXTENSION: name = "Audio Stereo Mode Extension"; break; |
681 | case V4L2_CID_MPEG_AUDIO_EMPHASIS: name = "Audio Emphasis"; break; | 681 | case V4L2_CID_MPEG_AUDIO_EMPHASIS: name = "Audio Emphasis"; break; |
682 | case V4L2_CID_MPEG_AUDIO_CRC: name = "Audio CRC"; break; | 682 | case V4L2_CID_MPEG_AUDIO_CRC: name = "Audio CRC"; break; |
683 | case V4L2_CID_MPEG_AUDIO_MUTE: name = "Audio Mute"; break; | ||
683 | case V4L2_CID_MPEG_VIDEO_ENCODING: name = "Video Encoding"; break; | 684 | case V4L2_CID_MPEG_VIDEO_ENCODING: name = "Video Encoding"; break; |
684 | case V4L2_CID_MPEG_VIDEO_ASPECT: name = "Video Aspect"; break; | 685 | case V4L2_CID_MPEG_VIDEO_ASPECT: name = "Video Aspect"; break; |
685 | case V4L2_CID_MPEG_VIDEO_B_FRAMES: name = "Video B Frames"; break; | 686 | case V4L2_CID_MPEG_VIDEO_B_FRAMES: name = "Video B Frames"; break; |
@@ -690,6 +691,8 @@ int v4l2_ctrl_query_fill(struct v4l2_queryctrl *qctrl, s32 min, s32 max, s32 ste | |||
690 | case V4L2_CID_MPEG_VIDEO_BITRATE: name = "Video Bitrate"; break; | 691 | case V4L2_CID_MPEG_VIDEO_BITRATE: name = "Video Bitrate"; break; |
691 | case V4L2_CID_MPEG_VIDEO_BITRATE_PEAK: name = "Video Peak Bitrate"; break; | 692 | case V4L2_CID_MPEG_VIDEO_BITRATE_PEAK: name = "Video Peak Bitrate"; break; |
692 | case V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION: name = "Video Temporal Decimation"; break; | 693 | case V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION: name = "Video Temporal Decimation"; break; |
694 | case V4L2_CID_MPEG_VIDEO_MUTE: name = "Video Mute"; break; | ||
695 | case V4L2_CID_MPEG_VIDEO_MUTE_YUV: name = "Video Mute YUV"; break; | ||
693 | case V4L2_CID_MPEG_STREAM_TYPE: name = "Stream Type"; break; | 696 | case V4L2_CID_MPEG_STREAM_TYPE: name = "Stream Type"; break; |
694 | case V4L2_CID_MPEG_STREAM_PID_PMT: name = "Stream PMT Program ID"; break; | 697 | case V4L2_CID_MPEG_STREAM_PID_PMT: name = "Stream PMT Program ID"; break; |
695 | case V4L2_CID_MPEG_STREAM_PID_AUDIO: name = "Stream Audio Program ID"; break; | 698 | case V4L2_CID_MPEG_STREAM_PID_AUDIO: name = "Stream Audio Program ID"; break; |
@@ -705,6 +708,7 @@ int v4l2_ctrl_query_fill(struct v4l2_queryctrl *qctrl, s32 min, s32 max, s32 ste | |||
705 | switch (qctrl->id) { | 708 | switch (qctrl->id) { |
706 | case V4L2_CID_AUDIO_MUTE: | 709 | case V4L2_CID_AUDIO_MUTE: |
707 | case V4L2_CID_AUDIO_LOUDNESS: | 710 | case V4L2_CID_AUDIO_LOUDNESS: |
711 | case V4L2_CID_MPEG_AUDIO_MUTE: | ||
708 | case V4L2_CID_MPEG_VIDEO_GOP_CLOSURE: | 712 | case V4L2_CID_MPEG_VIDEO_GOP_CLOSURE: |
709 | case V4L2_CID_MPEG_VIDEO_PULLDOWN: | 713 | case V4L2_CID_MPEG_VIDEO_PULLDOWN: |
710 | qctrl->type = V4L2_CTRL_TYPE_BOOLEAN; | 714 | qctrl->type = V4L2_CTRL_TYPE_BOOLEAN; |
@@ -838,6 +842,8 @@ int v4l2_ctrl_query_fill_std(struct v4l2_queryctrl *qctrl) | |||
838 | V4L2_MPEG_AUDIO_CRC_NONE, | 842 | V4L2_MPEG_AUDIO_CRC_NONE, |
839 | V4L2_MPEG_AUDIO_CRC_CRC16, 1, | 843 | V4L2_MPEG_AUDIO_CRC_CRC16, 1, |
840 | V4L2_MPEG_AUDIO_CRC_NONE); | 844 | V4L2_MPEG_AUDIO_CRC_NONE); |
845 | case V4L2_CID_MPEG_AUDIO_MUTE: | ||
846 | return v4l2_ctrl_query_fill(qctrl, 0, 1, 1, 0); | ||
841 | case V4L2_CID_MPEG_VIDEO_ENCODING: | 847 | case V4L2_CID_MPEG_VIDEO_ENCODING: |
842 | return v4l2_ctrl_query_fill(qctrl, | 848 | return v4l2_ctrl_query_fill(qctrl, |
843 | V4L2_MPEG_VIDEO_ENCODING_MPEG_1, | 849 | V4L2_MPEG_VIDEO_ENCODING_MPEG_1, |
@@ -867,6 +873,10 @@ int v4l2_ctrl_query_fill_std(struct v4l2_queryctrl *qctrl) | |||
867 | return v4l2_ctrl_query_fill(qctrl, 0, 27000000, 1, 8000000); | 873 | return v4l2_ctrl_query_fill(qctrl, 0, 27000000, 1, 8000000); |
868 | case V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION: | 874 | case V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION: |
869 | return v4l2_ctrl_query_fill(qctrl, 0, 255, 1, 0); | 875 | return v4l2_ctrl_query_fill(qctrl, 0, 255, 1, 0); |
876 | case V4L2_CID_MPEG_VIDEO_MUTE: | ||
877 | return v4l2_ctrl_query_fill(qctrl, 0, 1, 1, 0); | ||
878 | case V4L2_CID_MPEG_VIDEO_MUTE_YUV: /* Init YUV (really YCbCr) to black */ | ||
879 | return v4l2_ctrl_query_fill(qctrl, 0, 0xffffff, 1, 0x008080); | ||
870 | case V4L2_CID_MPEG_STREAM_TYPE: | 880 | case V4L2_CID_MPEG_STREAM_TYPE: |
871 | return v4l2_ctrl_query_fill(qctrl, | 881 | return v4l2_ctrl_query_fill(qctrl, |
872 | V4L2_MPEG_STREAM_TYPE_MPEG2_PS, | 882 | V4L2_MPEG_STREAM_TYPE_MPEG2_PS, |
diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h index 441b877bf150..7b83d17c4cdd 100644 --- a/include/linux/videodev2.h +++ b/include/linux/videodev2.h | |||
@@ -1037,6 +1037,7 @@ enum v4l2_mpeg_audio_crc { | |||
1037 | V4L2_MPEG_AUDIO_CRC_NONE = 0, | 1037 | V4L2_MPEG_AUDIO_CRC_NONE = 0, |
1038 | V4L2_MPEG_AUDIO_CRC_CRC16 = 1, | 1038 | V4L2_MPEG_AUDIO_CRC_CRC16 = 1, |
1039 | }; | 1039 | }; |
1040 | #define V4L2_CID_MPEG_AUDIO_MUTE (V4L2_CID_MPEG_BASE+109) | ||
1040 | 1041 | ||
1041 | /* MPEG video */ | 1042 | /* MPEG video */ |
1042 | #define V4L2_CID_MPEG_VIDEO_ENCODING (V4L2_CID_MPEG_BASE+200) | 1043 | #define V4L2_CID_MPEG_VIDEO_ENCODING (V4L2_CID_MPEG_BASE+200) |
@@ -1063,6 +1064,8 @@ enum v4l2_mpeg_video_bitrate_mode { | |||
1063 | #define V4L2_CID_MPEG_VIDEO_BITRATE (V4L2_CID_MPEG_BASE+207) | 1064 | #define V4L2_CID_MPEG_VIDEO_BITRATE (V4L2_CID_MPEG_BASE+207) |
1064 | #define V4L2_CID_MPEG_VIDEO_BITRATE_PEAK (V4L2_CID_MPEG_BASE+208) | 1065 | #define V4L2_CID_MPEG_VIDEO_BITRATE_PEAK (V4L2_CID_MPEG_BASE+208) |
1065 | #define V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION (V4L2_CID_MPEG_BASE+209) | 1066 | #define V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION (V4L2_CID_MPEG_BASE+209) |
1067 | #define V4L2_CID_MPEG_VIDEO_MUTE (V4L2_CID_MPEG_BASE+210) | ||
1068 | #define V4L2_CID_MPEG_VIDEO_MUTE_YUV (V4L2_CID_MPEG_BASE+211) | ||
1066 | 1069 | ||
1067 | /* MPEG-class control IDs specific to the CX2584x driver as defined by V4L2 */ | 1070 | /* MPEG-class control IDs specific to the CX2584x driver as defined by V4L2 */ |
1068 | #define V4L2_CID_MPEG_CX2341X_BASE (V4L2_CTRL_CLASS_MPEG | 0x1000) | 1071 | #define V4L2_CID_MPEG_CX2341X_BASE (V4L2_CTRL_CLASS_MPEG | 0x1000) |
@@ -1103,6 +1106,7 @@ enum v4l2_mpeg_cx2341x_video_median_filter_type { | |||
1103 | #define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP (V4L2_CID_MPEG_CX2341X_BASE+8) | 1106 | #define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP (V4L2_CID_MPEG_CX2341X_BASE+8) |
1104 | #define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM (V4L2_CID_MPEG_CX2341X_BASE+9) | 1107 | #define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM (V4L2_CID_MPEG_CX2341X_BASE+9) |
1105 | #define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP (V4L2_CID_MPEG_CX2341X_BASE+10) | 1108 | #define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP (V4L2_CID_MPEG_CX2341X_BASE+10) |
1109 | #define V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS (V4L2_CID_MPEG_CX2341X_BASE+11) | ||
1106 | 1110 | ||
1107 | /* | 1111 | /* |
1108 | * T U N I N G | 1112 | * T U N I N G |
diff --git a/include/media/cx2341x.h b/include/media/cx2341x.h index d758a52cf556..583b0621ff43 100644 --- a/include/media/cx2341x.h +++ b/include/media/cx2341x.h | |||
@@ -40,6 +40,7 @@ struct cx2341x_mpeg_params { | |||
40 | /* stream */ | 40 | /* stream */ |
41 | enum v4l2_mpeg_stream_type stream_type; | 41 | enum v4l2_mpeg_stream_type stream_type; |
42 | enum v4l2_mpeg_stream_vbi_fmt stream_vbi_fmt; | 42 | enum v4l2_mpeg_stream_vbi_fmt stream_vbi_fmt; |
43 | u16 stream_insert_nav_packets; | ||
43 | 44 | ||
44 | /* audio */ | 45 | /* audio */ |
45 | enum v4l2_mpeg_audio_sampling_freq audio_sampling_freq; | 46 | enum v4l2_mpeg_audio_sampling_freq audio_sampling_freq; |
@@ -50,6 +51,7 @@ struct cx2341x_mpeg_params { | |||
50 | enum v4l2_mpeg_audio_emphasis audio_emphasis; | 51 | enum v4l2_mpeg_audio_emphasis audio_emphasis; |
51 | enum v4l2_mpeg_audio_crc audio_crc; | 52 | enum v4l2_mpeg_audio_crc audio_crc; |
52 | u16 audio_properties; | 53 | u16 audio_properties; |
54 | u16 audio_mute; | ||
53 | 55 | ||
54 | /* video */ | 56 | /* video */ |
55 | enum v4l2_mpeg_video_encoding video_encoding; | 57 | enum v4l2_mpeg_video_encoding video_encoding; |
@@ -61,6 +63,8 @@ struct cx2341x_mpeg_params { | |||
61 | u32 video_bitrate; | 63 | u32 video_bitrate; |
62 | u32 video_bitrate_peak; | 64 | u32 video_bitrate_peak; |
63 | u16 video_temporal_decimation; | 65 | u16 video_temporal_decimation; |
66 | u16 video_mute; | ||
67 | u32 video_mute_yuv; | ||
64 | 68 | ||
65 | /* encoding filters */ | 69 | /* encoding filters */ |
66 | enum v4l2_mpeg_cx2341x_video_spatial_filter_mode video_spatial_filter_mode; | 70 | enum v4l2_mpeg_cx2341x_video_spatial_filter_mode video_spatial_filter_mode; |