int merged_st;
} PESContext;
-extern AVInputFormat ff_mpegts_demuxer;
+extern const AVInputFormat ff_mpegts_demuxer;
static struct Program * get_program(MpegTSContext *ts, unsigned int programid)
{
static void new_data_packet(const uint8_t *buffer, int len, AVPacket *pkt)
{
- av_init_packet(pkt);
+ av_packet_unref(pkt);
pkt->data = (uint8_t *)buffer;
pkt->size = len;
}
{
uint8_t *sd;
- av_init_packet(pkt);
+ av_packet_unref(pkt);
pkt->buf = pes->buffer;
pkt->data = pes->buffer->data;
return AVERROR_INVALIDDATA;
if (channel_config_code <= 0x8) {
st->codecpar->extradata[9] = channels = channel_config_code ? channel_config_code : 2;
+ AV_WL32(&st->codecpar->extradata[12], 48000);
st->codecpar->extradata[18] = channel_config_code ? (channels > 2) : /* Dual Mono */ 255;
st->codecpar->extradata[19] = opus_stream_cnt[channel_config_code];
st->codecpar->extradata[20] = opus_coupled_stream_cnt[channel_config_code];
memcpy(&st->codecpar->extradata[21], opus_channel_map[channels - 1], channels);
+ st->codecpar->extradata_size = st->codecpar->extradata[18] ? 21 + channels : 19;
} else {
avpriv_request_sample(fc, "Opus in MPEG-TS - channel_config_code > 0x8");
}
if (!pes->st)
goto out;
pes->st->id = pes->pid;
- pes->st->program_num = h->id;
- pes->st->pmt_version = h->version;
- pes->st->pmt_stream_idx = i;
}
st = pes->st;
} else if (is_pes_stream(stream_type, prog_reg_desc)) {
if (!st)
goto out;
st->id = pes->pid;
- st->program_num = h->id;
- st->pmt_version = h->version;
- st->pmt_stream_idx = i;
}
} else {
int idx = ff_find_stream_index(ts->stream, pid);
if (!st)
goto out;
st->id = pid;
- st->program_num = h->id;
- st->pmt_version = h->version;
- st->pmt_stream_idx = i;
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);
int64_t *ppos, int64_t pos_limit)
{
MpegTSContext *ts = s->priv_data;
+ AVPacket *pkt;
int64_t pos;
int pos47 = ts->pos47_full % ts->raw_packet_size;
pos = ((*ppos + ts->raw_packet_size - 1 - pos47) / ts->raw_packet_size) * ts->raw_packet_size + pos47;
ff_read_frame_flush(s);
if (avio_seek(s->pb, pos, SEEK_SET) < 0)
return AV_NOPTS_VALUE;
+ pkt = av_packet_alloc();
+ if (!pkt)
+ return AV_NOPTS_VALUE;
while(pos < pos_limit) {
- int ret;
- AVPacket pkt;
- av_init_packet(&pkt);
- ret = av_read_frame(s, &pkt);
- if (ret < 0)
+ int ret = av_read_frame(s, pkt);
+ if (ret < 0) {
+ av_packet_free(&pkt);
return AV_NOPTS_VALUE;
- if (pkt.dts != AV_NOPTS_VALUE && pkt.pos >= 0) {
- ff_reduce_index(s, pkt.stream_index);
- av_add_index_entry(s->streams[pkt.stream_index], pkt.pos, pkt.dts, 0, 0, AVINDEX_KEYFRAME /* FIXME keyframe? */);
- if (pkt.stream_index == stream_index && pkt.pos >= *ppos) {
- int64_t dts = pkt.dts;
- *ppos = pkt.pos;
- av_packet_unref(&pkt);
+ }
+ if (pkt->dts != AV_NOPTS_VALUE && pkt->pos >= 0) {
+ ff_reduce_index(s, pkt->stream_index);
+ av_add_index_entry(s->streams[pkt->stream_index], pkt->pos, pkt->dts, 0, 0, AVINDEX_KEYFRAME /* FIXME keyframe? */);
+ if (pkt->stream_index == stream_index && pkt->pos >= *ppos) {
+ int64_t dts = pkt->dts;
+ *ppos = pkt->pos;
+ av_packet_free(&pkt);
return dts;
}
}
- pos = pkt.pos;
- av_packet_unref(&pkt);
+ pos = pkt->pos;
+ av_packet_unref(pkt);
}
+ av_packet_free(&pkt);
return AV_NOPTS_VALUE;
}
av_free(ts);
}
-AVInputFormat ff_mpegts_demuxer = {
+const AVInputFormat ff_mpegts_demuxer = {
.name = "mpegts",
.long_name = NULL_IF_CONFIG_SMALL("MPEG-TS (MPEG-2 Transport Stream)"),
.priv_data_size = sizeof(MpegTSContext),
.priv_class = &mpegts_class,
};
-AVInputFormat ff_mpegtsraw_demuxer = {
+const AVInputFormat ff_mpegtsraw_demuxer = {
.name = "mpegtsraw",
.long_name = NULL_IF_CONFIG_SMALL("raw MPEG-TS (MPEG-2 Transport Stream)"),
.priv_data_size = sizeof(MpegTSContext),