[FFmpeg-devel] [PATCH] DVB EPG decoder
Marton Balint
cus at passwd.hu
Sat Aug 24 21:09:32 EEST 2019
On Fri, 23 Aug 2019, Anthony Delannoy wrote:
>> I think we should only merge the part of this patchset which makes the EIT
>> available as a data stream. Parsing the whole EIT or dumping the data as
>> ASCII is not libavcodec's or libavutil's job.
>
> The EPG decoder does not change the table's data, it just store them
> and it happens to
> contains text sometimes.
> Some utilites functions I made in libavutil/dvb can convert those raw
> data in text
> description(s) for certain descriptors.
>
>> Also there is no such concept in libavcodec as a data decoder, if something happens to
>> work with avcodec_send_packet/avcodec_receive_frame that is mostly luck I
>> believe.
>
> avcodec_send_packet and avcodec_receive_frame both call
> AVCodec::receive_frame if it is
> implemented. That's why my implementation of the EPG decoder does
> contain this function.
>
> For now my test scripts consists to:
> ```
> 99 if (st->codecpar->codec_id != AV_CODEC_ID_EPG)
> 100 goto free_pkt;
> 101
> 102 ret = avcodec_send_packet(dec_ctx, &pkt);
> ...
> 112 while (1) {
> 113 ret = avcodec_receive_frame(dec_ctx, frame);
> 114 if (ret < 0)
> 115 break;
> 116
> 117 for (int i = 0; i < frame->nb_side_data; i++) {
> 118 AVFrameSideData *sd = frame->side_data[i];
> 119 if (sd && sd->type == AV_FRAME_DATA_EPG_TABLE) {
> 120 EPGTable *table = sd->data;
> 121 av_epg_show_table(table, AV_LOG_WARNING);
> 122 }
> 123 }
> 124 av_frame_unref(frame);
> 125 }
> 126
> 127 free_pkt:
> 128 av_packet_unref(&pkt);
> ```
> It works as intended and permits to decode EPGTable without issues, I
> tried on multiple channels.
>
> I wanted to permit the table decoding and not just an EPG data stream
> to permit easy reading
> and in the future easy modification before encoding EPG back.
>
>> I am also not sure if we should add the EIT PID to all programs, that
>> would mess up the direct relation between a PMT and an AVProgram, and we
>> probably don't want that. So I'd rather see the EIT data stream as a
>> standalone PID separate from the programs.
>
> I'm not an expert but I think each service/program contains a PMT
> table and all others. So one
> EPG stream (if available) for each service.
> That's what I understood from the ETSI EN 300 468 V1.16.1
The EPG stream is a single stream in the whole TS, it is on a single PID.
The PMTs do not reference the EIT PID, therefore we should not make the
EPG stream part of the programs, even if the EPG stream can contain the
schedule of the programs.
Regards,
Marton
More information about the ffmpeg-devel
mailing list