Exemplo n.º 1
0
/*****************************************************************************
 * dvbpsi_GenServiceListDr
 *****************************************************************************/
dvbpsi_descriptor_t * dvbpsi_GenServiceListDr(
		                        dvbpsi_service_list_dr_t * p_decoded,
                                        bool b_duplicate)
{
    /* Check the length */
    if (p_decoded->i_service_count > 63)
        return NULL;

    /* Create the descriptor */
    dvbpsi_descriptor_t * p_descriptor =
            dvbpsi_NewDescriptor(0x41, p_decoded->i_service_count*3, NULL);
    if (!p_descriptor)
        return NULL;

    /* Encode data */
    for (uint8_t i = 0; i < p_decoded->i_service_count; i++)
    {
        p_descriptor->p_data[i*3] = p_decoded->i_service[i].i_service_id >> 8;
        p_descriptor->p_data[i*3+1] = p_decoded->i_service[i].i_service_id;
        p_descriptor->p_data[i*3+2] = p_decoded->i_service[i].i_service_type;
    }

    if (b_duplicate)
    {
        /* Duplicate decoded data */
        p_descriptor->p_decoded =
               dvbpsi_DuplicateDecodedDescriptor(p_decoded,
                       sizeof(dvbpsi_service_list_dr_t));
    }

    return p_descriptor;
}
Exemplo n.º 2
0
/*****************************************************************************
 * dvbpsi_gen_dvb_nvod_ref_dr
 *****************************************************************************/
dvbpsi_descriptor_t * dvbpsi_gen_dvb_nvod_ref_dr(dvbpsi_dvb_nvod_ref_dr_t * p_decoded,
                                          bool b_duplicate)
{
    /* Create the descriptor */
    dvbpsi_descriptor_t * p_descriptor =
            dvbpsi_NewDescriptor(0x4b, p_decoded->i_references * 6, NULL);
    if (!p_descriptor)
        return NULL;

    if (p_decoded->i_references > 43)
	p_decoded->i_references = 43;

    /* Encode data */
    int pos = 0;
    for (int i = 0; i < p_decoded->i_references; i++ )
    {
    	p_descriptor->p_data[pos++] = p_decoded->p_nvod_refs[i].i_transport_stream_id >> 8;
        p_descriptor->p_data[pos++] = p_decoded->p_nvod_refs[i].i_transport_stream_id;
        p_descriptor->p_data[pos++] = p_decoded->p_nvod_refs[i].i_original_network_id >> 8;
        p_descriptor->p_data[pos++] = p_decoded->p_nvod_refs[i].i_original_network_id;
        p_descriptor->p_data[pos++] = p_decoded->p_nvod_refs[i].i_service_id >> 8;
        p_descriptor->p_data[pos++] = p_decoded->p_nvod_refs[i].i_service_id;
    }

    if (b_duplicate)
    {
        /* Duplicate decoded data */
        p_descriptor->p_decoded =
               dvbpsi_DuplicateDecodedDescriptor(p_decoded,
                      sizeof(dvbpsi_dvb_nvod_ref_dr_t));
    }

    return p_descriptor;
}
Exemplo n.º 3
0
/*****************************************************************************
 * dvbpsi_GenISO639Dr
 *****************************************************************************/
dvbpsi_descriptor_t * dvbpsi_GenISO639Dr(dvbpsi_iso639_dr_t * p_decoded,
                                         bool b_duplicate)
{
    if (p_decoded->i_code_count > 64)
        p_decoded->i_code_count = 64;

    /* Create the descriptor */
    dvbpsi_descriptor_t * p_descriptor =
            dvbpsi_NewDescriptor(0x0a, p_decoded->i_code_count * 4, NULL);
    if (!p_descriptor)
        return NULL;

    /* Encode data */
    int i = 0;
    while( i < p_decoded->i_code_count )
    {
        p_descriptor->p_data[i*4] = p_decoded->code[i].iso_639_code[0];
        p_descriptor->p_data[i*4+1] = p_decoded->code[i].iso_639_code[1];
        p_descriptor->p_data[i*4+2] = p_decoded->code[i].iso_639_code[2];
        p_descriptor->p_data[i*4+3] = p_decoded->code[i].i_audio_type;
        i++;
    }

    if (b_duplicate)
    {
        /* Duplicate decoded data */
        p_descriptor->p_decoded =
                dvbpsi_DuplicateDecodedDescriptor(p_decoded,
                                                  sizeof(dvbpsi_iso639_dr_t));
    }

    return p_descriptor;
}
Exemplo n.º 4
0
/*****************************************************************************
 * dvbpsi_GenCADr
 *****************************************************************************/
