diff options
author | Andy Walls <awalls@radix.net> | 2009-01-01 17:02:31 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2009-03-30 11:42:24 -0400 |
commit | 0d82fe801d7c6d8cb8987e66b570f6decde9e235 (patch) | |
tree | c161730acec942f8474516d5aa7587d6d64e2fd9 | |
parent | 50299994181b835e5a6ee2882df2ee07e7fb4491 (diff) |
V4L/DVB (10276): cx18, cx2341x, ivtv: Add AC-3 audio encoding control to cx18
Initial addition of controls to set AC-3 audio encoding for the CX23418 - it
does not work yet due to firmware or cx18 driver issues. This change affects
the common cx2341x and ivtv modules due to shared structures and
common functions.
Signed-off-by: Andy Walls <awalls@radix.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r-- | drivers/media/video/cx18/cx18-driver.c | 3 | ||||
-rw-r--r-- | drivers/media/video/cx18/cx18-driver.h | 2 | ||||
-rw-r--r-- | drivers/media/video/cx18/cx18-fileops.c | 8 | ||||
-rw-r--r-- | drivers/media/video/cx2341x.c | 73 | ||||
-rw-r--r-- | drivers/media/video/ivtv/ivtv-driver.h | 2 | ||||
-rw-r--r-- | drivers/media/video/ivtv/ivtv-fileops.c | 8 | ||||
-rw-r--r-- | include/media/cx2341x.h | 7 |
7 files changed, 84 insertions, 19 deletions
diff --git a/drivers/media/video/cx18/cx18-driver.c b/drivers/media/video/cx18/cx18-driver.c index f50cf2167adc..f9df3cc5aa3d 100644 --- a/drivers/media/video/cx18/cx18-driver.c +++ b/drivers/media/video/cx18/cx18-driver.c | |||
@@ -587,7 +587,8 @@ static int __devinit cx18_init_struct1(struct cx18 *cx) | |||
587 | (cx->params.video_temporal_filter_mode << 1) | | 587 | (cx->params.video_temporal_filter_mode << 1) | |
588 | (cx->params.video_median_filter_type << 2); | 588 | (cx->params.video_median_filter_type << 2); |
589 | cx->params.port = CX2341X_PORT_MEMORY; | 589 | cx->params.port = CX2341X_PORT_MEMORY; |
590 | cx->params.capabilities = CX2341X_CAP_HAS_TS; | 590 | cx->params.capabilities = CX2341X_CAP_HAS_TS | CX2341X_CAP_HAS_AC3 | |
591 | CX2341X_CAP_HAS_LPCM; | ||
591 | init_waitqueue_head(&cx->cap_w); | 592 | init_waitqueue_head(&cx->cap_w); |
592 | init_waitqueue_head(&cx->mb_apu_waitq); | 593 | init_waitqueue_head(&cx->mb_apu_waitq); |
593 | init_waitqueue_head(&cx->mb_cpu_waitq); | 594 | init_waitqueue_head(&cx->mb_cpu_waitq); |
diff --git a/drivers/media/video/cx18/cx18-driver.h b/drivers/media/video/cx18/cx18-driver.h index 0d2edebc39b4..36809dd3d848 100644 --- a/drivers/media/video/cx18/cx18-driver.h +++ b/drivers/media/video/cx18/cx18-driver.h | |||
@@ -413,7 +413,7 @@ struct cx18 { | |||
413 | 413 | ||
414 | /* dualwatch */ | 414 | /* dualwatch */ |
415 | unsigned long dualwatch_jiffies; | 415 | unsigned long dualwatch_jiffies; |
416 | u16 dualwatch_stereo_mode; | 416 | u32 dualwatch_stereo_mode; |
417 | 417 | ||
418 | /* Digitizer type */ | 418 | /* Digitizer type */ |
419 | int digitizer; /* 0x00EF = saa7114 0x00FO = saa7115 0x0106 = mic */ | 419 | int digitizer; /* 0x00EF = saa7114 0x00FO = saa7115 0x0106 = mic */ |
diff --git a/drivers/media/video/cx18/cx18-fileops.c b/drivers/media/video/cx18/cx18-fileops.c index 055f6e004b2d..863d29db85eb 100644 --- a/drivers/media/video/cx18/cx18-fileops.c +++ b/drivers/media/video/cx18/cx18-fileops.c | |||
@@ -128,10 +128,10 @@ static void cx18_release_stream(struct cx18_stream *s) | |||
128 | static void cx18_dualwatch(struct cx18 *cx) | 128 | static void cx18_dualwatch(struct cx18 *cx) |
129 | { | 129 | { |
130 | struct v4l2_tuner vt; | 130 | struct v4l2_tuner vt; |
131 | u16 new_bitmap; | 131 | u32 new_bitmap; |
132 | u16 new_stereo_mode; | 132 | u32 new_stereo_mode; |
133 | const u16 stereo_mask = 0x0300; | 133 | const u32 stereo_mask = 0x0300; |
134 | const u16 dual = 0x0200; | 134 | const u32 dual = 0x0200; |
135 | u32 h; | 135 | u32 h; |
136 | 136 | ||
137 | new_stereo_mode = cx->params.audio_properties & stereo_mask; | 137 | new_stereo_mode = cx->params.audio_properties & stereo_mask; |
diff --git a/drivers/media/video/cx2341x.c b/drivers/media/video/cx2341x.c index cbbe47fb87b7..0acfacfa9436 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 | ||
33 | MODULE_DESCRIPTION("cx23415/6 driver"); | 33 | MODULE_DESCRIPTION("cx23415/6/8 driver"); |
34 | MODULE_AUTHOR("Hans Verkuil"); | 34 | MODULE_AUTHOR("Hans Verkuil"); |
35 | MODULE_LICENSE("GPL"); | 35 | MODULE_LICENSE("GPL"); |
36 | 36 | ||
@@ -45,6 +45,7 @@ const u32 cx2341x_mpeg_ctrls[] = { | |||
45 | V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ, | 45 | V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ, |
46 | V4L2_CID_MPEG_AUDIO_ENCODING, | 46 | V4L2_CID_MPEG_AUDIO_ENCODING, |
47 | V4L2_CID_MPEG_AUDIO_L2_BITRATE, | 47 | V4L2_CID_MPEG_AUDIO_L2_BITRATE, |
48 | V4L2_CID_MPEG_AUDIO_AC3_BITRATE, | ||
48 | V4L2_CID_MPEG_AUDIO_MODE, | 49 | V4L2_CID_MPEG_AUDIO_MODE, |
49 | V4L2_CID_MPEG_AUDIO_MODE_EXTENSION, | 50 | V4L2_CID_MPEG_AUDIO_MODE_EXTENSION, |
50 | V4L2_CID_MPEG_AUDIO_EMPHASIS, | 51 | V4L2_CID_MPEG_AUDIO_EMPHASIS, |
@@ -94,6 +95,7 @@ static const struct cx2341x_mpeg_params default_params = { | |||
94 | .audio_sampling_freq = V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000, | 95 | .audio_sampling_freq = V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000, |
95 | .audio_encoding = V4L2_MPEG_AUDIO_ENCODING_LAYER_2, | 96 | .audio_encoding = V4L2_MPEG_AUDIO_ENCODING_LAYER_2, |
96 | .audio_l2_bitrate = V4L2_MPEG_AUDIO_L2_BITRATE_224K, | 97 | .audio_l2_bitrate = V4L2_MPEG_AUDIO_L2_BITRATE_224K, |
98 | .audio_ac3_bitrate = V4L2_MPEG_AUDIO_AC3_BITRATE_224K, | ||
97 | .audio_mode = V4L2_MPEG_AUDIO_MODE_STEREO, | 99 | .audio_mode = V4L2_MPEG_AUDIO_MODE_STEREO, |
98 | .audio_mode_extension = V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_4, | 100 | .audio_mode_extension = V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_4, |
99 | .audio_emphasis = V4L2_MPEG_AUDIO_EMPHASIS_NONE, | 101 | .audio_emphasis = V4L2_MPEG_AUDIO_EMPHASIS_NONE, |
@@ -148,6 +150,9 @@ static int cx2341x_get_ctrl(const struct cx2341x_mpeg_params *params, | |||
148 | case V4L2_CID_MPEG_AUDIO_L2_BITRATE: | 150 | case V4L2_CID_MPEG_AUDIO_L2_BITRATE: |
149 | ctrl->value = params->audio_l2_bitrate; | 151 | ctrl->value = params->audio_l2_bitrate; |
150 | break; | 152 | break; |
153 | case V4L2_CID_MPEG_AUDIO_AC3_BITRATE: | ||
154 | ctrl->value = params->audio_ac3_bitrate; | ||
155 | break; | ||
151 | case V4L2_CID_MPEG_AUDIO_MODE: | 156 | case V4L2_CID_MPEG_AUDIO_MODE: |
152 | ctrl->value = params->audio_mode; | 157 | ctrl->value = params->audio_mode; |
153 | break; | 158 | break; |
@@ -256,6 +261,12 @@ static int cx2341x_set_ctrl(struct cx2341x_mpeg_params *params, int busy, | |||
256 | params->audio_sampling_freq = ctrl->value; | 261 | params->audio_sampling_freq = ctrl->value; |
257 | break; | 262 | break; |
258 | case V4L2_CID_MPEG_AUDIO_ENCODING: | 263 | case V4L2_CID_MPEG_AUDIO_ENCODING: |
264 | if (busy) | ||
265 | return -EBUSY; | ||
266 | if (params->capabilities & CX2341X_CAP_HAS_AC3 && | ||
267 | ctrl->value != V4L2_MPEG_AUDIO_ENCODING_LAYER_2 && | ||
268 | ctrl->value != V4L2_MPEG_AUDIO_ENCODING_AC3) | ||
269 | return -EINVAL; | ||
259 | params->audio_encoding = ctrl->value; | 270 | params->audio_encoding = ctrl->value; |
260 | break; | 271 | break; |
261 | case V4L2_CID_MPEG_AUDIO_L2_BITRATE: | 272 | case V4L2_CID_MPEG_AUDIO_L2_BITRATE: |
@@ -263,6 +274,11 @@ static int cx2341x_set_ctrl(struct cx2341x_mpeg_params *params, int busy, | |||
263 | return -EBUSY; | 274 | return -EBUSY; |
264 | params->audio_l2_bitrate = ctrl->value; | 275 | params->audio_l2_bitrate = ctrl->value; |
265 | break; | 276 | break; |
277 | case V4L2_CID_MPEG_AUDIO_AC3_BITRATE: | ||
278 | if (busy) | ||
279 | return -EBUSY; | ||
280 | params->audio_ac3_bitrate = ctrl->value; | ||
281 | break; | ||
266 | case V4L2_CID_MPEG_AUDIO_MODE: | 282 | case V4L2_CID_MPEG_AUDIO_MODE: |
267 | params->audio_mode = ctrl->value; | 283 | params->audio_mode = ctrl->value; |
268 | break; | 284 | break; |
@@ -482,6 +498,12 @@ int cx2341x_ctrl_query(const struct cx2341x_mpeg_params *params, | |||
482 | 498 | ||
483 | switch (qctrl->id) { | 499 | switch (qctrl->id) { |
484 | case V4L2_CID_MPEG_AUDIO_ENCODING: | 500 | case V4L2_CID_MPEG_AUDIO_ENCODING: |
501 | if (params->capabilities & CX2341X_CAP_HAS_AC3) | ||
502 | return v4l2_ctrl_query_fill(qctrl, | ||
503 | V4L2_MPEG_AUDIO_ENCODING_LAYER_2, | ||
504 | V4L2_MPEG_AUDIO_ENCODING_AC3, 1, | ||
505 | default_params.audio_encoding); | ||
506 | |||
485 | return v4l2_ctrl_query_fill(qctrl, | 507 | return v4l2_ctrl_query_fill(qctrl, |
486 | V4L2_MPEG_AUDIO_ENCODING_LAYER_2, | 508 | V4L2_MPEG_AUDIO_ENCODING_LAYER_2, |
487 | V4L2_MPEG_AUDIO_ENCODING_LAYER_2, 1, | 509 | V4L2_MPEG_AUDIO_ENCODING_LAYER_2, 1, |
@@ -497,6 +519,12 @@ int cx2341x_ctrl_query(const struct cx2341x_mpeg_params *params, | |||
497 | case V4L2_CID_MPEG_AUDIO_L3_BITRATE: | 519 | case V4L2_CID_MPEG_AUDIO_L3_BITRATE: |
498 | return -EINVAL; | 520 | return -EINVAL; |
499 | 521 | ||
522 | case V4L2_CID_MPEG_AUDIO_AC3_BITRATE: | ||
523 | return v4l2_ctrl_query_fill(qctrl, | ||
524 | V4L2_MPEG_AUDIO_AC3_BITRATE_48K, | ||
525 | V4L2_MPEG_AUDIO_AC3_BITRATE_448K, 1, | ||
526 | default_params.audio_ac3_bitrate); | ||
527 | |||
500 | case V4L2_CID_MPEG_AUDIO_MODE_EXTENSION: | 528 | case V4L2_CID_MPEG_AUDIO_MODE_EXTENSION: |
501 | err = v4l2_ctrl_query_fill_std(qctrl); | 529 | err = v4l2_ctrl_query_fill_std(qctrl); |
502 | if (err == 0 && | 530 | if (err == 0 && |
@@ -671,6 +699,15 @@ const char **cx2341x_ctrl_get_menu(const struct cx2341x_mpeg_params *p, u32 id) | |||
671 | NULL | 699 | NULL |
672 | }; | 700 | }; |
673 | 701 | ||
702 | static const char *mpeg_audio_encoding_l2_ac3[] = { | ||
703 | "", | ||
704 | "MPEG-1/2 Layer II", | ||
705 | "", | ||
706 | "", | ||
707 | "AC-3", | ||
708 | NULL | ||
709 | }; | ||
710 | |||
674 | static const char *cx2341x_video_spatial_filter_mode_menu[] = { | 711 | static const char *cx2341x_video_spatial_filter_mode_menu[] = { |
675 | "Manual", | 712 | "Manual", |
676 | "Auto", | 713 | "Auto", |
@@ -711,6 +748,9 @@ const char **cx2341x_ctrl_get_menu(const struct cx2341x_mpeg_params *p, u32 id) | |||
711 | case V4L2_CID_MPEG_STREAM_TYPE: | 748 | case V4L2_CID_MPEG_STREAM_TYPE: |
712 | return (p->capabilities & CX2341X_CAP_HAS_TS) ? | 749 | return (p->capabilities & CX2341X_CAP_HAS_TS) ? |
713 | mpeg_stream_type_with_ts : mpeg_stream_type_without_ts; | 750 | mpeg_stream_type_with_ts : mpeg_stream_type_without_ts; |
751 | case V4L2_CID_MPEG_AUDIO_ENCODING: | ||
752 | return (p->capabilities & CX2341X_CAP_HAS_AC3) ? | ||
753 | mpeg_audio_encoding_l2_ac3 : v4l2_ctrl_get_menu(id); | ||
714 | case V4L2_CID_MPEG_AUDIO_L1_BITRATE: | 754 | case V4L2_CID_MPEG_AUDIO_L1_BITRATE: |
715 | case V4L2_CID_MPEG_AUDIO_L3_BITRATE: | 755 | case V4L2_CID_MPEG_AUDIO_L3_BITRATE: |
716 | return NULL; | 756 | return NULL; |
@@ -730,16 +770,34 @@ const char **cx2341x_ctrl_get_menu(const struct cx2341x_mpeg_params *p, u32 id) | |||
730 | } | 770 | } |
731 | EXPORT_SYMBOL(cx2341x_ctrl_get_menu); | 771 | EXPORT_SYMBOL(cx2341x_ctrl_get_menu); |
732 | 772 | ||
773 | /* definitions for audio properties bits 29-28 */ | ||
774 | #define CX2341X_AUDIO_ENCDING_METHOD_MPEG 0 | ||
775 | #define CX2341X_AUDIO_ENCDING_METHOD_AC3 1 | ||
776 | #define CX2341X_AUDIO_ENCDING_METHOD_LPCM 2 | ||
777 | |||
733 | static void cx2341x_calc_audio_properties(struct cx2341x_mpeg_params *params) | 778 | static void cx2341x_calc_audio_properties(struct cx2341x_mpeg_params *params) |
734 | { | 779 | { |
735 | params->audio_properties = (params->audio_sampling_freq << 0) | | 780 | params->audio_properties = |
736 | ((3 - params->audio_encoding) << 2) | | 781 | (params->audio_sampling_freq << 0) | |
737 | ((1 + params->audio_l2_bitrate) << 4) | | ||
738 | (params->audio_mode << 8) | | 782 | (params->audio_mode << 8) | |
739 | (params->audio_mode_extension << 10) | | 783 | (params->audio_mode_extension << 10) | |
740 | (((params->audio_emphasis == V4L2_MPEG_AUDIO_EMPHASIS_CCITT_J17) | 784 | (((params->audio_emphasis == V4L2_MPEG_AUDIO_EMPHASIS_CCITT_J17) |
741 | ? 3 : params->audio_emphasis) << 12) | | 785 | ? 3 : params->audio_emphasis) << 12) | |
742 | (params->audio_crc << 14); | 786 | (params->audio_crc << 14); |
787 | |||
788 | if ((params->capabilities & CX2341X_CAP_HAS_AC3) && | ||
789 | params->audio_encoding == V4L2_MPEG_AUDIO_ENCODING_AC3) { | ||
790 | params->audio_properties |= | ||
791 | /* Not sure if this MPEG Layer II setting is required */ | ||
792 | ((3 - V4L2_MPEG_AUDIO_ENCODING_LAYER_2) << 2) | | ||
793 | (params->audio_ac3_bitrate << 4) | | ||
794 | (CX2341X_AUDIO_ENCDING_METHOD_AC3 << 28); | ||
795 | } else { | ||
796 | /* Assuming MPEG Layer II */ | ||
797 | params->audio_properties |= | ||
798 | ((3 - params->audio_encoding) << 2) | | ||
799 | ((1 + params->audio_l2_bitrate) << 4); | ||
800 | } | ||
743 | } | 801 | } |
744 | 802 | ||
745 | int cx2341x_ext_ctrls(struct cx2341x_mpeg_params *params, int busy, | 803 | int cx2341x_ext_ctrls(struct cx2341x_mpeg_params *params, int busy, |
@@ -1022,7 +1080,10 @@ void cx2341x_log_status(const struct cx2341x_mpeg_params *p, const char *prefix) | |||
1022 | prefix, | 1080 | prefix, |
1023 | cx2341x_menu_item(p, V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ), | 1081 | cx2341x_menu_item(p, V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ), |
1024 | cx2341x_menu_item(p, V4L2_CID_MPEG_AUDIO_ENCODING), | 1082 | cx2341x_menu_item(p, V4L2_CID_MPEG_AUDIO_ENCODING), |
1025 | cx2341x_menu_item(p, V4L2_CID_MPEG_AUDIO_L2_BITRATE), | 1083 | cx2341x_menu_item(p, |
1084 | p->audio_encoding == V4L2_MPEG_AUDIO_ENCODING_AC3 | ||
1085 | ? V4L2_CID_MPEG_AUDIO_AC3_BITRATE | ||
1086 | : V4L2_CID_MPEG_AUDIO_L2_BITRATE), | ||
1026 | cx2341x_menu_item(p, V4L2_CID_MPEG_AUDIO_MODE), | 1087 | cx2341x_menu_item(p, V4L2_CID_MPEG_AUDIO_MODE), |
1027 | p->audio_mute ? " (muted)" : ""); | 1088 | p->audio_mute ? " (muted)" : ""); |
1028 | if (p->audio_mode == V4L2_MPEG_AUDIO_MODE_JOINT_STEREO) | 1089 | if (p->audio_mode == V4L2_MPEG_AUDIO_MODE_JOINT_STEREO) |
diff --git a/drivers/media/video/ivtv/ivtv-driver.h b/drivers/media/video/ivtv/ivtv-driver.h index ce8d9b74357e..94f7f44d5989 100644 --- a/drivers/media/video/ivtv/ivtv-driver.h +++ b/drivers/media/video/ivtv/ivtv-driver.h | |||
@@ -696,7 +696,7 @@ struct ivtv { | |||
696 | u64 vbi_data_inserted; /* number of VBI bytes inserted into the MPEG stream */ | 696 | u64 vbi_data_inserted; /* number of VBI bytes inserted into the MPEG stream */ |
697 | u32 last_dec_timing[3]; /* cache last retrieved pts/scr/frame values */ | 697 | u32 last_dec_timing[3]; /* cache last retrieved pts/scr/frame values */ |
698 | unsigned long dualwatch_jiffies;/* jiffies value of the previous dualwatch check */ | 698 | unsigned long dualwatch_jiffies;/* jiffies value of the previous dualwatch check */ |
699 | u16 dualwatch_stereo_mode; /* current detected dualwatch stereo mode */ | 699 | u32 dualwatch_stereo_mode; /* current detected dualwatch stereo mode */ |
700 | 700 | ||
701 | 701 | ||
702 | /* VBI state info */ | 702 | /* VBI state info */ |
diff --git a/drivers/media/video/ivtv/ivtv-fileops.c b/drivers/media/video/ivtv/ivtv-fileops.c index d594bc29f07f..617667d1ceba 100644 --- a/drivers/media/video/ivtv/ivtv-fileops.c +++ b/drivers/media/video/ivtv/ivtv-fileops.c | |||
@@ -148,10 +148,10 @@ void ivtv_release_stream(struct ivtv_stream *s) | |||
148 | static void ivtv_dualwatch(struct ivtv *itv) | 148 | static void ivtv_dualwatch(struct ivtv *itv) |
149 | { | 149 | { |
150 | struct v4l2_tuner vt; | 150 | struct v4l2_tuner vt; |
151 | u16 new_bitmap; | 151 | u32 new_bitmap; |
152 | u16 new_stereo_mode; | 152 | u32 new_stereo_mode; |
153 | const u16 stereo_mask = 0x0300; | 153 | const u32 stereo_mask = 0x0300; |
154 | const u16 dual = 0x0200; | 154 | const u32 dual = 0x0200; |
155 | 155 | ||
156 | new_stereo_mode = itv->params.audio_properties & stereo_mask; | 156 | new_stereo_mode = itv->params.audio_properties & stereo_mask; |
157 | memset(&vt, 0, sizeof(vt)); | 157 | memset(&vt, 0, sizeof(vt)); |
diff --git a/include/media/cx2341x.h b/include/media/cx2341x.h index 9ec4d5889ef5..2601bc71c51d 100644 --- a/include/media/cx2341x.h +++ b/include/media/cx2341x.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | cx23415/6 header containing common defines. | 2 | cx23415/6/8 header containing common defines. |
3 | 3 | ||
4 | This program is free software; you can redistribute it and/or modify | 4 | This program is free software; you can redistribute it and/or modify |
5 | it under the terms of the GNU General Public License as published by | 5 | it under the terms of the GNU General Public License as published by |
@@ -28,6 +28,8 @@ enum cx2341x_port { | |||
28 | enum cx2341x_cap { | 28 | enum cx2341x_cap { |
29 | CX2341X_CAP_HAS_SLICED_VBI = 1 << 0, | 29 | CX2341X_CAP_HAS_SLICED_VBI = 1 << 0, |
30 | CX2341X_CAP_HAS_TS = 1 << 1, | 30 | CX2341X_CAP_HAS_TS = 1 << 1, |
31 | CX2341X_CAP_HAS_AC3 = 1 << 2, | ||
32 | CX2341X_CAP_HAS_LPCM = 1 << 3, | ||
31 | }; | 33 | }; |
32 | 34 | ||
33 | struct cx2341x_mpeg_params { | 35 | struct cx2341x_mpeg_params { |
@@ -47,11 +49,12 @@ struct cx2341x_mpeg_params { | |||
47 | enum v4l2_mpeg_audio_sampling_freq audio_sampling_freq; | 49 | enum v4l2_mpeg_audio_sampling_freq audio_sampling_freq; |
48 | enum v4l2_mpeg_audio_encoding audio_encoding; | 50 | enum v4l2_mpeg_audio_encoding audio_encoding; |
49 | enum v4l2_mpeg_audio_l2_bitrate audio_l2_bitrate; | 51 | enum v4l2_mpeg_audio_l2_bitrate audio_l2_bitrate; |
52 | enum v4l2_mpeg_audio_ac3_bitrate audio_ac3_bitrate; | ||
50 | enum v4l2_mpeg_audio_mode audio_mode; | 53 | enum v4l2_mpeg_audio_mode audio_mode; |
51 | enum v4l2_mpeg_audio_mode_extension audio_mode_extension; | 54 | enum v4l2_mpeg_audio_mode_extension audio_mode_extension; |
52 | enum v4l2_mpeg_audio_emphasis audio_emphasis; | 55 | enum v4l2_mpeg_audio_emphasis audio_emphasis; |
53 | enum v4l2_mpeg_audio_crc audio_crc; | 56 | enum v4l2_mpeg_audio_crc audio_crc; |
54 | u16 audio_properties; | 57 | u32 audio_properties; |
55 | u16 audio_mute; | 58 | u16 audio_mute; |
56 | 59 | ||
57 | /* video */ | 60 | /* video */ |