Andreas Rheinhardt: > Andreas Rheinhardt: >> Andreas Rheinhardt: >>> Andreas Rheinhardt: >>>> When vobsub_read_packet() reads a packet, it uses a dedicated AVPacket >>>> to get the subtitle timing and position from an FFDemuxSubtitlesQueue >>>> (which has been filled with this data during reading the idx file in >>>> vobsub_read_header); afterwards the actual subtitle data is read into >>>> the packet destined for output and the timing and position are copied >>>> to this packet. Afterwards, the local packet is unreferenced. >>>> >>>> This can be simplified: Simply use the output packet to get the timing >>>> and position from the FFDemuxSubtitlesQueue. The packet's size will be >>>> zero afterwards, so that it can be directly used to read the actual >>>> subtitle data. This makes copying the packet fields as well as >>>> unreferencing the local packet unecessary and also removes an instance >>>> of usage of sizeof(AVPacket) in libavformat. >>>> >>>> The only difference is that the returned packet will already be flagged >>>> as a keyframe. This currently only happens in compute_pkt_fields(). >>>> >>>> Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@gmail.com> >>>> --- >>>> libavformat/mpeg.c | 23 +++++++---------------- >>>> 1 file changed, 7 insertions(+), 16 deletions(-) >>>> >>>> diff --git a/libavformat/mpeg.c b/libavformat/mpeg.c >>>> index bd182e4429..7daa72f7ce 100644 >>>> --- a/libavformat/mpeg.c >>>> +++ b/libavformat/mpeg.c >>>> @@ -912,7 +912,6 @@ static int vobsub_read_packet(AVFormatContext *s, >>>> AVPacket *pkt) >>>> FFDemuxSubtitlesQueue *q; >>>> AVIOContext *pb = vobsub->sub_ctx->pb; >>>> int ret, psize, total_read = 0, i; >>>> - AVPacket idx_pkt = { 0 }; >>>> >>>> int64_t min_ts = INT64_MAX; >>>> int sid = 0; >>>> @@ -927,24 +926,22 @@ static int vobsub_read_packet(AVFormatContext *s, >>>> AVPacket *pkt) >>>> } >>>> } >>>> q = &vobsub->q[sid]; >>>> - ret = ff_subtitles_queue_read_packet(q, &idx_pkt); >>>> + /* The returned packet will have size zero, >>>> + * so that it can be directly used with av_grow_packet. */ >>>> + ret = ff_subtitles_queue_read_packet(q, pkt); >>>> if (ret < 0) >>>> return ret; >>>> >>>> /* compute maximum packet size using the next packet position. This is >>>> * useful when the len in the header is non-sense */ >>>> if (q->current_sub_idx < q->nb_subs) { >>>> - psize = q->subs[q->current_sub_idx].pos - idx_pkt.pos; >>>> + psize = q->subs[q->current_sub_idx].pos - pkt->pos; >>>> } else { >>>> int64_t fsize = avio_size(pb); >>>> - psize = fsize < 0 ? 0xffff : fsize - idx_pkt.pos; >>>> + psize = fsize < 0 ? 0xffff : fsize - pkt->pos; >>>> } >>>> >>>> - avio_seek(pb, idx_pkt.pos, SEEK_SET); >>>> - >>>> - av_init_packet(pkt); >>>> - pkt->size = 0; >>>> - pkt->data = NULL; >>>> + avio_seek(pb, pkt->pos, SEEK_SET); >>>> >>>> do { >>>> int n, to_read, startcode; >>>> @@ -968,7 +965,7 @@ static int vobsub_read_packet(AVFormatContext *s, >>>> AVPacket *pkt) >>>> total_read += pkt_size; >>>> >>>> /* the current chunk doesn't match the stream index (unlikely) */ >>>> - if ((startcode & 0x1f) != s->streams[idx_pkt.stream_index]->id) >>>> + if ((startcode & 0x1f) != s->streams[pkt->stream_index]->id) >>>> break; >>>> >>>> ret = av_grow_packet(pkt, to_read); >>>> @@ -980,16 +977,10 @@ static int vobsub_read_packet(AVFormatContext *s, >>>> AVPacket *pkt) >>>> pkt->size -= to_read - n; >>>> } while (total_read < psize); >>>> >>>> - pkt->pts = pkt->dts = idx_pkt.pts; >>>> - pkt->pos = idx_pkt.pos; >>>> - pkt->stream_index = idx_pkt.stream_index; >>>> - >>>> - av_packet_unref(&idx_pkt); >>>> return 0; >>>> >>>> fail: >>>> av_packet_unref(pkt); >>>> - av_packet_unref(&idx_pkt); >>>> return ret; >>>> } >>>> >>>> >>> Ping. >>> >>> - Andreas >>> >> Another ping for the three unmerged patches of this patchset. >> >> - Andreas >> > Another ping for the two unmerged patches of this patchset; and also > for the other patch fixing uninitialized reads in the vobsub demuxer: > https://ffmpeg.org/pipermail/ffmpeg-devel/2019-October/251961.html > > - Andreas > Ping.
- Andreas _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".