[Git][videolan/libdvbpsi][master] 8 commits: Don't perform continuity check if there is no payload

Jean-Paul Saman <[email protected]> Sun, 20 Oct 2019 16:01:11 +0200
Newsgroups gmane.comp.video.videolan.libdvbpsi.devel
Message-ID <[email protected]>
--===============1449314694218610134==
Content-Type: multipart/alternative;
 boundary="--==_mimepart_5dac68a78f1a2_851e3f9869d9a9e0989017";
 charset=UTF-8
Content-Transfer-Encoding: 7bit


----==_mimepart_5dac68a78f1a2_851e3f9869d9a9e0989017
Content-Type: text/plain;
 charset=UTF-8
Content-Transfer-Encoding: quoted-printable

=0D
=0D
Jean-Paul Saman pushed to branch master at VideoLAN / libdvbpsi=0D
=0D
=0D
Commits:=0D
aff54341 by Olivier Braun at 2019-10-18T14:17:35Z=0D
Don&#39;t perform continuity check if there is no payload=0D
=0D
According to ISO 13818-1: The continuity_counter shall not be incremented=
 when the adaptation_field_control of the packet equals &#39;00&#39; or &=
#39;10&#39;.=0D
=0D
- - - - -=0D
26e371dd by Olivier Braun at 2019-10-18T14:27:16Z=0D
SIS also has b_syntax_indicator set to &#39;0&#39;=0D
=0D
ANSI/SCTE 35 2019r1: The section_syntax_indicator is a 1-bit field that s=
hould always be set to =E2=80=980=E2=80=99, indicating that MPEG short se=
ctions are to be used.=0D
=0D
- - - - -=0D
eddc9b29 by Olivier Braun at 2019-10-18T15:39:58Z=0D
Bugfix: asset packet is NOT encrypted=0D
=0D
- - - - -=0D
1bb2efe0 by Olivier Braun at 2019-10-18T20:45:29Z=0D
Add time_signal handling=0D
=0D
- - - - -=0D
c0a7a8c1 by Olivier Braun at 2019-10-18T20:55:23Z=0D
Disable long section checks=0D
=0D
From SCTE 35:2019: The section_syntax_indicator is a 1-bit field that sho=
uld always be set to =E2=80=980=E2=80=99=0D
From ISO 13818-1: if the indicator is set to &#39;0&#39;, then only the f=
ields &#39;table_id&#39; through &#39;private_section_length&#39; shall f=
ollow the common structure syntax and semantics and the rest of the priva=
te_section may take any form the user determines.=0D
=0D
- - - - -=0D
8fb730fd by Olivier Braun at 2019-10-18T22:37:36Z=0D
Fix splice_info_section decoding=0D
=0D
The 3 first bytes of the secion are already skipped in dvbpsi.c=0D
`p_section-&gt;p_payload_start =3D p_section-&gt;p_data + 3;`=0D
=0D
p_section-&gt;p_payload_start therefore points to the protocol_version fi=
eld of the splice_info_section=0D
=0D
- - - - -=0D
7d1b5361 by Jean-Paul Saman at 2019-10-19T17:53:23Z=0D
sis: dvbpsi_sis_cmd_time_signal_decode() initialize i_pts_time=0D
=0D
- - - - -=0D
f186f4b9 by Jean-Paul Saman at 2019-10-19T17:55:47Z=0D
AUTHORS: update=0D
=0D
- - - - -=0D
=0D
=0D
6 changed files:=0D
=0D
- AUTHORS=0D
- src/dvbpsi.c=0D
- src/psi.c=0D
- src/tables/sis.c=0D
- src/tables/sis.h=0D
- src/tables/sis_private.h=0D
=0D
=0D
Changes:=0D
=0D
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0D
AUTHORS=0D
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0D
@@ -29,6 +29,10 @@ N: M. Benoit=0D
 E: <[email protected]>=0D
 D: Generate descriptors 0x83, 0xa1=0D
 =0D
