[FFmpeg-devel] [PATCH 15/16] mpegts: fix return value when enough ts packets have been parsed or when the first PMT has been seen.

Baptiste Coudurier baptiste.coudurier at gmail.com
Sun Oct 9 22:44:38 CEST 2011


Hi Laurent,

On 10/8/11 2:40 PM, fenrir at elivagar.org wrote:
> From: Laurent Aimar<fenrir at videolan.org>
>
> ---
>   libavformat/mpegts.c |   12 ++++++++----
>   1 files changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
> index 02f0d56..f3d8b35 100644
> --- a/libavformat/mpegts.c
> +++ b/libavformat/mpegts.c
> @@ -1106,7 +1106,7 @@ static void pmt_cb(MpegTSFilter *filter, const uint8_t *section, int section_len
>
>       // stop parsing after pmt, we found header
>       if (!ts->stream->nb_streams)
> -        ts->stop_parse = 1;
> +        ts->stop_parse = 2;
>
>       for(;;) {
>           st = 0;
> @@ -1462,11 +1462,15 @@ static int handle_packets(MpegTSContext *ts, int nb_packets)
>       ts->stop_parse = 0;
>       packet_num = 0;
>       for(;;) {
> -        if (ts->stop_parse>0)
> -            break;
>           packet_num++;
> -        if (nb_packets != 0&&  packet_num>= nb_packets)
> +        if (nb_packets != 0&&  packet_num>= nb_packets ||
> +            ts->stop_parse>  1) {
> +            ret = AVERROR(EAGAIN);
>               break;
> +        }
> +        if (ts->stop_parse>  0)
> +            break;
> +
>           ret = read_packet(s, packet, ts->raw_packet_size);
>           if (ret != 0)
>               break;

I'm a bit confused by the change. What's the intended goal ?
pmt_cb setting stop_parse = 1 is only when no streams are present yet, 
ie we did not parse PMT yet, this should only happen during init.
Is that triggered in other scenario ?

-- 
Baptiste COUDURIER
Key fingerprint                 8D77134D20CC9220201FC5DB0AC9325C5C1ABAAA
FFmpeg maintainer                                  http://www.ffmpeg.org


More information about the ffmpeg-devel mailing list