dvbpsi_descriptor_t * dvbpsi_GenCADr(dvbpsi_ca_dr_t * p_decoded,
                                     bool b_duplicate)
{
    if (p_decoded->i_private_length > 251)
        p_decoded->i_private_length = 251;

    /* Create the descriptor */
    dvbpsi_descriptor_t * p_descriptor =
            dvbpsi_NewDescriptor(0x09, p_decoded->i_private_length + 4, NULL);
    if (!p_descriptor)
        return NULL;

    /* Encode data */
    p_descriptor->p_data[0] = p_decoded->i_ca_system_id >> 8;
    p_descriptor->p_data[1] = p_decoded->i_ca_system_id;
    p_descriptor->p_data[2] = 0xe0 | ((p_decoded->i_ca_pid >> 8) & 0x1f);
    p_descriptor->p_data[3] = p_decoded->i_ca_pid;
    if (p_decoded->i_private_length)
        memcpy(p_descriptor->p_data + 4,
               p_decoded->i_private_data,
               p_decoded->i_private_length);

    if (b_duplicate)
    {
        /* Duplicate decoded data */
        p_descriptor->p_decoded =
                dvbpsi_DuplicateDecodedDescriptor(p_decoded,
                                                  sizeof(dvbpsi_ca_dr_t));
    }

    return p_descriptor;
}
Exemplo n.º 5
0
/*****************************************************************************
 * dvbpsi_GenComponentDr
 *****************************************************************************/
dvbpsi_descriptor_t *dvbpsi_GenComponentDr(dvbpsi_component_dr_t * p_decoded,
                                                  bool b_duplicate)
{
    /* Create the descriptor */
    dvbpsi_descriptor_t * p_descriptor =
            dvbpsi_NewDescriptor(0x50, 6+p_decoded->i_text_length, NULL);
    if (!p_descriptor)
        return NULL;

    /* Encode data */
	p_descriptor->p_data[0] = p_decoded->i_stream_content+0xF0;
    p_descriptor->p_data[1] = p_decoded->i_component_type;
    p_descriptor->p_data[2] = p_decoded->i_component_tag;
    memcpy( &p_descriptor->p_data[3], p_decoded->i_iso_639_code, 3 );
    if (p_decoded->i_text_length)
      memcpy(&p_descriptor->p_data[6],p_decoded->i_text,p_decoded->i_text_length);

    if (b_duplicate)
    {
        /* Duplicate decoded data */
        p_descriptor->p_decoded =
               dvbpsi_DuplicateDecodedDescriptor(p_decoded,
                      sizeof(dvbpsi_component_dr_t));
    }

    return p_descriptor;
}
Exemplo n.º 6
0
/*****************************************************************************
 * dvbpsi_gen_mpeg_private_data_dr
 *****************************************************************************/
dvbpsi_descriptor_t * dvbpsi_gen_mpeg_private_data_dr(
    dvbpsi_mpeg_private_data_dr_t * p_decoded,
    bool b_duplicate)
{
    /* Create the descriptor */
    dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(0x0f, 4, NULL);
    if (!p_descriptor)
        return NULL;

    /* Encode data */
    p_descriptor->p_data[0] = p_decoded->i_private_data >> 24;
    p_descriptor->p_data[1] = p_decoded->i_private_data >> 16;
    p_descriptor->p_data[2] = p_decoded->i_private_data >> 8;
    p_descriptor->p_data[3] = p_decoded->i_private_data;

    if (b_duplicate)
    {
        /* Duplicate decoded data */
        p_descriptor->p_decoded =
            dvbpsi_DuplicateDecodedDescriptor(p_decoded,
                                              sizeof(dvbpsi_mpeg_private_data_dr_t));
    }

    return p_descriptor;
}
Exemplo n.º 7
0
/*****************************************************************************
 * dvbpsi_GenCAIdentifierDr
 *****************************************************************************/
