[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'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 '00' or &= #39;10'.=0D =0D - - - - -=0D 26e371dd by Olivier Braun at 2019-10-18T14:27:16Z=0D SIS also has b_syntax_indicator set to '0'=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 '0', then only the f= ields 'table_id' through 'private_section_length' 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->p_payload_start =3D p_section->p_data + 3;`=0D =0D p_section->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==--