+N: O. Braun=0D
+E: <[email protected]>=0D
+D: SIS table improvements=0D
+=0D
 N: Roberto Corno=0D
 E: [email protected]=0D
 D: Descriptors 0x40, 0x41, 0x49, 0x4a, 0x4b, 0x4f and 0x50=0D
=0D
=0D
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0D
src/dvbpsi.c=0D
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0D
@@ -285,6 +285,10 @@ bool dvbpsi_packet_push(dvbpsi_t *p_dvbpsi, const ui=
nt8_t* p_data)=0D
         return false;=0D
     }=0D
 =0D
+    /* Return if no payload in the TS packet */=0D
+    if (!(p_data[3] & 0x10))=0D
+        return false;=0D
+=0D
     /* Continuity check */=0D
     const bool b_first =3D (p_decoder->i_continuity_counter =3D=3D DVBPS=
I_INVALID_CC);=0D
     if (b_first)=0D
@@ -329,10 +333,6 @@ bool dvbpsi_packet_push(dvbpsi_t *p_dvbpsi, const ui=
nt8_t* p_data)=0D
 =0D
     memcpy(p_decoder->prevpacket, p_data, 188);=0D
 =0D
-    /* Return if no payload in the TS packet */=0D
-    if (!(p_data[3] & 0x10))=0D
-        return false;=0D
-=0D
     /* Skip the adaptation_field if present */=0D
     if (p_data[3] & 0x20)=0D
         p_payload_pos =3D p_data + 5 + p_data[4];=0D