dvbpsi_descriptor_t * dvbpsi_GenCAIdentifierDr(dvbpsi_ca_identifier_dr_t *p_decoded,
                                               bool b_duplicate)
{
    if (p_decoded->i_number > DVBPSI_CA_SYSTEM_ID_DR_MAX)
        p_decoded->i_number = DVBPSI_CA_SYSTEM_ID_DR_MAX;

    /* Create the descriptor */
    dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(0x53, p_decoded->i_number * 2, NULL);
    if (!p_descriptor)
        return NULL;

    /* Encode data */
    for (int i = 0; i < p_decoded->i_number; i++ )
    {
        p_descriptor->p_data[2 * i] = p_decoded->p_system[i].i_ca_system_id >> 8;
        p_descriptor->p_data[2 * i + 1] = p_decoded->p_system[i].i_ca_system_id;
    }

    if (b_duplicate)
    {
        /* Duplicate decoded data */
        p_descriptor->p_decoded =
                dvbpsi_DuplicateDecodedDescriptor(p_decoded,
                                                  sizeof(dvbpsi_ca_identifier_dr_t));
    }

    return p_descriptor;
}
Exemplo n.º 8
0
/*****************************************************************************
 * dvbpsi_gen_mpeg_iso639_dr
 *****************************************************************************/
dvbpsi_descriptor_t * dvbpsi_gen_mpeg_iso639_dr(dvbpsi_mpeg_iso639_dr_t * p_decoded,
                                         bool b_duplicate)
{
    if (p_decoded->i_code_count > 64)
        p_decoded->i_code_count = 64;

    /* Create the descriptor */
    uint8_t i_size = (p_decoded->i_code_count * 4) > UINT8_MAX ? 255 : p_decoded->i_code_count * 4;
    dvbpsi_descriptor_t * p_descriptor =
            dvbpsi_NewDescriptor(0x0a, i_size, NULL);
    if (!p_descriptor)
        return NULL;

    /* Encode data */
    int i = 0;
    while( i < p_decoded->i_code_count )
    {
        p_descriptor->p_data[i*4] = p_decoded->code[i].iso_639_code[0];
        p_descriptor->p_data[i*4+1] = p_decoded->code[i].iso_639_code[1];
        p_descriptor->p_data[i*4+2] = p_decoded->code[i].iso_639_code[2];
        p_descriptor->p_data[i*4+3] = p_decoded->code[i].i_audio_type;
        i++;
    }

    if (b_duplicate)
    {
        /* Duplicate decoded data */
        p_descriptor->p_decoded =
                dvbpsi_DuplicateDecodedDescriptor(p_decoded,
                                                  sizeof(dvbpsi_mpeg_iso639_dr_t));
    }

    return p_descriptor;
}
Exemplo n.º 9
0
/*****************************************************************************
 * dvbpsi_gen_dvb_country_availability_dr
 *****************************************************************************/
dvbpsi_descriptor_t * dvbpsi_gen_dvb_country_availability_dr(
		                        dvbpsi_dvb_country_availability_dr_t * p_decoded,
                                        bool b_duplicate)
{
    /* Check the length */    
    if (p_decoded->i_code_count > 83) 
        return NULL;

    /* Create the descriptor */
    dvbpsi_descriptor_t * p_descriptor =
            dvbpsi_NewDescriptor(0x83, 1+p_decoded->i_code_count*3, NULL);
    if (!p_descriptor)
        return NULL;

    /* Encode data */
    p_descriptor->p_data[0] = (p_decoded->b_country_availability_flag) ? 0x80: 0x00;

    for (uint8_t i = 0; i < p_decoded->i_code_count; i++)
    {
        p_descriptor->p_data[1+i*3] = p_decoded->code[i].iso_639_code[0];
        p_descriptor->p_data[2+i*3] = p_decoded->code[i].iso_639_code[1];
        p_descriptor->p_data[3+i*3] = p_decoded->code[i].iso_639_code[2];
    }

    if (b_duplicate)
    {
        /* Duplicate decoded data */
        p_descriptor->p_decoded =
               dvbpsi_DuplicateDecodedDescriptor(p_decoded,
                      sizeof(dvbpsi_dvb_country_availability_dr_t));
    }

    return p_descriptor;
}
Exemplo n.º 10
0
/*****************************************************************************
 * dvbpsi_GenNetworkNameDr
 *****************************************************************************/
