[FFmpeg-devel] [PATCH 2/3] avformat/mpegts: cache PID discard values

Marton Balint cus at passwd.hu
Fri Feb 1 23:29:13 EET 2019



On Fri, 25 Jan 2019, Marton Balint wrote:

>
>
> On Fri, 25 Jan 2019, Michael Niedermayer wrote:
>
>> On Thu, Jan 24, 2019 at 09:38:00PM +0100, Marton Balint wrote:
>>> discard_pid can be quite expensive, so let's cache it and recalculate it 
> on
>>> every packet start.
>>>
>>> ffmpeg -y -i samples/MPEG-VOB/sdtv/RAI.ts -c copy -map 0:v:0 -map 0:a:0 -f 
> mpegts /dev/null
>>>
>>> Before:
>>>    1685 decicycles in handle_packet,  523483 runs,    805 skips
>>>
>>> After:
>>>     883 decicycles in handle_packet,  523505 runs,    783 skips
>>>
>>> Signed-off-by: Marton Balint <cus at passwd.hu>
>>> ---
>>>  libavformat/mpegts.c | 7 +++++--
>>>  1 file changed, 5 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
>>> index 300db110d4..b04fd7b4f4 100644
>>> --- a/libavformat/mpegts.c
>>> +++ b/libavformat/mpegts.c
>>> @@ -91,6 +91,7 @@ struct MpegTSFilter {
>>>      int es_id;
>>>      int last_cc; /* last cc code (-1 if first packet) */
>>>      int64_t last_pcr;
>>> +    int discard;
>>>      enum MpegTSFilterType type;
>>>      union {
>>>          MpegTSPESFilter pes_filter;
>>> @@ -2474,8 +2475,6 @@ static int handle_packet(MpegTSContext *ts, const 
> uint8_t *packet)
>>>      int64_t pos;
>>>
>>>      pid = AV_RB16(packet + 1) & 0x1fff;
>>> -    if (pid && discard_pid(ts, pid))
>>> -        return 0;
>>>      is_start = packet[1] & 0x40;
>>>      tss = ts->pids[pid];
>>>      if (ts->auto_guess && !tss && is_start) {
>>> @@ -2484,6 +2483,10 @@ static int handle_packet(MpegTSContext *ts, const 
> uint8_t *packet)
>>>      }
>>>      if (!tss)
>>>          return 0;
>>> +    if (is_start)
>>> +        tss->discard = discard_pid(ts, pid);
>>> +    if (tss->discard)
>>> +        return 0;
>>
>> this is moving the discard check over the auto_guess /add_pes_stream()
>> have you checked or know that this is ok ?
>> its not immedeatly obviouls (to me) why this would have no side effects
>
> As far as I see that code is used to add streams which are not part of 
> the detected programs. Therefore program discards should not concern them.

Will apply soon.

Regards,
Marton


More information about the ffmpeg-devel mailing list