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

Marton Balint cus at passwd.hu
Mon Feb 4 22:49:32 EET 2019



On Sat, 2 Feb 2019, Michael Niedermayer wrote:

> On Fri, Feb 01, 2019 at 10:29:13PM +0100, Marton Balint wrote:
>>
>>
>> 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.
>
> sure ok

Thanks, applied.

Regards,
Marton


More information about the ffmpeg-devel mailing list