{ 0 },
};
+/* SCTE types */
+static const StreamType SCTE_types[] = {
+ { 0x86, AVMEDIA_TYPE_DATA, AV_CODEC_ID_SCTE_35 },
+ { 0 },
+};
+
/* ATSC ? */
static const StreamType MISC_types[] = {
{ 0x81, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_AC3 },
av_buffer_unref(&pes->buffer);
}
+static void new_data_packet(const uint8_t *buffer, int len, AVPacket *pkt)
+{
+ av_init_packet(pkt);
+ pkt->data = buffer;
+ pkt->size = len;
+}
+
static int new_pes_packet(PESContext *pes, AVPacket *pkt)
{
char *sd;
av_free(mp4_descr[i].dec_config_descr);
}
+static void scte_data_cb(MpegTSFilter *filter, const uint8_t *section,
+ int section_len)
+{
+ AVProgram *prg = NULL;
+ MpegTSContext *ts = filter->u.section_filter.opaque;
+
+ int idx = ff_find_stream_index(ts->stream, filter->pid);
+ new_data_packet(section, section_len, ts->pkt);
+ if (idx >= 0) {
+ ts->pkt->stream_index = idx;
+ }
+ prg = av_find_program_from_stream(ts->stream, NULL, idx);
+ if (prg && prg->pcr_pid != -1 && prg->discard != AVDISCARD_ALL) {
+ MpegTSFilter *f = ts->pids[prg->pcr_pid];
+ if (f)
+ ts->pkt->pts = ts->pkt->dts = f->last_pcr/300;
+ }
+ ts->stop_parse = 1;
+
+}
+
static const uint8_t opus_coupled_stream_cnt[9] = {
1, 0, 1, 1, 2, 2, 2, 3, 3
};
return 0;
}
+static int is_pes_stream(int stream_type, uint32_t prog_reg_desc)
+{
+ return !(stream_type == 0x13 ||
+ (stream_type == 0x86 && prog_reg_desc == AV_RL32("CUEI")) );
+}
+
static void pmt_cb(MpegTSFilter *filter, const uint8_t *section, int section_len)
{
MpegTSContext *ts = filter->u.section_filter.opaque;
pes->st->id = pes->pid;
}
st = pes->st;
- } else if (stream_type != 0x13) {
+ } else if (is_pes_stream(stream_type, prog_reg_desc)) {
if (ts->pids[pid])
mpegts_close_filter(ts, ts->pids[pid]); // wrongly added sdt filter probably
pes = add_pes_stream(ts, pid, pcr_pid);
goto out;
st->id = pid;
st->codecpar->codec_type = AVMEDIA_TYPE_DATA;
+ if (stream_type == 0x86 && prog_reg_desc == AV_RL32("CUEI")) {
+ mpegts_find_stream_type(st, stream_type, SCTE_types);
+ mpegts_open_section_filter(ts, pid, scte_data_cb, ts, 1);
+ }
}
}