aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/cx2341x.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/video/cx2341x.c')
-rw-r--r--drivers/media/video/cx2341x.c196
1 files changed, 172 insertions, 24 deletions
diff --git a/drivers/media/video/cx2341x.c b/drivers/media/video/cx2341x.c
index cbbe47fb87b7..8ded52946334 100644
--- a/drivers/media/video/cx2341x.c
+++ b/drivers/media/video/cx2341x.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * cx2341x - generic code for cx23415/6 based devices 2 * cx2341x - generic code for cx23415/6/8 based devices
3 * 3 *
4 * Copyright (C) 2006 Hans Verkuil <hverkuil@xs4all.nl> 4 * Copyright (C) 2006 Hans Verkuil <hverkuil@xs4all.nl>
5 * 5 *
@@ -30,7 +30,7 @@
30#include <media/cx2341x.h> 30#include <media/cx2341x.h>
31#include <media/v4l2-common.h> 31#include <media/v4l2-common.h>
32 32
33MODULE_DESCRIPTION("cx23415/6 driver"); 33MODULE_DESCRIPTION("cx23415/6/8 driver");
34MODULE_AUTHOR("Hans Verkuil"); 34MODULE_AUTHOR("Hans Verkuil");
35MODULE_LICENSE("GPL"); 35MODULE_LICENSE("GPL");
36 36
@@ -38,6 +38,7 @@ static int debug;
38module_param(debug, int, 0644); 38module_param(debug, int, 0644);
39MODULE_PARM_DESC(debug, "Debug level (0-1)"); 39MODULE_PARM_DESC(debug, "Debug level (0-1)");
40 40
41/* Must be sorted from low to high control ID! */
41const u32 cx2341x_mpeg_ctrls[] = { 42const u32 cx2341x_mpeg_ctrls[] = {
42 V4L2_CID_MPEG_CLASS, 43 V4L2_CID_MPEG_CLASS,
43 V4L2_CID_MPEG_STREAM_TYPE, 44 V4L2_CID_MPEG_STREAM_TYPE,
@@ -50,6 +51,7 @@ const u32 cx2341x_mpeg_ctrls[] = {
50 V4L2_CID_MPEG_AUDIO_EMPHASIS, 51 V4L2_CID_MPEG_AUDIO_EMPHASIS,
51 V4L2_CID_MPEG_AUDIO_CRC, 52 V4L2_CID_MPEG_AUDIO_CRC,
52 V4L2_CID_MPEG_AUDIO_MUTE, 53 V4L2_CID_MPEG_AUDIO_MUTE,
54 V4L2_CID_MPEG_AUDIO_AC3_BITRATE,
53 V4L2_CID_MPEG_VIDEO_ENCODING, 55 V4L2_CID_MPEG_VIDEO_ENCODING,
54 V4L2_CID_MPEG_VIDEO_ASPECT, 56 V4L2_CID_MPEG_VIDEO_ASPECT,
55 V4L2_CID_MPEG_VIDEO_B_FRAMES, 57 V4L2_CID_MPEG_VIDEO_B_FRAMES,
@@ -94,6 +96,7 @@ static const struct cx2341x_mpeg_params default_params = {
94 .audio_sampling_freq = V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000, 96 .audio_sampling_freq = V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000,
95 .audio_encoding = V4L2_MPEG_AUDIO_ENCODING_LAYER_2, 97 .audio_encoding = V4L2_MPEG_AUDIO_ENCODING_LAYER_2,
96 .audio_l2_bitrate = V4L2_MPEG_AUDIO_L2_BITRATE_224K, 98 .audio_l2_bitrate = V4L2_MPEG_AUDIO_L2_BITRATE_224K,
99 .audio_ac3_bitrate = V4L2_MPEG_AUDIO_AC3_BITRATE_224K,
97 .audio_mode = V4L2_MPEG_AUDIO_MODE_STEREO, 100 .audio_mode = V4L2_MPEG_AUDIO_MODE_STEREO,
98 .audio_mode_extension = V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_4, 101 .audio_mode_extension = V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_4,
99 .audio_emphasis = V4L2_MPEG_AUDIO_EMPHASIS_NONE, 102 .audio_emphasis = V4L2_MPEG_AUDIO_EMPHASIS_NONE,
@@ -148,6 +151,9 @@ static int cx2341x_get_ctrl(const struct cx2341x_mpeg_params *params,
148 case V4L2_CID_MPEG_AUDIO_L2_BITRATE: 151 case V4L2_CID_MPEG_AUDIO_L2_BITRATE:
149 ctrl->value = params->audio_l2_bitrate; 152 ctrl->value = params->audio_l2_bitrate;
150 break; 153 break;
154 case V4L2_CID_MPEG_AUDIO_AC3_BITRATE:
155 ctrl->value = params->audio_ac3_bitrate;
156 break;
151 case V4L2_CID_MPEG_AUDIO_MODE: 157 case V4L2_CID_MPEG_AUDIO_MODE:
152 ctrl->value = params->audio_mode; 158 ctrl->value = params->audio_mode;
153 break; 159 break;
@@ -256,6 +262,12 @@ static int cx2341x_set_ctrl(struct cx2341x_mpeg_params *params, int busy,
256 params->audio_sampling_freq = ctrl->value; 262 params->audio_sampling_freq = ctrl->value;
257 break; 263 break;
258 case V4L2_CID_MPEG_AUDIO_ENCODING: 264 case V4L2_CID_MPEG_AUDIO_ENCODING:
265 if (busy)
266 return -EBUSY;
267 if (params->capabilities & CX2341X_CAP_HAS_AC3)
268 if (ctrl->value != V4L2_MPEG_AUDIO_ENCODING_LAYER_2 &&
269 ctrl->value != V4L2_MPEG_AUDIO_ENCODING_AC3)
270 return -ERANGE;
259 params->audio_encoding = ctrl->value; 271 params->audio_encoding = ctrl->value;
260 break; 272 break;
261 case V4L2_CID_MPEG_AUDIO_L2_BITRATE: 273 case V4L2_CID_MPEG_AUDIO_L2_BITRATE:
@@ -263,6 +275,13 @@ static int cx2341x_set_ctrl(struct cx2341x_mpeg_params *params, int busy,
263 return -EBUSY; 275 return -EBUSY;
264 params->audio_l2_bitrate = ctrl->value; 276 params->audio_l2_bitrate = ctrl->value;
265 break; 277 break;
278 case V4L2_CID_MPEG_AUDIO_AC3_BITRATE:
279 if (busy)
280 return -EBUSY;
281 if (!(params->capabilities & CX2341X_CAP_HAS_AC3))
282 return -EINVAL;
283 params->audio_ac3_bitrate = ctrl->value;
284 break;
266 case V4L2_CID_MPEG_AUDIO_MODE: 285 case V4L2_CID_MPEG_AUDIO_MODE:
267 params->audio_mode = ctrl->value; 286 params->audio_mode = ctrl->value;
268 break; 287 break;
@@ -481,29 +500,106 @@ int cx2341x_ctrl_query(const struct cx2341x_mpeg_params *params,
481 int err; 500 int err;
482 501
483 switch (qctrl->id) { 502 switch (qctrl->id) {
503 case V4L2_CID_MPEG_STREAM_TYPE:
504 return v4l2_ctrl_query_fill(qctrl,
505 V4L2_MPEG_STREAM_TYPE_MPEG2_PS,
506 V4L2_MPEG_STREAM_TYPE_MPEG2_SVCD, 1,
507 V4L2_MPEG_STREAM_TYPE_MPEG2_PS);
508
509 case V4L2_CID_MPEG_STREAM_VBI_FMT:
510 if (params->capabilities & CX2341X_CAP_HAS_SLICED_VBI)
511 return v4l2_ctrl_query_fill(qctrl,
512 V4L2_MPEG_STREAM_VBI_FMT_NONE,
513 V4L2_MPEG_STREAM_VBI_FMT_IVTV, 1,
514 V4L2_MPEG_STREAM_VBI_FMT_NONE);
515 return cx2341x_ctrl_query_fill(qctrl,
516 V4L2_MPEG_STREAM_VBI_FMT_NONE,
517 V4L2_MPEG_STREAM_VBI_FMT_NONE, 1,
518 default_params.stream_vbi_fmt);
519
520 case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ:
521 return v4l2_ctrl_query_fill(qctrl,
522 V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100,
523 V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000, 1,
524 V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000);
525
484 case V4L2_CID_MPEG_AUDIO_ENCODING: 526 case V4L2_CID_MPEG_AUDIO_ENCODING:
527 if (params->capabilities & CX2341X_CAP_HAS_AC3) {
528 /*
529 * The state of L2 & AC3 bitrate controls can change
530 * when this control changes, but v4l2_ctrl_query_fill()
531 * already sets V4L2_CTRL_FLAG_UPDATE for
532 * V4L2_CID_MPEG_AUDIO_ENCODING, so we don't here.
533 */
534 return v4l2_ctrl_query_fill(qctrl,
535 V4L2_MPEG_AUDIO_ENCODING_LAYER_2,
536 V4L2_MPEG_AUDIO_ENCODING_AC3, 1,
537 default_params.audio_encoding);
538 }
539
485 return v4l2_ctrl_query_fill(qctrl, 540 return v4l2_ctrl_query_fill(qctrl,
486 V4L2_MPEG_AUDIO_ENCODING_LAYER_2, 541 V4L2_MPEG_AUDIO_ENCODING_LAYER_2,
487 V4L2_MPEG_AUDIO_ENCODING_LAYER_2, 1, 542 V4L2_MPEG_AUDIO_ENCODING_LAYER_2, 1,
488 default_params.audio_encoding); 543 default_params.audio_encoding);
489 544
490 case V4L2_CID_MPEG_AUDIO_L2_BITRATE: 545 case V4L2_CID_MPEG_AUDIO_L2_BITRATE:
491 return v4l2_ctrl_query_fill(qctrl, 546 err = v4l2_ctrl_query_fill(qctrl,
492 V4L2_MPEG_AUDIO_L2_BITRATE_192K, 547 V4L2_MPEG_AUDIO_L2_BITRATE_192K,
493 V4L2_MPEG_AUDIO_L2_BITRATE_384K, 1, 548 V4L2_MPEG_AUDIO_L2_BITRATE_384K, 1,
494 default_params.audio_l2_bitrate); 549 default_params.audio_l2_bitrate);
550 if (err)
551 return err;
552 if (params->capabilities & CX2341X_CAP_HAS_AC3 &&
553 params->audio_encoding != V4L2_MPEG_AUDIO_ENCODING_LAYER_2)
554 qctrl->flags |= V4L2_CTRL_FLAG_INACTIVE;
555 return 0;
495 556
496 case V4L2_CID_MPEG_AUDIO_L1_BITRATE: 557 case V4L2_CID_MPEG_AUDIO_MODE:
497 case V4L2_CID_MPEG_AUDIO_L3_BITRATE: 558 return v4l2_ctrl_query_fill(qctrl,
498 return -EINVAL; 559 V4L2_MPEG_AUDIO_MODE_STEREO,
560 V4L2_MPEG_AUDIO_MODE_MONO, 1,
561 V4L2_MPEG_AUDIO_MODE_STEREO);
499 562
500 case V4L2_CID_MPEG_AUDIO_MODE_EXTENSION: 563 case V4L2_CID_MPEG_AUDIO_MODE_EXTENSION:
501 err = v4l2_ctrl_query_fill_std(qctrl); 564 err = v4l2_ctrl_query_fill(qctrl,
565 V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_4,
566 V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_16, 1,
567 V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_4);
502 if (err == 0 && 568 if (err == 0 &&
503 params->audio_mode != V4L2_MPEG_AUDIO_MODE_JOINT_STEREO) 569 params->audio_mode != V4L2_MPEG_AUDIO_MODE_JOINT_STEREO)
504 qctrl->flags |= V4L2_CTRL_FLAG_INACTIVE; 570 qctrl->flags |= V4L2_CTRL_FLAG_INACTIVE;
505 return err; 571 return err;
506 572
573 case V4L2_CID_MPEG_AUDIO_EMPHASIS:
574 return v4l2_ctrl_query_fill(qctrl,
575 V4L2_MPEG_AUDIO_EMPHASIS_NONE,
576 V4L2_MPEG_AUDIO_EMPHASIS_CCITT_J17, 1,
577 V4L2_MPEG_AUDIO_EMPHASIS_NONE);
578
579 case V4L2_CID_MPEG_AUDIO_CRC:
580 return v4l2_ctrl_query_fill(qctrl,
581 V4L2_MPEG_AUDIO_CRC_NONE,
582 V4L2_MPEG_AUDIO_CRC_CRC16, 1,
583 V4L2_MPEG_AUDIO_CRC_NONE);
584
585 case V4L2_CID_MPEG_AUDIO_MUTE:
586 return v4l2_ctrl_query_fill(qctrl, 0, 1, 1, 0);
587
588 case V4L2_CID_MPEG_AUDIO_AC3_BITRATE:
589 err = v4l2_ctrl_query_fill(qctrl,
590 V4L2_MPEG_AUDIO_AC3_BITRATE_48K,
591 V4L2_MPEG_AUDIO_AC3_BITRATE_448K, 1,
592 default_params.audio_ac3_bitrate);
593 if (err)
594 return err;
595 if (params->capabilities & CX2341X_CAP_HAS_AC3) {
596 if (params->audio_encoding !=
597 V4L2_MPEG_AUDIO_ENCODING_AC3)
598 qctrl->flags |= V4L2_CTRL_FLAG_INACTIVE;
599 } else
600 qctrl->flags |= V4L2_CTRL_FLAG_DISABLED;
601 return 0;
602
507 case V4L2_CID_MPEG_VIDEO_ENCODING: 603 case V4L2_CID_MPEG_VIDEO_ENCODING:
508 /* this setting is read-only for the cx2341x since the 604 /* this setting is read-only for the cx2341x since the
509 V4L2_CID_MPEG_STREAM_TYPE really determines the 605 V4L2_CID_MPEG_STREAM_TYPE really determines the
@@ -516,32 +612,51 @@ int cx2341x_ctrl_query(const struct cx2341x_mpeg_params *params,
516 qctrl->flags |= V4L2_CTRL_FLAG_READ_ONLY; 612 qctrl->flags |= V4L2_CTRL_FLAG_READ_ONLY;
517 return err; 613 return err;
518 614
615 case V4L2_CID_MPEG_VIDEO_ASPECT:
616 return v4l2_ctrl_query_fill(qctrl,
617 V4L2_MPEG_VIDEO_ASPECT_1x1,
618 V4L2_MPEG_VIDEO_ASPECT_221x100, 1,
619 V4L2_MPEG_VIDEO_ASPECT_4x3);
620
621 case V4L2_CID_MPEG_VIDEO_B_FRAMES:
622 return v4l2_ctrl_query_fill(qctrl, 0, 33, 1, 2);
623
624 case V4L2_CID_MPEG_VIDEO_GOP_SIZE:
625 return v4l2_ctrl_query_fill(qctrl, 1, 34, 1,
626 params->is_50hz ? 12 : 15);
627
628 case V4L2_CID_MPEG_VIDEO_GOP_CLOSURE:
629 return v4l2_ctrl_query_fill(qctrl, 0, 1, 1, 1);
630
519 case V4L2_CID_MPEG_VIDEO_BITRATE_MODE: 631 case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:
520 err = v4l2_ctrl_query_fill_std(qctrl); 632 err = v4l2_ctrl_query_fill(qctrl,
633 V4L2_MPEG_VIDEO_BITRATE_MODE_VBR,
634 V4L2_MPEG_VIDEO_BITRATE_MODE_CBR, 1,
635 V4L2_MPEG_VIDEO_BITRATE_MODE_VBR);
521 if (err == 0 && 636 if (err == 0 &&
522 params->video_encoding == V4L2_MPEG_VIDEO_ENCODING_MPEG_1) 637 params->video_encoding == V4L2_MPEG_VIDEO_ENCODING_MPEG_1)
523 qctrl->flags |= V4L2_CTRL_FLAG_INACTIVE; 638 qctrl->flags |= V4L2_CTRL_FLAG_INACTIVE;
524 return err; 639 return err;
525 640
641 case V4L2_CID_MPEG_VIDEO_BITRATE:
642 return v4l2_ctrl_query_fill(qctrl, 0, 27000000, 1, 6000000);
643
526 case V4L2_CID_MPEG_VIDEO_BITRATE_PEAK: 644 case V4L2_CID_MPEG_VIDEO_BITRATE_PEAK:
527 err = v4l2_ctrl_query_fill_std(qctrl); 645 err = v4l2_ctrl_query_fill(qctrl, 0, 27000000, 1, 8000000);
528 if (err == 0 && 646 if (err == 0 &&
529 params->video_bitrate_mode == 647 params->video_bitrate_mode ==
530 V4L2_MPEG_VIDEO_BITRATE_MODE_CBR) 648 V4L2_MPEG_VIDEO_BITRATE_MODE_CBR)
531 qctrl->flags |= V4L2_CTRL_FLAG_INACTIVE; 649 qctrl->flags |= V4L2_CTRL_FLAG_INACTIVE;
532 return err; 650 return err;
533 651
534 case V4L2_CID_MPEG_STREAM_VBI_FMT: 652 case V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION:
535 if (params->capabilities & CX2341X_CAP_HAS_SLICED_VBI) 653 return v4l2_ctrl_query_fill(qctrl, 0, 255, 1, 0);
536 return v4l2_ctrl_query_fill_std(qctrl);
537 return cx2341x_ctrl_query_fill(qctrl,
538 V4L2_MPEG_STREAM_VBI_FMT_NONE,
539 V4L2_MPEG_STREAM_VBI_FMT_NONE, 1,
540 default_params.stream_vbi_fmt);
541 654
542 case V4L2_CID_MPEG_VIDEO_GOP_SIZE: 655 case V4L2_CID_MPEG_VIDEO_MUTE:
543 return v4l2_ctrl_query_fill(qctrl, 1, 34, 1, 656 return v4l2_ctrl_query_fill(qctrl, 0, 1, 1, 0);
544 params->is_50hz ? 12 : 15); 657
658 case V4L2_CID_MPEG_VIDEO_MUTE_YUV: /* Init YUV (really YCbCr) to black */
659 return v4l2_ctrl_query_fill(qctrl, 0, 0xffffff, 1, 0x008080);
545 660
546 /* CX23415/6 specific */ 661 /* CX23415/6 specific */
547 case V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE: 662 case V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE:
@@ -643,7 +758,7 @@ int cx2341x_ctrl_query(const struct cx2341x_mpeg_params *params,
643 default_params.stream_insert_nav_packets); 758 default_params.stream_insert_nav_packets);
644 759
645 default: 760 default:
646 return v4l2_ctrl_query_fill_std(qctrl); 761 return -EINVAL;
647 762
648 } 763 }
649} 764}
@@ -671,6 +786,15 @@ const char **cx2341x_ctrl_get_menu(const struct cx2341x_mpeg_params *p, u32 id)
671 NULL 786 NULL
672 }; 787 };
673 788
789 static const char *mpeg_audio_encoding_l2_ac3[] = {
790 "",
791 "MPEG-1/2 Layer II",
792 "",
793 "",
794 "AC-3",
795 NULL
796 };
797
674 static const char *cx2341x_video_spatial_filter_mode_menu[] = { 798 static const char *cx2341x_video_spatial_filter_mode_menu[] = {
675 "Manual", 799 "Manual",
676 "Auto", 800 "Auto",
@@ -711,6 +835,9 @@ const char **cx2341x_ctrl_get_menu(const struct cx2341x_mpeg_params *p, u32 id)
711 case V4L2_CID_MPEG_STREAM_TYPE: 835 case V4L2_CID_MPEG_STREAM_TYPE:
712 return (p->capabilities & CX2341X_CAP_HAS_TS) ? 836 return (p->capabilities & CX2341X_CAP_HAS_TS) ?
713 mpeg_stream_type_with_ts : mpeg_stream_type_without_ts; 837 mpeg_stream_type_with_ts : mpeg_stream_type_without_ts;
838 case V4L2_CID_MPEG_AUDIO_ENCODING:
839 return (p->capabilities & CX2341X_CAP_HAS_AC3) ?
840 mpeg_audio_encoding_l2_ac3 : v4l2_ctrl_get_menu(id);
714 case V4L2_CID_MPEG_AUDIO_L1_BITRATE: 841 case V4L2_CID_MPEG_AUDIO_L1_BITRATE:
715 case V4L2_CID_MPEG_AUDIO_L3_BITRATE: 842 case V4L2_CID_MPEG_AUDIO_L3_BITRATE:
716 return NULL; 843 return NULL;
@@ -730,16 +857,34 @@ const char **cx2341x_ctrl_get_menu(const struct cx2341x_mpeg_params *p, u32 id)
730} 857}
731EXPORT_SYMBOL(cx2341x_ctrl_get_menu); 858EXPORT_SYMBOL(cx2341x_ctrl_get_menu);
732 859
860/* definitions for audio properties bits 29-28 */
861#define CX2341X_AUDIO_ENCODING_METHOD_MPEG 0
862#define CX2341X_AUDIO_ENCODING_METHOD_AC3 1
863#define CX2341X_AUDIO_ENCODING_METHOD_LPCM 2
864
733static void cx2341x_calc_audio_properties(struct cx2341x_mpeg_params *params) 865static void cx2341x_calc_audio_properties(struct cx2341x_mpeg_params *params)
734{ 866{
735 params->audio_properties = (params->audio_sampling_freq << 0) | 867 params->audio_properties =
736 ((3 - params->audio_encoding) << 2) | 868 (params->audio_sampling_freq << 0) |
737 ((1 + params->audio_l2_bitrate) << 4) |
738 (params->audio_mode << 8) | 869 (params->audio_mode << 8) |
739 (params->audio_mode_extension << 10) | 870 (params->audio_mode_extension << 10) |
740 (((params->audio_emphasis == V4L2_MPEG_AUDIO_EMPHASIS_CCITT_J17) 871 (((params->audio_emphasis == V4L2_MPEG_AUDIO_EMPHASIS_CCITT_J17)
741 ? 3 : params->audio_emphasis) << 12) | 872 ? 3 : params->audio_emphasis) << 12) |
742 (params->audio_crc << 14); 873 (params->audio_crc << 14);
874
875 if ((params->capabilities & CX2341X_CAP_HAS_AC3) &&
876 params->audio_encoding == V4L2_MPEG_AUDIO_ENCODING_AC3) {
877 params->audio_properties |=
878 /* Not sure if this MPEG Layer II setting is required */
879 ((3 - V4L2_MPEG_AUDIO_ENCODING_LAYER_2) << 2) |
880 (params->audio_ac3_bitrate << 4) |
881 (CX2341X_AUDIO_ENCODING_METHOD_AC3 << 28);
882 } else {
883 /* Assuming MPEG Layer II */
884 params->audio_properties |=
885 ((3 - params->audio_encoding) << 2) |
886 ((1 + params->audio_l2_bitrate) << 4);
887 }
743} 888}
744 889
745int cx2341x_ext_ctrls(struct cx2341x_mpeg_params *params, int busy, 890int cx2341x_ext_ctrls(struct cx2341x_mpeg_params *params, int busy,
@@ -1022,7 +1167,10 @@ void cx2341x_log_status(const struct cx2341x_mpeg_params *p, const char *prefix)
1022 prefix, 1167 prefix,
1023 cx2341x_menu_item(p, V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ), 1168 cx2341x_menu_item(p, V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ),
1024 cx2341x_menu_item(p, V4L2_CID_MPEG_AUDIO_ENCODING), 1169 cx2341x_menu_item(p, V4L2_CID_MPEG_AUDIO_ENCODING),
1025 cx2341x_menu_item(p, V4L2_CID_MPEG_AUDIO_L2_BITRATE), 1170 cx2341x_menu_item(p,
1171 p->audio_encoding == V4L2_MPEG_AUDIO_ENCODING_AC3
1172 ? V4L2_CID_MPEG_AUDIO_AC3_BITRATE
1173 : V4L2_CID_MPEG_AUDIO_L2_BITRATE),
1026 cx2341x_menu_item(p, V4L2_CID_MPEG_AUDIO_MODE), 1174 cx2341x_menu_item(p, V4L2_CID_MPEG_AUDIO_MODE),
1027 p->audio_mute ? " (muted)" : ""); 1175 p->audio_mute ? " (muted)" : "");
1028 if (p->audio_mode == V4L2_MPEG_AUDIO_MODE_JOINT_STEREO) 1176 if (p->audio_mode == V4L2_MPEG_AUDIO_MODE_JOINT_STEREO)