dvbpsi_descriptor_t * dvbpsi_GenNetworkNameDr(
                                        dvbpsi_network_name_dr_t * p_decoded,
                                        bool b_duplicate)
{
    if (p_decoded->i_name_length > 255)
        p_decoded->i_name_length = 255;

    /* Create the descriptor */
    dvbpsi_descriptor_t * p_descriptor =
            dvbpsi_NewDescriptor(0x40, p_decoded->i_name_length, NULL);
    if (!p_descriptor)
        return NULL;

    /* Encode data */
    if (p_decoded->i_name_length)
        memcpy(p_descriptor->p_data,
               p_decoded->i_name_byte,
               p_decoded->i_name_length);

    if (b_duplicate)
    {
        /* Duplicate decoded data */
        p_descriptor->p_decoded =
                dvbpsi_DuplicateDecodedDescriptor(p_decoded,
                                                  sizeof(dvbpsi_network_name_dr_t));
    }

    return p_descriptor;
}
Exemplo n.º 11
0
/*****************************************************************************
 * dvbpsi_gen_dvb_subtitling_dr
 *****************************************************************************/
dvbpsi_descriptor_t * dvbpsi_gen_dvb_subtitling_dr(
                                        dvbpsi_dvb_subtitling_dr_t * p_decoded,
                                        bool b_duplicate)
{
    if (p_decoded->i_subtitles_number > DVBPSI_SUBTITLING_DR_MAX)
        p_decoded->i_subtitles_number = DVBPSI_SUBTITLING_DR_MAX;

    /* Create the descriptor */
    dvbpsi_descriptor_t * p_descriptor =
            dvbpsi_NewDescriptor(0x59, p_decoded->i_subtitles_number * 8 , NULL);
    if (!p_descriptor)
        return NULL;

    /* Encode data */
    for (int i = 0; i < p_decoded->i_subtitles_number; i++ )
    {
        memcpy( p_descriptor->p_data + 8 * i,
                p_decoded->p_subtitle[i].i_iso6392_language_code,
                3);

        p_descriptor->p_data[8 * i + 3] =
                p_decoded->p_subtitle[i].i_subtitling_type;

        p_descriptor->p_data[8 * i + 4] =
                p_decoded->p_subtitle[i].i_composition_page_id >> 8;
        p_descriptor->p_data[8 * i + 5] =
                p_decoded->p_subtitle[i].i_composition_page_id & 0xFF;

        p_descriptor->p_data[8 * i + 6] =
                p_decoded->p_subtitle[i].i_ancillary_page_id >> 8;
        p_descriptor->p_data[8 * i + 7] =
                p_decoded->p_subtitle[i].i_ancillary_page_id & 0xFF;
    }

    if (b_duplicate)
    {
        /* Duplicate decoded data */
        p_descriptor->p_decoded =
                dvbpsi_DuplicateDecodedDescriptor(p_decoded,
                                                  sizeof(dvbpsi_dvb_subtitling_dr_t));
    }

    return p_descriptor;
}
Exemplo n.º 12
0
/*****************************************************************************
 * dvbpsi_GenParentalRatingDr
 *****************************************************************************/
dvbpsi_descriptor_t * dvbpsi_GenParentalRatingDr(
                                        dvbpsi_parental_rating_dr_t * p_decoded,
                                        bool b_duplicate)
{
    uint8_t i_length;
    if (p_decoded->i_ratings_number >= DVBPSI_PARENTAL_RATING_DR_MAX)
    {
        i_length = (DVBPSI_PARENTAL_RATING_DR_MAX - 1) * 4;
        p_decoded->i_ratings_number = DVBPSI_PARENTAL_RATING_DR_MAX;
    }
    else
        i_length = p_decoded->i_ratings_number * 4;

    /* Create the descriptor */
    dvbpsi_descriptor_t * p_descriptor =
            dvbpsi_NewDescriptor(0x55, i_length, NULL);

    if (!p_descriptor)
        return NULL;

    /* Encode data */
    for (int i = 0; i < p_decoded->i_ratings_number; i++ )
    {
        p_descriptor->p_data[4 * i] =
                p_decoded->p_parental_rating[i].i_country_code >> 16;
        p_descriptor->p_data[4 * i + 1] =
                (p_decoded->p_parental_rating[i].i_country_code >> 8) & 0xff;
        p_descriptor->p_data[4 * i + 2] =
                p_decoded->p_parental_rating[i].i_country_code & 0xff;

        p_descriptor->p_data[4 * i + 3] =
                p_decoded->p_parental_rating[i].i_rating;
    }

    if (b_duplicate)
    {
        /* Duplicate decoded data */
        p_descriptor->p_decoded =
                dvbpsi_DuplicateDecodedDescriptor(p_decoded,
                                                  sizeof(dvbpsi_parental_rating_dr_t));
    }

    return p_descriptor;
}
Exemplo n.º 13
0
/*****************************************************************************
 * dvbpsi_GenCUEIDr
 *****************************************************************************/
