Skip to contentSkip to conversation

dvb_frontend: Multistream support

PATCH In review CrazyCat 5 participants 12 messages Aug 16, 2012 – Sep 11, 2012 Media (V4L/DVB)

lore
Share & tools
lore

CrazyCat

author
#0 lore raw

PATCH 1/1 dvb_frontend: Multistream support

DTV_ISDBS_TS_ID replaced with DTV_STREAM_ID. Aliases DTV_ISDBS_TS_ID, DTV_DVBS2_MIS_ID for DTV_STREAM_ID. DTV_DVBT2_PLP_ID marked as legacy.

include/linux/dvb/frontend.h +0 -0
index f50d405..3444dda 100644
@@ -62,6 +62,7 @@ typedef enum fe_caps {

         FE_CAN_8VSB = 0x200000,
         FE_CAN_16VSB = 0x400000,
         FE_HAS_EXTENDED_CAPS = 0x800000,   /* We need more bitspace for newer APIs, indicate this. */
+ FE_CAN_MULTISTREAM = 0x4000000,  /* frontend supports DVB-S2 multistream filtering */ FE_CAN_TURBO_FEC = 0x8000000,  /* frontend supports "turbo fec modulation" */ FE_CAN_2G_MODULATION = 0x10000000, /* frontend supports "2nd generation modulation" (DVB-S2) */ FE_NEEDS_BENDING = 0x20000000, /* not supported anymore, don't use (frontend requires frequency bending) */ @@ -314,9 +315,11 @@ struct dvb_frontend_event {

 #define DTV_ISDBT_LAYER_ENABLED 41

-#define DTV_ISDBS_TS_ID 42
+#define DTV_STREAM_ID 42
+#define DTV_ISDBS_TS_ID DTV_STREAM_ID
+#define DTV_DVBS2_MIS_ID DTV_STREAM_ID

-#define DTV_DVBT2_PLP_ID 43
+#define DTV_DVBT2_PLP_ID_LEGACY 43

 #define DTV_ENUM_DELSYS 44

drivers/media/dvb/dvb-core/dvb_frontend.h +0 -0
index 7c64c09..bec0cda 100644
@@ -368,11 +368,8 @@ struct dtv_frontend_properties {

             u8 interleaving;
         } layer[3];

- /* ISDB-T specifics */
- u32 isdbs_ts_id;
-
- /* DVB-T2 specifics */
- u32                     dvbt2_plp_id;
+ /* Multistream specifics */
+ u32 stream_id;

         /* ATSC-MH specifics */
         u8 atscmh_fic_ver;

drivers/media/dvb/dvb-core/dvb_frontend.c +0 -0
index aebcdf2..bccd245 100644
@@ -946,8 +946,7 @@ static int dvb_frontend_clear_cache(struct dvb_frontend *fe)

                 c->layer[i].segment_count = 0;
         }

- c->isdbs_ts_id = 0;
- c->dvbt2_plp_id = 0;
+ c->stream_id = -1;

         switch (c->delivery_system) {
         case SYS_DVBS:
@@ -1017,8 +1016,8 @@ static struct dtv_cmds_h dtv_cmds[DTV_MAX_COMMAND + 1] = { _DTV_CMD(DTV_ISDBT_LAYERC_SEGMENT_COUNT, 1, 0), _DTV_CMD(DTV_ISDBT_LAYERC_TIME_INTERLEAVING, 1, 0),

- _DTV_CMD(DTV_ISDBS_TS_ID, 1, 0),
- _DTV_CMD(DTV_DVBT2_PLP_ID, 1, 0),
+ _DTV_CMD(DTV_STREAM_ID, 1, 0),
+ _DTV_CMD(DTV_DVBT2_PLP_ID_LEGACY, 1, 0),

         /* Get */
         _DTV_CMD(DTV_DISEQC_SLAVE_REPLY, 0, 1),
@@ -1382,11 +1381,10 @@ static int dtv_property_process_get(struct dvb_frontend *fe, case DTV_ISDBT_LAYERC_TIME_INTERLEAVING:
                 tvp->u.data = c->layer[2].interleaving;
                 break;
- case DTV_ISDBS_TS_ID:
- tvp->u.data = c->isdbs_ts_id;
- break;
- case DTV_DVBT2_PLP_ID:
- tvp->u.data = c->dvbt2_plp_id;
+
+ case DTV_STREAM_ID:
+ case DTV_DVBT2_PLP_ID_LEGACY:
+ tvp->u.data = c->stream_id;
                 break;

         /* ATSC-MH */
@@ -1771,11 +1769,10 @@ static int dtv_property_process_set(struct dvb_frontend *fe, case DTV_ISDBT_LAYERC_TIME_INTERLEAVING:
                 c->layer[2].interleaving = tvp->u.data;
                 break;
- case DTV_ISDBS_TS_ID:
- c->isdbs_ts_id = tvp->u.data;
- break;
- case DTV_DVBT2_PLP_ID:
- c->dvbt2_plp_id = tvp->u.data;
+
+ case DTV_STREAM_ID:
+ case DTV_DVBT2_PLP_ID_LEGACY:
+ c->stream_id = tvp->u.data;
                 break;

         /* ATSC-MH */

#1 lore raw
Quoted 18 lines · CrazyCat

DTV_ISDBS_TS_ID replaced with DTV_STREAM_ID. Aliases DTV_ISDBS_TS_ID, DTV_DVBS2_MIS_ID for DTV_STREAM_ID. DTV_DVBT2_PLP_ID marked as legacy.

include/linux/dvb/frontend.h +1 -0
index f50d405..3444dda 100644
@@ -62,6 +62,7 @@ typedef enum fe_caps {
          FE_CAN_8VSB = 0x200000,
          FE_CAN_16VSB = 0x400000,
          FE_HAS_EXTENDED_CAPS = 0x800000,   /* We need more bitspace for newer APIs, indicate this. */
+ FE_CAN_MULTISTREAM = 0x4000000,  /* frontend supports DVB-S2 multistream filtering */
          FE_CAN_TURBO_FEC = 0x8000000,  /* frontend supports "turbo fec modulation" */
          FE_CAN_2G_MODULATION = 0x10000000, /* frontend supports "2nd generation modulation" (DVB-S2) */
          FE_NEEDS_BENDING = 0x20000000, /* not supported anymore, don't use (frontend requires frequency bending) */

include/linux/dvb/frontend.h struct dvb_frontend_event { · line 320

Quoted 7 lines
include/linux/dvb/frontend.h +3 -1
@@ -314,9 +315,11 @@ struct dvb_frontend_event {
 
  #define DTV_ISDBT_LAYER_ENABLED 41
 
-#define DTV_ISDBS_TS_ID 42
+#define DTV_STREAM_ID 42
+#define DTV_ISDBS_TS_ID DTV_STREAM_ID
+#define DTV_DVBS2_MIS_ID DTV_STREAM_ID

@Mauro, should we rename also DTV_ISDBS_TS_ID to DTV_ISDBS_TS_ID_LEGACY to remind users ?

Quoted 10 lines
include/linux/dvb/frontend.h +1 -1
-#define DTV_DVBT2_PLP_ID 43
+#define DTV_DVBT2_PLP_ID_LEGACY 43
 
  #define DTV_ENUM_DELSYS 44
 
drivers/media/dvb/dvb-core/dvb_frontend.h +0 -0
index 7c64c09..bec0cda 100644

drivers/media/dvb/dvb-core/dvb_frontend.h struct dtv_frontend_properties { · line 372

Quoted 10 lines
drivers/media/dvb/dvb-core/dvb_frontend.h +2 -5
@@ -368,11 +368,8 @@ struct dtv_frontend_properties {
              u8 interleaving;
          } layer[3];
 
- /* ISDB-T specifics */
- u32 isdbs_ts_id;
-
- /* DVB-T2 specifics */
- u32                     dvbt2_plp_id;
+ /* Multistream specifics */
+ u32 stream_id;

u32 == 32 bit long unsigned number. See next comment.

Quoted 8 lines
drivers/media/dvb/dvb-core/dvb_frontend.h +0 -0
          /* ATSC-MH specifics */
          u8 atscmh_fic_ver;
drivers/media/dvb/dvb-core/dvb_frontend.c +0 -0
index aebcdf2..bccd245 100644

drivers/media/dvb/dvb-core/dvb_frontend.c static int dvb_frontend_clear_cache(struct dvb_frontend *fe) · line 949

Quoted 6 lines
drivers/media/dvb/dvb-core/dvb_frontend.c +1 -2
@@ -946,8 +946,7 @@ static int dvb_frontend_clear_cache(struct dvb_frontend *fe)
                  c->layer[i].segment_count = 0;
          }
 
- c->isdbs_ts_id = 0;
- c->dvbt2_plp_id = 0;
+ c->stream_id = -1;

unsigned number cannot be -1. It can be only 0 or bigger. Due to that this is wrong.

Quoted 36 lines
drivers/media/dvb/dvb-core/dvb_frontend.c +6 -9
          switch (c->delivery_system) {
          case SYS_DVBS:
@@ -1017,8 +1016,8 @@ static struct dtv_cmds_h dtv_cmds[DTV_MAX_COMMAND + 1] = {
          _DTV_CMD(DTV_ISDBT_LAYERC_SEGMENT_COUNT, 1, 0),
          _DTV_CMD(DTV_ISDBT_LAYERC_TIME_INTERLEAVING, 1, 0),
 
- _DTV_CMD(DTV_ISDBS_TS_ID, 1, 0),
- _DTV_CMD(DTV_DVBT2_PLP_ID, 1, 0),
+ _DTV_CMD(DTV_STREAM_ID, 1, 0),
+ _DTV_CMD(DTV_DVBT2_PLP_ID_LEGACY, 1, 0),
 
          /* Get */
          _DTV_CMD(DTV_DISEQC_SLAVE_REPLY, 0, 1),
@@ -1382,11 +1381,10 @@ static int dtv_property_process_get(struct dvb_frontend *fe,
          case DTV_ISDBT_LAYERC_TIME_INTERLEAVING:
                  tvp->u.data = c->layer[2].interleaving;
                  break;
- case DTV_ISDBS_TS_ID:
- tvp->u.data = c->isdbs_ts_id;
- break;
- case DTV_DVBT2_PLP_ID:
- tvp->u.data = c->dvbt2_plp_id;
+
+ case DTV_STREAM_ID:
+ case DTV_DVBT2_PLP_ID_LEGACY:
+ tvp->u.data = c->stream_id;
                  break;
 
          /* ATSC-MH */
@@ -1771,11 +1769,10 @@ static int dtv_property_process_set(struct dvb_frontend *fe,
          case DTV_ISDBT_LAYERC_TIME_INTERLEAVING:
                  c->layer[2].interleaving = tvp->u.data;
                  break;
- case DTV_ISDBS_TS_ID:
- c->isdbs_ts_id = tvp->u.data;

drivers/media/dvb/dvb-core/dvb_frontend.c static int dtv_property_process_set(struct dvb_frontend *fe, · line 1778

Quoted 10 lines
drivers/media/dvb/dvb-core/dvb_frontend.c +4 -3
- break;
- case DTV_DVBT2_PLP_ID:
- c->dvbt2_plp_id = tvp->u.data;
+
+ case DTV_STREAM_ID:
+ case DTV_DVBT2_PLP_ID_LEGACY:
+ c->stream_id = tvp->u.data;
                  break;
 
          /* ATSC-MH */

regards
Antti

Signature · 1 line
http://palosaari.fi/
#2 lore raw

Em 16-08-2012 15:11, Antti Palosaari escreveu:

Quoted 5 lines · CrazyCat
Quoted 4 lines

DTV_ISDBS_TS_ID replaced with DTV_STREAM_ID. Aliases DTV_ISDBS_TS_ID, DTV_DVBS2_MIS_ID for DTV_STREAM_ID. DTV_DVBT2_PLP_ID marked as legacy.

Quoted 10 lines

include/linux/dvb/frontend.h typedef enum fe_caps { · line 65

Quoted 10 lines
include/linux/dvb/frontend.h +1 -0
index f50d405..3444dda 100644
@@ -62,6 +62,7 @@ typedef enum fe_caps {
          FE_CAN_8VSB = 0x200000,
          FE_CAN_16VSB = 0x400000,
          FE_HAS_EXTENDED_CAPS = 0x800000,   /* We need more bitspace for newer APIs, indicate this. */
+ FE_CAN_MULTISTREAM = 0x4000000,  /* frontend supports DVB-S2 multistream filtering */

It is better to change this comment to cover the other standards.

Quoted 5 lines
Quoted 5 lines
include/linux/dvb/frontend.h +0 -0
          FE_CAN_TURBO_FEC = 0x8000000,  /* frontend supports "turbo fec modulation" */
          FE_CAN_2G_MODULATION = 0x10000000, /* frontend supports "2nd generation modulation" (DVB-S2) */
          FE_NEEDS_BENDING = 0x20000000, /* not supported anymore, don't use (frontend requires frequency bending) */
@@ -314,9 +315,11 @@ struct dvb_frontend_event {
 
Quoted 8 lines

include/linux/dvb/frontend.h struct dvb_frontend_event { · line 320

Quoted 6 lines
include/linux/dvb/frontend.h +3 -1
  #define DTV_ISDBT_LAYER_ENABLED 41
 
-#define DTV_ISDBS_TS_ID 42
+#define DTV_STREAM_ID 42
+#define DTV_ISDBS_TS_ID DTV_STREAM_ID
+#define DTV_DVBS2_MIS_ID DTV_STREAM_ID

@Mauro, should we rename also DTV_ISDBS_TS_ID to DTV_ISDBS_TS_ID_LEGACY to remind users ?

I think so.

Quoted 86 lines
Quoted 11 lines
include/linux/dvb/frontend.h +1 -1
-#define DTV_DVBT2_PLP_ID 43
+#define DTV_DVBT2_PLP_ID_LEGACY 43
 
  #define DTV_ENUM_DELSYS 44
 
drivers/media/dvb/dvb-core/dvb_frontend.h +0 -0
index 7c64c09..bec0cda 100644

drivers/media/dvb/dvb-core/dvb_frontend.h struct dtv_frontend_properties { · line 372

Quoted 10 lines
drivers/media/dvb/dvb-core/dvb_frontend.h +2 -5
@@ -368,11 +368,8 @@ struct dtv_frontend_properties {
              u8 interleaving;
          } layer[3];
 
- /* ISDB-T specifics */
- u32 isdbs_ts_id;
-
- /* DVB-T2 specifics */
- u32                     dvbt2_plp_id;
+ /* Multistream specifics */
+ u32 stream_id;

u32 == 32 bit long unsigned number. See next comment.

Quoted 8 lines
drivers/media/dvb/dvb-core/dvb_frontend.h +0 -0
          /* ATSC-MH specifics */
          u8 atscmh_fic_ver;
drivers/media/dvb/dvb-core/dvb_frontend.c +0 -0
index aebcdf2..bccd245 100644

drivers/media/dvb/dvb-core/dvb_frontend.c static int dvb_frontend_clear_cache(struct dvb_frontend *fe) · line 949

Quoted 6 lines
drivers/media/dvb/dvb-core/dvb_frontend.c +1 -2
@@ -946,8 +946,7 @@ static int dvb_frontend_clear_cache(struct dvb_frontend *fe)
                  c->layer[i].segment_count = 0;
          }
 
- c->isdbs_ts_id = 0;
- c->dvbt2_plp_id = 0;
+ c->stream_id = -1;

unsigned number cannot be -1. It can be only 0 or bigger. Due to that this is wrong.

Quoted 45 lines
drivers/media/dvb/dvb-core/dvb_frontend.c +10 -12
          switch (c->delivery_system) {
          case SYS_DVBS:
@@ -1017,8 +1016,8 @@ static struct dtv_cmds_h dtv_cmds[DTV_MAX_COMMAND + 1] = {
          _DTV_CMD(DTV_ISDBT_LAYERC_SEGMENT_COUNT, 1, 0),
          _DTV_CMD(DTV_ISDBT_LAYERC_TIME_INTERLEAVING, 1, 0),
 
- _DTV_CMD(DTV_ISDBS_TS_ID, 1, 0),
- _DTV_CMD(DTV_DVBT2_PLP_ID, 1, 0),
+ _DTV_CMD(DTV_STREAM_ID, 1, 0),
+ _DTV_CMD(DTV_DVBT2_PLP_ID_LEGACY, 1, 0),
 
          /* Get */
          _DTV_CMD(DTV_DISEQC_SLAVE_REPLY, 0, 1),
@@ -1382,11 +1381,10 @@ static int dtv_property_process_get(struct dvb_frontend *fe,
          case DTV_ISDBT_LAYERC_TIME_INTERLEAVING:
                  tvp->u.data = c->layer[2].interleaving;
                  break;
- case DTV_ISDBS_TS_ID:
- tvp->u.data = c->isdbs_ts_id;
- break;
- case DTV_DVBT2_PLP_ID:
- tvp->u.data = c->dvbt2_plp_id;
+
+ case DTV_STREAM_ID:
+ case DTV_DVBT2_PLP_ID_LEGACY:
+ tvp->u.data = c->stream_id;
                  break;
 
          /* ATSC-MH */
@@ -1771,11 +1769,10 @@ static int dtv_property_process_set(struct dvb_frontend *fe,
          case DTV_ISDBT_LAYERC_TIME_INTERLEAVING:
                  c->layer[2].interleaving = tvp->u.data;
                  break;
- case DTV_ISDBS_TS_ID:
- c->isdbs_ts_id = tvp->u.data;
- break;
- case DTV_DVBT2_PLP_ID:
- c->dvbt2_plp_id = tvp->u.data;
+
+ case DTV_STREAM_ID:
+ case DTV_DVBT2_PLP_ID_LEGACY:
+ c->stream_id = tvp->u.data;
                  break;
 
Quoted 1 line

drivers/media/dvb/dvb-core/dvb_frontend.c static int dtv_property_process_set(struct dvb_frontend *fe, · line 1778

Quoted 1 line
drivers/media/dvb/dvb-core/dvb_frontend.c +0 -0
          /* ATSC-MH */

The rest looks fine for me. Still missing the DocBook additions for multistream (Documentation/DocBook/media/dvb/dvbproperty.xml).

Quoted 5 lines

regards
Antti

author
#3 lore raw
In reply to Antti Palosaari

16.08.2012, 21:11, "Antti Palosaari" <[email protected]>:

Quoted 8 lines
Quoted 7 lines

 - /* ISDB-T specifics */
 - u32 isdbs_ts_id;
 -
 - /* DVB-T2 specifics */
 - u32                     dvbt2_plp_id;
 + /* Multistream specifics */
 + u32 stream_id;

Quoted 8 lines

u32 == 32 bit long unsigned number. See next comment.

Quoted 4 lines

 - c->isdbs_ts_id = 0;
 - c->dvbt2_plp_id = 0;
 + c->stream_id = -1;

unsigned number cannot be -1. It can be only 0 or bigger. Due to that this is wrong.

so maybe better declare in as int ? depend from standard valid stream id (for DVB is 0-255) and any another value (-1) disable stream filtering in demod.

#4 lore raw
Quoted 12 lines · CrazyCat

16.08.2012, 21:11, "Antti Palosaari" <[email protected]>:

Quoted 10 lines
Quoted 7 lines

- /* ISDB-T specifics */
- u32 isdbs_ts_id;
-
- /* DVB-T2 specifics */
- u32 dvbt2_plp_id;
+ /* Multistream specifics */
+ u32 stream_id;

u32 == 32 bit long unsigned number. See next comment.

Quoted 1 line
Quoted 8 lines
Quoted 6 lines
Quoted 3 lines

- c->isdbs_ts_id = 0;
- c->dvbt2_plp_id = 0;
+ c->stream_id = -1;

unsigned number cannot be -1. It can be only 0 or bigger. Due to that this is wrong.

so maybe better declare in as int ? depend from standard valid stream id (for DVB is 0-255) and any another value (-1) disable stream filtering in demod.

I agree that. Actually I was thinking same. For DVB-T2 valid values are 0-255, I haven't looked others but surely int maximum should enough for all.

regards
Antti

Signature · 1 line
http://palosaari.fi/
#5 lore raw
In reply to CrazyCat

Em 17-08-2012 14:21, CrazyCat escreveu:

Quoted 12 lines

16.08.2012, 21:11, "Antti Palosaari" <[email protected]>:

Quoted 10 lines
Quoted 7 lines

- /* ISDB-T specifics */
- u32 isdbs_ts_id;
-
- /* DVB-T2 specifics */
- u32 dvbt2_plp_id;
+ /* Multistream specifics */
+ u32 stream_id;

u32 == 32 bit long unsigned number. See next comment.

Quoted 1 line
Quoted 8 lines
Quoted 6 lines
Quoted 3 lines

- c->isdbs_ts_id = 0;
- c->dvbt2_plp_id = 0;
+ c->stream_id = -1;

unsigned number cannot be -1. It can be only 0 or bigger. Due to that this is wrong.

so maybe better declare in as int ? depend from standard valid stream id (for DVB is 0-255) and any another value (-1) disable stream filtering in demod.

It should be noticed that DVBv5 will pass it as u32 in any case. So, maybe it is better to use UINT_MAX as the no-filter value:

/home/v4l/v4l/patchwork/include/linux/kernel.h:#define UINT_MAX (~0U)

Some care is needed when doing that, to avoid 32bits/64bits compat conflicts. Also, this define doesn't exist in userspace.

so, maybe using something like:

#define NO_STREAM_ID_FILTER (~0U)

Would work properly, as, even on 64bits system with 32bits userspace, this should work

or, if we want to be pedantic:

#define NO_STREAM_ID_FILTER ((u32)(~0U))

Quoted 5 lines

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

author
#6 lore raw

Multistream support with all recommendations.

include/linux/dvb/frontend.h +5 -3
index bb51edf..a6a6839 100644
@@ -62,6 +62,7 @@ typedef enum fe_caps {
 	FE_CAN_8VSB			= 0x200000,
 	FE_CAN_16VSB			= 0x400000,
 	FE_HAS_EXTENDED_CAPS		= 0x800000,   /* We need more bitspace for newer APIs, indicate this. */
+	FE_CAN_MULTISTREAM		= 0x4000000,  /* frontend supports DVB-S2 multistream filtering */
 	FE_CAN_TURBO_FEC		= 0x8000000,  /* frontend supports "turbo fec modulation" */
 	FE_CAN_2G_MODULATION		= 0x10000000, /* frontend supports "2nd generation modulation" (DVB-S2) */
 	FE_NEEDS_BENDING		= 0x20000000, /* not supported anymore, don't use (frontend requires frequency bending) */
@@ -338,9 +339,9 @@ struct dvb_frontend_event {
 
 #define DTV_ISDBT_LAYER_ENABLED	41
 
-#define DTV_ISDBS_TS_ID		42
-
-#define DTV_DVBT2_PLP_ID	43
+#define DTV_STREAM_ID		42
+#define DTV_ISDBS_TS_ID_LEGACY	DTV_STREAM_ID
+#define DTV_DVBT2_PLP_ID_LEGACY	43
 
 #define DTV_ENUM_DELSYS		44
 
@@ -436,6 +437,7 @@ enum atscmh_rs_code_mode {
 	ATSCMH_RSCODE_RES        = 3,
 };
 
+#define NO_STREAM_ID_FILTER	(~0U)
 
 struct dtv_cmds_h {
 	char	*name;		/* A display name for debugging purposes */
drivers/media/dvb-core/dvb_frontend.h +2 -5
index db309db..33996a0 100644
@@ -370,11 +370,8 @@ struct dtv_frontend_properties {
 	    u8			interleaving;
 	} layer[3];
 
-	/* ISDB-T specifics */
-	u32			isdbs_ts_id;
-
-	/* DVB-T2 specifics */
-	u32                     dvbt2_plp_id;
+	/* Multistream specifics */
+	u32			stream_id;
 
 	/* ATSC-MH specifics */
 	u8			atscmh_fic_ver;
drivers/media/dvb-core/dvb_frontend.c +13 -14
index aa4d4d8..fc0c0ca 100644
@@ -946,8 +946,7 @@ static int dvb_frontend_clear_cache(struct dvb_frontend *fe)
 		c->layer[i].segment_count = 0;
 	}
 
-	c->isdbs_ts_id = 0;
-	c->dvbt2_plp_id = 0;
+	c->stream_id = NO_STREAM_ID_FILTER;
 
 	switch (c->delivery_system) {
 	case SYS_DVBS:
@@ -1018,8 +1017,8 @@ static struct dtv_cmds_h dtv_cmds[DTV_MAX_COMMAND + 1] = {
 	_DTV_CMD(DTV_ISDBT_LAYERC_SEGMENT_COUNT, 1, 0),
 	_DTV_CMD(DTV_ISDBT_LAYERC_TIME_INTERLEAVING, 1, 0),
 
-	_DTV_CMD(DTV_ISDBS_TS_ID, 1, 0),
-	_DTV_CMD(DTV_DVBT2_PLP_ID, 1, 0),
+	_DTV_CMD(DTV_STREAM_ID, 1, 0),
+	_DTV_CMD(DTV_DVBT2_PLP_ID_LEGACY, 1, 0),
 
 	/* Get */
 	_DTV_CMD(DTV_DISEQC_SLAVE_REPLY, 0, 1),
@@ -1387,11 +1386,11 @@ static int dtv_property_process_get(struct dvb_frontend *fe,
 	case DTV_ISDBT_LAYERC_TIME_INTERLEAVING:
 		tvp->u.data = c->layer[2].interleaving;
 		break;
-	case DTV_ISDBS_TS_ID:
-		tvp->u.data = c->isdbs_ts_id;
-		break;
-	case DTV_DVBT2_PLP_ID:
-		tvp->u.data = c->dvbt2_plp_id;
+
+	/* Multistream support */
+	case DTV_STREAM_ID:
+	case DTV_DVBT2_PLP_ID_LEGACY:
+		tvp->u.data = c->stream_id;
 		break;
 
 	/* ATSC-MH */
@@ -1779,11 +1778,11 @@ static int dtv_property_process_set(struct dvb_frontend *fe,
 	case DTV_ISDBT_LAYERC_TIME_INTERLEAVING:
 		c->layer[2].interleaving = tvp->u.data;
 		break;
-	case DTV_ISDBS_TS_ID:
-		c->isdbs_ts_id = tvp->u.data;
-		break;
-	case DTV_DVBT2_PLP_ID:
-		c->dvbt2_plp_id = tvp->u.data;
+
+	/* Multistream support */
+	case DTV_STREAM_ID:
+	case DTV_DVBT2_PLP_ID_LEGACY:
+		c->stream_id = tvp->u.data;
 		break;
 
 	/* ATSC-MH */
#7 lore raw
Quoted 44 lines · CrazyCat

Multistream support with all recommendations.

include/linux/dvb/frontend.h +5 -3
index bb51edf..a6a6839 100644
@@ -62,6 +62,7 @@ typedef enum fe_caps {
  	FE_CAN_8VSB			= 0x200000,
  	FE_CAN_16VSB			= 0x400000,
  	FE_HAS_EXTENDED_CAPS		= 0x800000,   /* We need more bitspace for newer APIs, indicate this. */
+	FE_CAN_MULTISTREAM		= 0x4000000,  /* frontend supports DVB-S2 multistream filtering */
  	FE_CAN_TURBO_FEC		= 0x8000000,  /* frontend supports "turbo fec modulation" */
  	FE_CAN_2G_MODULATION		= 0x10000000, /* frontend supports "2nd generation modulation" (DVB-S2) */
  	FE_NEEDS_BENDING		= 0x20000000, /* not supported anymore, don't use (frontend requires frequency bending) */
@@ -338,9 +339,9 @@ struct dvb_frontend_event {
 
  #define DTV_ISDBT_LAYER_ENABLED	41
 
-#define DTV_ISDBS_TS_ID		42
-
-#define DTV_DVBT2_PLP_ID	43
+#define DTV_STREAM_ID		42
+#define DTV_ISDBS_TS_ID_LEGACY	DTV_STREAM_ID
+#define DTV_DVBT2_PLP_ID_LEGACY	43
 
  #define DTV_ENUM_DELSYS		44
 
@@ -436,6 +437,7 @@ enum atscmh_rs_code_mode {
  	ATSCMH_RSCODE_RES        = 3,
  };
 
+#define NO_STREAM_ID_FILTER	(~0U)
 
  struct dtv_cmds_h {
  	char	*name;		/* A display name for debugging purposes */
drivers/media/dvb-core/dvb_frontend.h +0 -0
index db309db..33996a0 100644
@@ -370,11 +370,8 @@ struct dtv_frontend_properties {
  	    u8			interleaving;
  	} layer[3];
 

drivers/media/dvb-core/dvb_frontend.h struct dtv_frontend_properties { · line 377

Quoted 10 lines
drivers/media/dvb-core/dvb_frontend.h +2 -5
-	/* ISDB-T specifics */
-	u32			isdbs_ts_id;
-
-	/* DVB-T2 specifics */
-	u32                     dvbt2_plp_id;
+	/* Multistream specifics */
+	u32			stream_id;
 
  	/* ATSC-MH specifics */
  	u8			atscmh_fic_ver;

Shouldn't DVB_API_VERSION minor be increased or I should check for defined(DTV_STREAM_ID) when implementing MIS support in dvblast?

Signature · 2 lines
Georgi Chorbadzhiyski
http://georgi.unixsol.org/
#8 lore raw
In reply to CrazyCat

Em 20-08-2012 21:42, CrazyCat escreveu:

include/linux/dvb/frontend.h typedef enum fe_caps { · line 65

Quoted 12 lines

Multistream support with all recommendations.

include/linux/dvb/frontend.h +1 -0
index bb51edf..a6a6839 100644
@@ -62,6 +62,7 @@ typedef enum fe_caps {
 	FE_CAN_8VSB			= 0x200000,
 	FE_CAN_16VSB			= 0x400000,
 	FE_HAS_EXTENDED_CAPS		= 0x800000,   /* We need more bitspace for newer APIs, indicate this. */
+	FE_CAN_MULTISTREAM		= 0x4000000,  /* frontend supports DVB-S2 multistream filtering */

Hmm... the comment here is not 100%, as this can be used not only by DVB-S2, but also for DVB-T2, ISDB-S (and maybe others in the future, like DVB-C2).

Instead of adding a big comment here, you should patch the API spec, at Documentation/DocBook/media/dvb/dvbproperty.xml, pointing that this capability, and the corresponding properties are
for DVB-S2, ISDB-S and DVB-T2.

Quoted 92 lines
include/linux/dvb/frontend.h +4 -3
 	FE_CAN_TURBO_FEC		= 0x8000000,  /* frontend supports "turbo fec modulation" */
 	FE_CAN_2G_MODULATION		= 0x10000000, /* frontend supports "2nd generation modulation" (DVB-S2) */
 	FE_NEEDS_BENDING		= 0x20000000, /* not supported anymore, don't use (frontend requires frequency bending) */
@@ -338,9 +339,9 @@ struct dvb_frontend_event {
 
 #define DTV_ISDBT_LAYER_ENABLED	41
 
-#define DTV_ISDBS_TS_ID		42
-
-#define DTV_DVBT2_PLP_ID	43
+#define DTV_STREAM_ID		42
+#define DTV_ISDBS_TS_ID_LEGACY	DTV_STREAM_ID
+#define DTV_DVBT2_PLP_ID_LEGACY	43
 
 #define DTV_ENUM_DELSYS		44
 
@@ -436,6 +437,7 @@ enum atscmh_rs_code_mode {
 	ATSCMH_RSCODE_RES        = 3,
 };
 
+#define NO_STREAM_ID_FILTER	(~0U)
 
 struct dtv_cmds_h {
 	char	*name;		/* A display name for debugging purposes */
drivers/media/dvb-core/dvb_frontend.h +2 -5
index db309db..33996a0 100644
@@ -370,11 +370,8 @@ struct dtv_frontend_properties {
 	    u8			interleaving;
 	} layer[3];
 
-	/* ISDB-T specifics */
-	u32			isdbs_ts_id;
-
-	/* DVB-T2 specifics */
-	u32                     dvbt2_plp_id;
+	/* Multistream specifics */
+	u32			stream_id;
 
 	/* ATSC-MH specifics */
 	u8			atscmh_fic_ver;
drivers/media/dvb-core/dvb_frontend.c +8 -12
index aa4d4d8..fc0c0ca 100644
@@ -946,8 +946,7 @@ static int dvb_frontend_clear_cache(struct dvb_frontend *fe)
 		c->layer[i].segment_count = 0;
 	}
 
-	c->isdbs_ts_id = 0;
-	c->dvbt2_plp_id = 0;
+	c->stream_id = NO_STREAM_ID_FILTER;
 
 	switch (c->delivery_system) {
 	case SYS_DVBS:
@@ -1018,8 +1017,8 @@ static struct dtv_cmds_h dtv_cmds[DTV_MAX_COMMAND + 1] = {
 	_DTV_CMD(DTV_ISDBT_LAYERC_SEGMENT_COUNT, 1, 0),
 	_DTV_CMD(DTV_ISDBT_LAYERC_TIME_INTERLEAVING, 1, 0),
 
-	_DTV_CMD(DTV_ISDBS_TS_ID, 1, 0),
-	_DTV_CMD(DTV_DVBT2_PLP_ID, 1, 0),
+	_DTV_CMD(DTV_STREAM_ID, 1, 0),
+	_DTV_CMD(DTV_DVBT2_PLP_ID_LEGACY, 1, 0),
 
 	/* Get */
 	_DTV_CMD(DTV_DISEQC_SLAVE_REPLY, 0, 1),
@@ -1387,11 +1386,11 @@ static int dtv_property_process_get(struct dvb_frontend *fe,
 	case DTV_ISDBT_LAYERC_TIME_INTERLEAVING:
 		tvp->u.data = c->layer[2].interleaving;
 		break;
-	case DTV_ISDBS_TS_ID:
-		tvp->u.data = c->isdbs_ts_id;
-		break;
-	case DTV_DVBT2_PLP_ID:
-		tvp->u.data = c->dvbt2_plp_id;
+
+	/* Multistream support */
+	case DTV_STREAM_ID:
+	case DTV_DVBT2_PLP_ID_LEGACY:
+		tvp->u.data = c->stream_id;
 		break;
 
 	/* ATSC-MH */
@@ -1779,11 +1778,11 @@ static int dtv_property_process_set(struct dvb_frontend *fe,
 	case DTV_ISDBT_LAYERC_TIME_INTERLEAVING:
 		c->layer[2].interleaving = tvp->u.data;
 		break;
-	case DTV_ISDBS_TS_ID:
-		c->isdbs_ts_id = tvp->u.data;
-		break;

drivers/media/dvb-core/dvb_frontend.c static int dtv_property_process_set(struct dvb_frontend *fe, · line 1788

Quoted 10 lines
drivers/media/dvb-core/dvb_frontend.c +5 -2
-	case DTV_DVBT2_PLP_ID:
-		c->dvbt2_plp_id = tvp->u.data;
+
+	/* Multistream support */
+	case DTV_STREAM_ID:
+	case DTV_DVBT2_PLP_ID_LEGACY:
+		c->stream_id = tvp->u.data;
 		break;
 
 	/* ATSC-MH */

Em 16-08-2012 22:11, Akihiro TSUKADA escreveu:

Quoted 4 lines

Hi,

It would be nice if you would include a patch to replace isdbs_ts_id in dvb/pt1/va1j5jf8007s.c, which is the only file to use the variable.

Good point. This patch shouldn't break any existing drivers, so you should replace the occurrences of the legacy symbols to reflect this change.

Em 21-08-2012 17:42, Georgi Chorbadzhiyski escreveu:

Quoted 2 lines

Shouldn't DVB_API_VERSION minor be increased or I should check for defined(DTV_STREAM_ID) when implementing MIS support in dvblast?

Good point. API minor version should be incremented on both frontend.h header file and at the DocBook API file.

Could you please address the above requests, and also patch the DVB API docs to reflect this change (Documentation/DocBook/media/dvb/dvbproperty.xml), describing the meaning for this property and for what standards it should be used?

Thank you!
Mauro

author
#9 lore raw
In reply to Antti Palosaari

16.08.2012, 21:11, "Antti Palosaari" <[email protected]>:

Quoted 2 lines

@Mauro, should we rename also DTV_ISDBS_TS_ID to DTV_ISDBS_TS_ID_LEGACY to remind users ?

Maybe leave DTV_ISDBS_TS_ID and convert DTV_DVBT2_PLP_ID to DTV_DVB_STREAM_ID ? and dvbt2_plp_id convert to dvb_stream_id.

Because DVB and ISDB different standards and look like stream id for ISDB is 16 bit, for DVB-S2/T2 8 bit.

#10 lore raw

Em 17-08-2012 14:52, CrazyCat escreveu:

Quoted 7 lines

16.08.2012, 21:11, "Antti Palosaari" <[email protected]>:

Quoted 2 lines

@Mauro, should we rename also DTV_ISDBS_TS_ID to DTV_ISDBS_TS_ID_LEGACY to remind users ?

Maybe leave DTV_ISDBS_TS_ID and convert DTV_DVBT2_PLP_ID to DTV_DVB_STREAM_ID ? and dvbt2_plp_id convert to dvb_stream_id.

Because DVB and ISDB different standards and look like stream id for ISDB is 16 bit, for DVB-S2/T2 8 bit.

Well, Frequency range in satellite standards are in kHz, while the frequencies on the other ones are in Hz. So, I don't think that the number of bits should limit it. In a matter of fact, even on DVB-T/T2, DVB-S/S2, ... there are some fields that gained more bits.

So, I don't see any issue on using DTV_DVB_STREAM_ID on all of them, even if the number of bits are different.

Of course, the API documentation should be clear about the field differences.

Regards,
Mauro.

#11 lore raw
In reply to CrazyCat

Hi,

Quoted 8 lines
drivers/media/dvb/dvb-core/dvb_frontend.h +0 -0
index 7c64c09..bec0cda 100644
@@ -368,11 +368,8 @@ struct dtv_frontend_properties {
             u8 interleaving;
         } layer[3];
 

drivers/media/dvb/dvb-core/dvb_frontend.h struct dtv_frontend_properties { · line 375

Quoted 10 lines
drivers/media/dvb/dvb-core/dvb_frontend.h +2 -5
- /* ISDB-T specifics */
- u32 isdbs_ts_id;
-
- /* DVB-T2 specifics */
- u32                     dvbt2_plp_id;
+ /* Multistream specifics */
+ u32 stream_id;
 
         /* ATSC-MH specifics */
         u8 atscmh_fic_ver;

It would be nice if you would include a patch to replace isdbs_ts_id in dvb/pt1/va1j5jf8007s.c, which is the only file to use the variable.