Message ID | 5F93D188-F455-4DA5-8110-0358B4CD398A@mac.com |
---|---|
State | New |
Headers | show |
> Hi > > I needed to be able to use the write_data_type callback when reading data from the mpegts muxer, to make my application aware of key frames in the data so I added support. I used the matroska implementation as a reference. > > If this is accepted, I will format this as a proper patch after feedback. > > Regards > > Oliver > > diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c > index fc0ea225c6..e5d1a64b4c 100644 > --- a/libavformat/mpegtsenc.c > +++ b/libavformat/mpegtsenc.c > @@ -1815,6 +1815,12 @@ static int mpegts_write_packet(AVFormatContext *s, AVPacket *pkt) > mpegts_write_flush(s); > return 1; > } else { > + if (s->pb && s->pb->write_data_type) { > + AVStream *st = s->streams[pkt->stream_index]; > + avio_write_marker(s->pb, > + av_rescale_q(pkt->dts, st->time_base, AV_TIME_BASE_Q), > + (pkt->flags & AV_PKT_FLAG_KEY) && st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO ? AVIO_DATA_MARKER_SYNC_POINT : AVIO_DATA_MARKER_BOUNDARY_POINT); > + } > return mpegts_write_packet_internal(s, pkt); > } > } > So I've created a patch for this.
[Apols for sending this again, but I realised the subject didn't describe the change, which was unhelpful) This patch makes it possible to do stuff like write a custom in-memory TS segmenter, which was what I needed it for. > Hi > > I needed to be able to use the write_data_type callback when reading data from the mpegts muxer, to make my application aware of key frames in the data so I added support. I used the matroska implementation as a reference. > > If this is accepted, I will format this as a proper patch after feedback. > > Regards > > Oliver > > diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c > index fc0ea225c6..e5d1a64b4c 100644 > --- a/libavformat/mpegtsenc.c > +++ b/libavformat/mpegtsenc.c > @@ -1815,6 +1815,12 @@ static int mpegts_write_packet(AVFormatContext *s, AVPacket *pkt) > mpegts_write_flush(s); > return 1; > } else { > + if (s->pb && s->pb->write_data_type) { > + AVStream *st = s->streams[pkt->stream_index]; > + avio_write_marker(s->pb, > + av_rescale_q(pkt->dts, st->time_base, AV_TIME_BASE_Q), > + (pkt->flags & AV_PKT_FLAG_KEY) && st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO ? AVIO_DATA_MARKER_SYNC_POINT : AVIO_DATA_MARKER_BOUNDARY_POINT); > + } > return mpegts_write_packet_internal(s, pkt); > } > } > So I've created a patch for this.
> > This patch makes it possible to do stuff like write a custom in-memory TS segmenter, which was what I needed it for. > >> Hi >> >> I needed to be able to use the write_data_type callback when reading data from the mpegts muxer, to make my application aware of key frames in the data so I added support. I used the matroska implementation as a reference. >> >> If this is accepted, I will format this as a proper patch after feedback. >> >> Regards >> >> Oliver >> >> diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c >> index fc0ea225c6..e5d1a64b4c 100644 >> --- a/libavformat/mpegtsenc.c >> +++ b/libavformat/mpegtsenc.c >> @@ -1815,6 +1815,12 @@ static int mpegts_write_packet(AVFormatContext *s, AVPacket *pkt) >> mpegts_write_flush(s); >> return 1; >> } else { >> + if (s->pb && s->pb->write_data_type) { >> + AVStream *st = s->streams[pkt->stream_index]; >> + avio_write_marker(s->pb, >> + av_rescale_q(pkt->dts, st->time_base, AV_TIME_BASE_Q), >> + (pkt->flags & AV_PKT_FLAG_KEY) && st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO ? AVIO_DATA_MARKER_SYNC_POINT : AVIO_DATA_MARKER_BOUNDARY_POINT); >> + } >> return mpegts_write_packet_internal(s, pkt); >> } >> } >> > > So I've created a patch for this. > > <0001-mpegtsenc-added-support-for-the-write_data_type-call.patch> And how about this one, can this be pushed too? I'm unsure of the etiquette with a ping message like this, sorry if I offend anyone, but it's been over a week and I guess that means it was forgotten?
> > This patch makes it possible to do stuff like write a custom in-memory TS segmenter, which was what I needed it for. > >> Hi >> >> I needed to be able to use the write_data_type callback when reading data from the mpegts muxer, to make my application aware of key frames in the data so I added support. I used the matroska implementation as a reference. >> >> If this is accepted, I will format this as a proper patch after feedback. >> >> Regards >> >> Oliver >> >> diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c >> index fc0ea225c6..e5d1a64b4c 100644 >> --- a/libavformat/mpegtsenc.c >> +++ b/libavformat/mpegtsenc.c >> @@ -1815,6 +1815,12 @@ static int mpegts_write_packet(AVFormatContext *s, AVPacket *pkt) >> mpegts_write_flush(s); >> return 1; >> } else { >> + if (s->pb && s->pb->write_data_type) { >> + AVStream *st = s->streams[pkt->stream_index]; >> + avio_write_marker(s->pb, >> + av_rescale_q(pkt->dts, st->time_base, AV_TIME_BASE_Q), >> + (pkt->flags & AV_PKT_FLAG_KEY) && st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO ? AVIO_DATA_MARKER_SYNC_POINT : AVIO_DATA_MARKER_BOUNDARY_POINT); >> + } >> return mpegts_write_packet_internal(s, pkt); >> } >> } >> > > So I've created a patch for this. > > <0001-mpegtsenc-added-support-for-the-write_data_type-call.patch> Ping, for this really trivial patch.
diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c index fc0ea225c6..e5d1a64b4c 100644 --- a/libavformat/mpegtsenc.c +++ b/libavformat/mpegtsenc.c @@ -1815,6 +1815,12 @@ static int mpegts_write_packet(AVFormatContext *s, AVPacket *pkt) mpegts_write_flush(s); return 1; } else { + if (s->pb && s->pb->write_data_type) { + AVStream *st = s->streams[pkt->stream_index]; + avio_write_marker(s->pb, + av_rescale_q(pkt->dts, st->time_base, AV_TIME_BASE_Q), + (pkt->flags & AV_PKT_FLAG_KEY) && st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO ? AVIO_DATA_MARKER_SYNC_POINT : AVIO_DATA_MARKER_BOUNDARY_POINT); + } return mpegts_write_packet_internal(s, pkt); } }