dvbpsi_descriptor_t * dvbpsi_GenCUEIDr(dvbpsi_cuei_dr_t * p_decoded, bool b_duplicate)
{
    /* Create the descriptor */
    dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(0x8a, 0x01, NULL);
    if (!p_descriptor)
        return NULL;

    /* Encode data */
    p_descriptor->p_data[0] = p_decoded->i_cue_stream_type;

    if (b_duplicate)
    {
        /* Duplicate decoded data */
        p_descriptor->p_decoded =
            dvbpsi_DuplicateDecodedDescriptor(p_decoded,
                                              sizeof(dvbpsi_cuei_dr_t));
    }

    return p_descriptor;
}
Exemplo n.º 14
0
/*****************************************************************************
 * dvbpsi_gen_dvb_terr_deliv_sys_dr
 *****************************************************************************/
dvbpsi_descriptor_t * dvbpsi_gen_dvb_terr_deliv_sys_dr(
                                        dvbpsi_dvb_terr_deliv_sys_dr_t * p_decoded,
                                        bool b_duplicate)
{
    /* Create the descriptor */
    dvbpsi_descriptor_t * p_descriptor = dvbpsi_NewDescriptor(0x5a, 11, NULL);
    if (!p_descriptor)
        return NULL;

    /* Encode data */
    p_descriptor->p_data[0]  =   (p_decoded->i_centre_frequency >> 24) & 0xff;
    p_descriptor->p_data[1]  =   (p_decoded->i_centre_frequency >> 16) & 0xff;
    p_descriptor->p_data[2]  =   (p_decoded->i_centre_frequency >>  8) & 0xff;
    p_descriptor->p_data[3]  =    p_decoded->i_centre_frequency        & 0xff;
    p_descriptor->p_data[4]  =   (p_decoded->i_bandwidth               & 0x07) << 5
                               | (p_decoded->i_priority                & 0x01) << 4
                               | (p_decoded->i_time_slice_indicator    & 0x01) << 3
                               | (p_decoded->i_mpe_fec_indicator       & 0x01) << 2
                               | 0x03;
    p_descriptor->p_data[5]  =   (p_decoded->i_constellation           & 0x03) << 6
                               | (p_decoded->i_hierarchy_information   & 0x07) << 3
                               | (p_decoded->i_code_rate_hp_stream     & 0x07);
    p_descriptor->p_data[6]  =   (p_decoded->i_code_rate_lp_stream     & 0x07) << 5
                               | (p_decoded->i_guard_interval          & 0x03) << 3
                               | (p_decoded->i_transmission_mode       & 0x03) << 1
                               | (p_decoded->i_other_frequency_flag    & 0x01);
    p_descriptor->p_data[7]  =   0xff;
    p_descriptor->p_data[8]  =   0xff;
    p_descriptor->p_data[9]  =   0xff;
    p_descriptor->p_data[10] =   0xff;

    if (b_duplicate)
    {
        /* Duplicate decoded data */
        p_descriptor->p_decoded =
                dvbpsi_DuplicateDecodedDescriptor(p_decoded,
                                                  sizeof(dvbpsi_dvb_terr_deliv_sys_dr_t));
    }

    return p_descriptor;
}
Exemplo n.º 15
0
/*****************************************************************************
 * dvbpsi_GenServiceLocationDr
 *****************************************************************************/