=0D
=0D
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0D
src/psi.c=0D
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0D
@@ -206,7 +206,7 @@ bool dvbpsi_CheckPSISection(dvbpsi_t *p_dvbpsi, dvbps=
i_psi_section_t *p_section,=0D
     }=0D
 =0D
     if (!p_section->b_syntax_indicator &&=0D
-        (table_id !=3D 0x70 && table_id !=3D 0x73)) /* TDT/TOT has b_syn=
tax_indicator set to '0' */=0D
+        (table_id !=3D 0x70 && table_id !=3D 0x73 && table_id !=3D 0xFC)=
) /* TDT/TOT/SIS has b_syntax_indicator set to '0' */=0D
     {=0D
         /* Invalid section_syntax_indicator */=0D
         dvbpsi_error(p_dvbpsi, psz_table_name,=0D
=0D
=0D
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0D
src/tables/sis.c=0D
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0D
@@ -191,7 +191,24 @@ dvbpsi_sis_t* dvbpsi_sis_new(uint8_t i_table_id, uin=
t16_t i_extension, uint8_t i=0D
  ***********************************************************************=
******/=0D
 void dvbpsi_sis_empty(dvbpsi_sis_t* p_sis)=0D
 {=0D
-    /* FIXME: free splice_command_sections */=0D
+    switch (p_sis->i_splice_command_type)=0D
+    {=0D
+        case 0x00: /* splice_null */=0D
+        case 0x04: /* splice_schedule */=0D
+            cmd_splice_schedule_cleanup(p_sis->p_splice_command);=0D
+            break;=0D
+        case 0x05: /* splice_insert */=0D
+            cmd_splice_insert_cleanup(p_sis->p_splice_command);=0D
+            break;=0D
+        case 0x06: /* time_signal */=0D
+            cmd_time_signal_cleanup(p_sis->p_splice_command);=0D
+            break;=0D
+        case 0x07: /* bandwidth_reservation */=0D
+            break;=0D
+        default:=0D
+            break;=0D
+    }=0D
+    p_sis->p_splice_command =3D NULL;=0D
 =0D
     dvbpsi_DeleteDescriptors(p_sis->p_first_descriptor);=0D
     p_sis->p_first_descriptor =3D NULL;=0D
@@ -312,7 +329,7 @@ static bool dvbpsi_AddSectionSIS(dvbpsi_t *p_dvbpsi, =
dvbpsi_sis_decoder_t *p_sis=0D
 =0D
     /* Add to linked list of sections */=0D
     if (dvbpsi_decoder_psi_section_add(DVBPSI_DECODER(p_sis_decoder), p_=
section))=0D
-        dvbpsi_debug(p_dvbpsi, "SDT decoder", "overwrite section number =
%d",=0D
+        dvbpsi_debug(p_dvbpsi, "SIS decoder", "overwrite section number =
%d",=0D
                      p_section->i_number);=0D
 =0D
     return true;=0D
@@ -366,20 +383,6 @@ void dvbpsi_sis_sections_gather(dvbpsi_t *p_dvbpsi, =
dvbpsi_psi_section_t * p_sec=0D
             if (dvbpsi_CheckSIS(p_dvbpsi, p_sis_decoder, p_section))=0D
                 dvbpsi_ReInitSIS(p_sis_decoder, true);=0D
         }=0D
-        else=0D
-        {=0D
-            if(     (p_sis_decoder->b_current_valid)=0D
-                 && (p_sis_decoder->current_sis.i_version =3D=3D p_secti=
on->i_version)=0D
-                 && (p_sis_decoder->current_sis.b_current_next =3D=3D p_=
section->b_current_next))=0D
-             {=0D
-                 /* Don't decode since this version is already decoded *=
/=0D
-                 dvbpsi_debug(p_dvbpsi, "SIT decoder",=0D
-                             "ignoring already decoded section %d",=0D
-                             p_section->i_number);=0D
-                 dvbpsi_DeletePSISections(p_section);=0D
-                 return;=0D
-             }=0D
-        }=0D
     }=0D
 =0D
     /* Add section to SIS */=0D
@@ -402,7 +405,7 @@ void dvbpsi_sis_sections_gather(dvbpsi_t *p_dvbpsi, d=
vbpsi_psi_section_t * p_sec=0D
         /* Decode the sections */=0D
         dvbpsi_sis_sections_decode(p_dvbpsi, p_sis_decoder->p_building_s=
is,=0D
                                    p_sis_decoder->p_sections);=0D
-        /* signal the new SDT */=0D
+        /* signal the new SIS */=0D
         p_sis_decoder->pf_sis_callback(p_sis_decoder->p_priv,=0D
                                        p_sis_decoder->p_building_sis);=0D=

         /* Delete sections and Reinitialize the structures */=0D
@@ -459,6 +462,27 @@ static void dvbpsi_sis_break_duration(uint8_t *p_dat=
a, dvbpsi_sis_break_duration=0D
                (uint64_t)p_data[4]);=0D
 }=0D
 =0D
+/***********************************************************************=
******=0D
+ * cmd_splice_insert_cleanup=0D
+ ***********************************************************************=
******=0D
+ * Free resource for splice_insert command structure.=0D
+ ***********************************************************************=
******/=0D
+static void cmd_splice_insert_cleanup(dvbpsi_sis_cmd_splice_insert_t *p_=
cmd)=0D
+{=0D
+    if (p_cmd)=0D
+    {=0D
+        dvbpsi_sis_component_splice_time_t *p_splice_time =3D p_cmd->p_s=
plice_time;=0D
+        while (p_splice_time !=3D NULL)=0D
+        {=0D
+            dvbpsi_sis_component_splice_time_t *p_next =3D p_splice_time=
->p_next;=0D
+            free(p_splice_time);=0D
+            p_splice_time =3D p_next;=0D
+        }=0D
+        p_cmd->p_splice_time =3D NULL;=0D
+        free(p_cmd);=0D
+    }=0D
+}=0D
+=0D
 /***********************************************************************=
******=0D
  * dvbpsi_sis_cmd_splice_insert_decode=0D
  ***********************************************************************=
******=0D
@@ -574,21 +598,27 @@ error:=0D
  ***********************************************************************=
******/=0D
 static void cmd_splice_schedule_cleanup(dvbpsi_sis_cmd_splice_schedule_t=
 *p_cmd)=0D
 {=0D
-    dvbpsi_sis_splice_event_t *p_event =3D p_cmd->p_splice_event;=0D
-    while (p_event) {=0D
-        dvbpsi_sis_splice_event_t *p_next =3D p_event->p_next;=0D
-        if (p_event->p_component) {=0D
-            dvbpsi_sis_component_t *p_time =3D p_event->p_component;=0D
-            while (p_time) {=0D
-                dvbpsi_sis_component_t *p_tmp =3D p_time->p_next;=0D
-                free(p_time);=0D
-                p_time =3D p_tmp;=0D
+    if (p_cmd)=0D
+    {=0D
+        dvbpsi_sis_splice_event_t* p_event =3D p_cmd->p_splice_event;=0D=

+        while (p_event)=0D
+        {=0D
+            dvbpsi_sis_splice_event_t* p_next =3D p_event->p_next;=0D
+            if (p_event->p_component)=0D
+            {=0D
+                dvbpsi_sis_component_t* p_time =3D p_event->p_component;=
=0D
+                while (p_time)=0D
+                {=0D
+                    dvbpsi_sis_component_t* p_tmp =3D p_time->p_next;=0D=

+                    free(p_time);=0D
+                    p_time =3D p_tmp;=0D
+                }=0D
             }=0D
+            free(p_event);=0D
+            p_event =3D p_next;=0D
         }=0D
-        free(p_event);=0D
-        p_event =3D p_next;=0D
+        free(p_cmd);=0D
     }=0D
-    free(p_cmd);=0D
 }=0D
 =0D
 /***********************************************************************=
******=0D
@@ -683,6 +713,76 @@ static dvbpsi_sis_cmd_splice_schedule_t *=0D
     return p_cmd;=0D
 }=0D
 =0D
+/***********************************************************************=
******=0D
+ * cmd_time_signal_cleanup=0D
+ ***********************************************************************=
******=0D
+ * Free resource for time_signal command structure.=0D
+ ***********************************************************************=
******/=0D
+static void cmd_time_signal_cleanup(dvbpsi_sis_cmd_time_signal_t *p_cmd)=
=0D
+{=0D
+    if (p_cmd)=0D
+    {=0D
+        dvbpsi_sis_splice_time_t *p_splice_time =3D p_cmd->p_splice_time=
;=0D
+        while (p_splice_time !=3D NULL)=0D
+        {=0D
+            dvbpsi_sis_splice_time_t *p_next =3D p_splice_time->p_next;=0D=

+            free(p_splice_time);=0D
+            p_splice_time =3D p_next;=0D
+        }=0D
+        p_cmd->p_splice_time =3D NULL;=0D
+        free(p_cmd);=0D
+    }=0D
+}=0D
+=0D
+/***********************************************************************=
******=0D
+ * dvbpsi_sis_cmd_time_signal_decode=0D
+ ***********************************************************************=
******=0D
+ * time_signal command decoder.=0D
+ ***********************************************************************=
******/=0D
+static dvbpsi_sis_cmd_time_signal_t *=0D
+    dvbpsi_sis_cmd_time_signal_decode(uint8_t *p_data, uint16_t i_length=
)=0D
+{=0D
+    dvbpsi_sis_cmd_time_signal_t *p_cmd =3D calloc(1, sizeof(dvbpsi_sis_=
cmd_time_signal_t));=0D
+    if (!p_cmd) return NULL;=0D
+    =0D
+    if (i_length < 1)=0D
+    {=0D
+        cmd_time_signal_cleanup(p_cmd);=0D
+        return NULL;=0D
+    }=0D
+=0D
+    bool b_time_specified =3D false;=0D
+    uint64_t i_pts_time =3D 0;=0D
+    if ((p_data[0] & 0x80) =3D=3D 0x80)=0D
+    {=0D
+        if (i_length < 5)=0D
+        {=0D
+            cmd_time_signal_cleanup(p_cmd);=0D
+            return NULL;=0D
+        }=0D
+=0D
+        b_time_specified =3D true;=0D
+        i_pts_time =3D ((((uint64_t)p_data[0] & 0x01) << 32) |=0D
+                       ((uint64_t)p_data[1] << 24) |=0D
+                       ((uint64_t)p_data[2] << 16) |=0D
+                       ((uint64_t)p_data[3] << 8) |=0D
+                        (uint64_t)p_data[4]);=0D
+    }=0D
+    =0D
+    p_cmd->p_splice_time =3D calloc(1, sizeof(dvbpsi_sis_splice_time_t))=
;=0D
+    if (p_cmd->p_splice_time =3D=3D NULL)=0D
+    {=0D
+        cmd_time_signal_cleanup(p_cmd);=0D
+        return NULL;=0D
+    }=0D
+=0D
+    p_cmd->p_splice_time->b_time_specified_flag =3D b_time_specified;=0D=

+    p_cmd->p_splice_time->i_pts_time =3D i_pts_time;=0D
+    p_cmd->p_splice_time->p_next =3D NULL;=0D
+=0D
+    return p_cmd;=0D
+}=0D
+=0D
 /***********************************************************************=
******=0D
  * dvbpsi_sis_sections_decode=0D
  ***********************************************************************=
******=0D
@@ -695,28 +795,29 @@ void dvbpsi_sis_sections_decode(dvbpsi_t* p_dvbpsi,=
 dvbpsi_sis_t* p_sis,=0D
 =0D
     while (p_section)=0D
     {=0D
-        for (p_byte =3D p_section->p_payload_start + 3;=0D
-             p_byte + 14 < p_section->p_payload_end; )=0D
+        for (p_byte =3D p_section->p_payload_start;=0D
+             p_byte + 17 <=3D p_section->p_payload_end; )=0D
         {=0D
-            p_sis->i_protocol_version =3D p_byte[3];=0D
-            p_sis->b_encrypted_packet =3D ((p_byte[4] & 0x80) =3D=3D 0x8=
0);=0D
+            p_sis->i_protocol_version =3D p_byte[0];=0D
+            p_sis->b_encrypted_packet =3D ((p_byte[1] & 0x80) =3D=3D 0x8=
0);=0D
             /* NOTE: cannot handle encrypted packet */=0D
-            assert(p_sis->b_encrypted_packet);=0D
+            assert(!p_sis->b_encrypted_packet);=0D
             if (p_sis->b_encrypted_packet) {=0D
                 dvbpsi_error(p_dvbpsi, "SIS decoder", "cannot handle enc=
rypted packets");=0D
                 break;=0D
             }=0D
-            p_sis->i_encryption_algorithm =3D ((p_byte[4] & 0x7E) >> 1);=
=0D
-            p_sis->i_pts_adjustment =3D ((((uint64_t)p_byte[4] & 0x01) <=
< 32) |=0D
-                                        ((uint64_t)p_byte[5] << 24) |=0D=

-                                        ((uint64_t)p_byte[6] << 16) |=0D=

-                                        ((uint64_t)p_byte[7] << 8)  |=0D=

-                                         (uint64_t)p_byte[8]);=0D
-            p_sis->cw_index =3D p_byte[9];=0D
-            p_sis->i_splice_command_length =3D ((p_byte[11] & 0x0F) << 8=
) | p_byte[12];=0D
-            p_sis->i_splice_command_type =3D p_byte[13];=0D
-=0D
-            if ((p_byte + 14 + p_sis->i_splice_command_length) >=3D p_se=
ction->p_payload_end) {=0D
+            p_sis->i_encryption_algorithm =3D ((p_byte[1] & 0x7E) >> 1);=
=0D
+            p_sis->i_pts_adjustment =3D ((((uint64_t)p_byte[1] & 0x01) <=
< 32) |=0D
+                                        ((uint64_t)p_byte[2] << 24) |=0D=

+                                        ((uint64_t)p_byte[3] << 16) |=0D=

+                                        ((uint64_t)p_byte[4] << 8)  |=0D=

+                                         (uint64_t)p_byte[5]);=0D
+            p_sis->cw_index =3D p_byte[6];=0D
+            p_sis->i_tier =3D (p_byte[7] << 4) | (p_byte[8] >> 4);=0D
+            p_sis->i_splice_command_length =3D ((p_byte[8] & 0x0F) << 8)=
 | p_byte[9];=0D
+            p_sis->i_splice_command_type =3D p_byte[10];=0D
+=0D
+            if ((p_byte + 11 + p_sis->i_splice_command_length) >=3D p_se=
ction->p_payload_end) {=0D
                 dvbpsi_error(p_dvbpsi, "SIS decoder", "corrupt section d=
ata");=0D
                 break;=0D
             }=0D
@@ -730,7 +831,7 @@ void dvbpsi_sis_sections_decode(dvbpsi_t* p_dvbpsi, d=
vbpsi_sis_t* p_sis,=0D
                     break;=0D
                 case 0x04: /* splice_schedule */=0D
                     p_sis->p_splice_command =3D=0D
-                            dvbpsi_sis_cmd_splice_schedule_decode(&p_byt=
e[14],=0D
+                            dvbpsi_sis_cmd_splice_schedule_decode(&p_byt=
e[11],=0D
                                                 p_sis->i_splice_command_=
length);=0D
                     if (!p_sis->p_splice_command)=0D
                         dvbpsi_error(p_dvbpsi, "SIS decoder",=0D
@@ -738,13 +839,20 @@ void dvbpsi_sis_sections_decode(dvbpsi_t* p_dvbpsi,=
 dvbpsi_sis_t* p_sis,=0D
                     break;=0D
                 case 0x05: /* splice_insert */=0D
                     p_sis->p_splice_command =3D=0D
-                            dvbpsi_sis_cmd_splice_insert_decode(&p_byte[=
14],=0D
+                            dvbpsi_sis_cmd_splice_insert_decode(&p_byte[=
11],=0D
                             p_sis->i_splice_command_length);=0D
                     if (!p_sis->p_splice_command)=0D
                         dvbpsi_error(p_dvbpsi, "SIS decoder",=0D
                                     "splice insert command is invalid");=
=0D
                     break;=0D
                 case 0x06: /* time_signal */=0D
+                    p_sis->p_splice_command =3D=0D
+                            dvbpsi_sis_cmd_time_signal_decode(&p_byte[11=
],=0D
+                            p_sis->i_splice_command_length);=0D
+                    if (!p_sis->p_splice_command)=0D
+                        dvbpsi_error(p_dvbpsi, "SIS decoder",=0D
+                                     "time_signal command is invalid");=0D=

+                        break;=0D
                 case 0x07: /* bandwidth_reservation */=0D
                     break;=0D
                 default:=0D
@@ -753,13 +861,13 @@ void dvbpsi_sis_sections_decode(dvbpsi_t* p_dvbpsi,=
 dvbpsi_sis_t* p_sis,=0D
             }=0D
 =0D
             /* Service descriptors */=0D
-            uint8_t *p_desc =3D p_byte + 14 + p_sis->i_splice_command_le=
ngth;=0D
+            uint8_t *p_desc =3D p_byte + 11 + p_sis->i_splice_command_le=
ngth;=0D
             /* check our boundaries */=0D
             if (p_desc + 2 >=3D p_section->p_payload_end)=0D
                 break;=0D
             p_sis->i_descriptors_length =3D (p_desc[0] << 8) | p_desc[1]=
;=0D
 =0D
-            p_desc +=3D 1;=0D
+            p_desc +=3D 2;=0D
             p_end =3D p_desc + p_sis->i_descriptors_length;=0D
             if (p_end > p_section->p_payload_end) break;=0D
 =0D
=0D
=0D
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0D
src/tables/sis.h=0D
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0D
@@ -72,6 +72,8 @@ typedef struct dvbpsi_sis_s=0D
   uint64_t                  i_pts_adjustment;       /*!< PTS offset */=0D=

   uint8_t                   cw_index;               /*!< CA control word=
 */=0D
 =0D
+  uint16_t                  i_tier;                 /*!< authorization t=
iers */=0D
+=0D
   /* splice command */=0D
   uint16_t                  i_splice_command_length;/*!< Length of splic=
e command */=0D
   uint8_t                   i_splice_command_type;  /*!< Splice command =
type */=0D
=0D
=0D
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0D
src/tables/sis_private.h=0D
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0D
@@ -59,6 +59,27 @@ void dvbpsi_sis_sections_gather(dvbpsi_t* p_dvbpsi, dv=
bpsi_psi_section_t* p_sect=0D
 void dvbpsi_sis_sections_decode(dvbpsi_t* p_dvbpsi, dvbpsi_sis_t* p_sis,=
=0D
                                dvbpsi_psi_section_t* p_section);=0D
 =0D
+/***********************************************************************=
******=0D
+ * cmd_splice_schedule_cleanup=0D
+ ***********************************************************************=
******=0D
+ * Free resource for splice_schedule command structure.=0D
+ ***********************************************************************=
******/=0D
+static void cmd_splice_schedule_cleanup(dvbpsi_sis_cmd_splice_schedule_t=
 *p_cmd);=0D
+=0D
+/***********************************************************************=
******=0D
+ * cmd_splice_insert_cleanup=0D
+ ***********************************************************************=
******=0D
+ * Free resource for splice_insert command structure.=0D
+ ***********************************************************************=
******/=0D
+static void cmd_splice_insert_cleanup(dvbpsi_sis_cmd_splice_insert_t *p_=
cmd);=0D
+=0D
+/***********************************************************************=
******=0D
+ * cmd_time_signal_cleanup=0D
+ ***********************************************************************=
******=0D
+ * Free resource for time_signal command structure.=0D
+ ***********************************************************************=
******/=0D
+static void cmd_time_signal_cleanup(dvbpsi_sis_cmd_time_signal_t *p_cmd)=
;=0D
+=0D
 #else=0D
 #error "Multiple inclusions of sis_private.h"=0D
 #endif=0D
=0D
=0D
=0D
View it on GitLab: https://code.videolan.org/videolan/libdvbpsi/compare/3=
6d88fa6abe60d3acfd1b038ecf89fcbc102fed0...f186f4b9df2f75fbba7ea9257553bbc=
e1fd76e47=0D
=0D
-- =0D
View it on GitLab: https://code.videolan.org/videolan/libdvbpsi/compare/3=
6d88fa6abe60d3acfd1b038ecf89fcbc102fed0...f186f4b9df2f75fbba7ea9257553bbc=
e1fd76e47=0D
You're receiving this email because of your account on code.videolan.org.=
=0D
=0D
=0D

----==_mimepart_5dac68a78f1a2_851e3f9869d9a9e0989017--

--===============1449314694218610134==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: inline

X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGliZHZicHNp
LWRldmVsIG1haWxpbmcgbGlzdApsaWJkdmJwc2ktZGV2ZWxAdmlkZW9sYW4ub3JnCmh0dHBzOi8v
bWFpbG1hbi52aWRlb2xhbi5vcmcvbGlzdGluZm8vbGliZHZicHNpLWRldmVsCg==

--===============1449314694218610134==--