aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/media/video/cx2341x.c72
-rw-r--r--drivers/media/video/v4l2-common.c10
-rw-r--r--include/linux/videodev2.h4
-rw-r--r--include/media/cx2341x.h4
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;