dvbpsi_descriptor_t* dvbpsi_GenServiceLocationDr(
                                        dvbpsi_service_location_dr_t* p_decoded,
                                        bool b_duplicate)
{
    if (p_decoded->i_number_elements > 42)
        p_decoded->i_number_elements = 42;

    uint8_t i_desc_length = 3 + p_decoded->i_number_elements * 6;
    dvbpsi_descriptor_t* p_descriptor = dvbpsi_NewDescriptor(0xa1, i_desc_length, NULL);
    if (!p_descriptor)
        return NULL;

    uint8_t* p_data = p_descriptor->p_data;
    p_data[0] = p_decoded->i_pcr_pid >> 8;
    p_data[1] = p_decoded->i_pcr_pid;
    p_data[2] = p_decoded->i_number_elements;

    p_data += 3;
    for (uint8_t i = 0; i < p_decoded->i_number_elements; ++i)
    {
        dvbpsi_service_location_element_t p_es = p_decoded->elements[i];
        uint8_t* p_es_data = p_data;
        p_es_data[0] = p_es.i_stream_type;
        p_es_data[1] = p_es.i_elementary_pid >> 8;
        p_es_data[2] = p_es.i_elementary_pid;
        p_es_data[3] = p_es.i_iso_639_code[0];
        p_es_data[4] = p_es.i_iso_639_code[1];
        p_es_data[5] = p_es.i_iso_639_code[2];

        p_data += 6;
    }

    if (b_duplicate)
    {
        p_descriptor->p_decoded = dvbpsi_DuplicateDecodedDescriptor(p_decoded,
                                         sizeof(dvbpsi_service_location_dr_t));
    }

    return p_descriptor;
}
Exemplo n.º 16
0
/*****************************************************************************
 * dvbpsi_GenTimeShiftedEventDr
 *****************************************************************************/
dvbpsi_descriptor_t *dvbpsi_GenTimeShiftedEventDr(dvbpsi_tshifted_ev_dr_t * p_decoded,
                                                  bool b_duplicate) {
    /* Create the descriptor */
    dvbpsi_descriptor_t * p_descriptor =
            dvbpsi_NewDescriptor(0x4f, 4, NULL);
    if (!p_descriptor)
        return NULL;

    /* Encode data */
	p_descriptor->p_data[0] = p_decoded->i_ref_service_id >> 8;
    p_descriptor->p_data[1] = p_decoded->i_ref_service_id;
	p_descriptor->p_data[2] = p_decoded->i_ref_event_id >> 8;
    p_descriptor->p_data[3] = p_decoded->i_ref_event_id;

    if (b_duplicate)
    {
        /* Duplicate decoded data */
        p_descriptor->p_decoded =
               dvbpsi_DuplicateDecodedDescriptor(p_decoded,
                      sizeof(dvbpsi_tshifted_ev_dr_t));
    }

    return p_descriptor;
}
Exemplo n.º 17
0
/*****************************************************************************
 * dvbpsi_GenAACDr
 *****************************************************************************/
dvbpsi_descriptor_t *dvbpsi_GenAACDr(dvbpsi_aac_dr_t *p_decoded, bool b_duplicate)
{
    /* Create the descriptor */
    uint8_t i_length = p_decoded->b_type ? 3 + p_decoded->i_additional_info_length : 1;
    dvbpsi_descriptor_t *p_descriptor = dvbpsi_NewDescriptor(0x7c, i_length, NULL);
    if (!p_descriptor)
        return NULL;

    /* Encode data */
    p_descriptor->p_data[0] = dvbpsi_aac_profile_and_level_to_hex(p_decoded->i_profile_and_level);

    if (p_descriptor->i_length > 1)
    {
        p_descriptor->p_data[1]  = 0x00;
        p_descriptor->p_data[1] |= ((p_decoded->b_type ? 1: 0) << 7);
    }

    if (p_decoded->b_type)
        p_descriptor->p_data[2] = dvbpsi_aac_type_to_hex(p_decoded->i_type);

    /* Store additional info bytes field */
    if (p_descriptor->i_length > 1)
    {
        uint8_t *p = &p_descriptor->p_data[p_decoded->b_type ? 3 : 2];
        memcpy(&p, p_decoded->p_additional_info, p_decoded->i_additional_info_length);
    }

    if (b_duplicate)
    {
        /* Duplicate decoded data */
        p_descriptor->p_decoded =
                dvbpsi_DuplicateDecodedDescriptor(p_decoded, sizeof(dvbpsi_aac_dr_t));
    }

    return p_descriptor;
}