diff mbox series

[FFmpeg-devel] avformat/demux: allow total size of packets in raw_packet_buffer to reach probesize

Message ID 20211107173810.31787-1-cus@passwd.hu
State Accepted
Commit 406ffd9b9b99fa096bcfe31b467453824d1542e7
Headers show
Series [FFmpeg-devel] avformat/demux: allow total size of packets in raw_packet_buffer to reach probesize | expand

Checks

Context Check Description
andriy/make_ppc success Make finished
andriy/make_fate_ppc success Make fate finished
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Marton Balint Nov. 7, 2021, 5:38 p.m. UTC
Previously this was hardcoded to 2500000 bytes, so probing of the stream codecs
was always limited by this, and not probesize.

Also keep track of the actual size of packets in raw_packet_buffer and not the
remaining size for simplicity.

Fixes ticket #5860.

Signed-off-by: Marton Balint <cus@passwd.hu>
---
 libavformat/demux.c    | 10 +++++-----
 libavformat/internal.h |  5 ++---
 libavformat/options.c  |  1 -
 libavformat/utils.c    |  2 +-
 4 files changed, 8 insertions(+), 10 deletions(-)

Comments

Marton Balint Nov. 13, 2021, 1:17 p.m. UTC | #1
On Sun, 7 Nov 2021, Marton Balint wrote:

> Previously this was hardcoded to 2500000 bytes, so probing of the stream codecs
> was always limited by this, and not probesize.
>
> Also keep track of the actual size of packets in raw_packet_buffer and not the
> remaining size for simplicity.
>
> Fixes ticket #5860.

Will apply soon.

Regards,
Marton

>
> Signed-off-by: Marton Balint <cus@passwd.hu>
> ---
> libavformat/demux.c    | 10 +++++-----
> libavformat/internal.h |  5 ++---
> libavformat/options.c  |  1 -
> libavformat/utils.c    |  2 +-
> 4 files changed, 8 insertions(+), 10 deletions(-)
>
> diff --git a/libavformat/demux.c b/libavformat/demux.c
> index 71a1a9bf03..745dc8687c 100644
> --- a/libavformat/demux.c
> +++ b/libavformat/demux.c
> @@ -328,7 +328,7 @@ int avformat_open_input(AVFormatContext **ps, const char *filename,
>     if (s->pb && !si->data_offset)
>         si->data_offset = avio_tell(s->pb);
>
> -    si->raw_packet_buffer_remaining_size = RAW_PACKET_BUFFER_SIZE;
> +    si->raw_packet_buffer_size = 0;
>
>     update_stream_avctx(s);
>
> @@ -432,7 +432,7 @@ no_packet:
>             }
>         }
>
> -        end = si->raw_packet_buffer_remaining_size <= 0
> +        end = si->raw_packet_buffer_size >= s->probesize
>                 || sti->probe_packets <= 0;
>
>         if (end || av_log2(pd->buf_size) != av_log2(pd->buf_size - pkt->size)) {
> @@ -544,13 +544,13 @@ FF_ENABLE_DEPRECATION_WARNINGS
>
>         if (pktl) {
>             AVStream *const st = s->streams[pktl->pkt.stream_index];
> -            if (si->raw_packet_buffer_remaining_size <= 0)
> +            if (si->raw_packet_buffer_size >= s->probesize)
>                 if ((err = probe_codec(s, st, NULL)) < 0)
>                     return err;
>             if (ffstream(st)->request_probe <= 0) {
>                 avpriv_packet_list_get(&si->raw_packet_buffer,
>                                        &si->raw_packet_buffer_end, pkt);
> -                si->raw_packet_buffer_remaining_size += pkt->size;
> +                si->raw_packet_buffer_size -= pkt->size;
>                 return 0;
>             }
>         }
> @@ -631,7 +631,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
>             return err;
>         }
>         pkt1 = &si->raw_packet_buffer_end->pkt;
> -        si->raw_packet_buffer_remaining_size -= pkt1->size;
> +        si->raw_packet_buffer_size += pkt1->size;
>
>         if ((err = probe_codec(s, st, pkt1)) < 0)
>             return err;
> diff --git a/libavformat/internal.h b/libavformat/internal.h
> index f1ae7db365..1f301dd17a 100644
> --- a/libavformat/internal.h
> +++ b/libavformat/internal.h
> @@ -127,10 +127,9 @@ typedef struct FFFormatContext {
>      */
>     AVPacket *pkt;
>     /**
> -     * Remaining size available for raw_packet_buffer, in bytes.
> +     * Sum of the size of packets in raw_packet_buffer, in bytes.
>      */
> -#define RAW_PACKET_BUFFER_SIZE 2500000
> -    int raw_packet_buffer_remaining_size;
> +    int raw_packet_buffer_size;
>
>     /**
>      * Offset to remap timestamps to be non-negative.
> diff --git a/libavformat/options.c b/libavformat/options.c
> index 753aa9b8dc..72c9bdcefe 100644
> --- a/libavformat/options.c
> +++ b/libavformat/options.c
> @@ -174,7 +174,6 @@ AVFormatContext *avformat_alloc_context(void)
>     }
>
>     si->offset = AV_NOPTS_VALUE;
> -    si->raw_packet_buffer_remaining_size = RAW_PACKET_BUFFER_SIZE;
>     si->shortest_end = AV_NOPTS_VALUE;
>
>     return s;
> diff --git a/libavformat/utils.c b/libavformat/utils.c
> index 509c0ecdce..bbc61dccbb 100644
> --- a/libavformat/utils.c
> +++ b/libavformat/utils.c
> @@ -303,7 +303,7 @@ void ff_flush_packet_queue(AVFormatContext *s)
>     avpriv_packet_list_free(&si->packet_buffer,     &si->packet_buffer_end);
>     avpriv_packet_list_free(&si->raw_packet_buffer, &si->raw_packet_buffer_end);
>
> -    si->raw_packet_buffer_remaining_size = RAW_PACKET_BUFFER_SIZE;
> +    si->raw_packet_buffer_size = 0;
> }
>
> int av_find_default_stream_index(AVFormatContext *s)
> -- 
> 2.31.1
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
>
diff mbox series

Patch

diff --git a/libavformat/demux.c b/libavformat/demux.c
index 71a1a9bf03..745dc8687c 100644
--- a/libavformat/demux.c
+++ b/libavformat/demux.c
@@ -328,7 +328,7 @@  int avformat_open_input(AVFormatContext **ps, const char *filename,
     if (s->pb && !si->data_offset)
         si->data_offset = avio_tell(s->pb);
 
-    si->raw_packet_buffer_remaining_size = RAW_PACKET_BUFFER_SIZE;
+    si->raw_packet_buffer_size = 0;
 
     update_stream_avctx(s);
 
@@ -432,7 +432,7 @@  no_packet:
             }
         }
 
-        end = si->raw_packet_buffer_remaining_size <= 0
+        end = si->raw_packet_buffer_size >= s->probesize
                 || sti->probe_packets <= 0;
 
         if (end || av_log2(pd->buf_size) != av_log2(pd->buf_size - pkt->size)) {
@@ -544,13 +544,13 @@  FF_ENABLE_DEPRECATION_WARNINGS
 
         if (pktl) {
             AVStream *const st = s->streams[pktl->pkt.stream_index];
-            if (si->raw_packet_buffer_remaining_size <= 0)
+            if (si->raw_packet_buffer_size >= s->probesize)
                 if ((err = probe_codec(s, st, NULL)) < 0)
                     return err;
             if (ffstream(st)->request_probe <= 0) {
                 avpriv_packet_list_get(&si->raw_packet_buffer,
                                        &si->raw_packet_buffer_end, pkt);
-                si->raw_packet_buffer_remaining_size += pkt->size;
+                si->raw_packet_buffer_size -= pkt->size;
                 return 0;
             }
         }
@@ -631,7 +631,7 @@  FF_ENABLE_DEPRECATION_WARNINGS
             return err;
         }
         pkt1 = &si->raw_packet_buffer_end->pkt;
-        si->raw_packet_buffer_remaining_size -= pkt1->size;
+        si->raw_packet_buffer_size += pkt1->size;
 
         if ((err = probe_codec(s, st, pkt1)) < 0)
             return err;
diff --git a/libavformat/internal.h b/libavformat/internal.h
index f1ae7db365..1f301dd17a 100644
--- a/libavformat/internal.h
+++ b/libavformat/internal.h
@@ -127,10 +127,9 @@  typedef struct FFFormatContext {
      */
     AVPacket *pkt;
     /**
-     * Remaining size available for raw_packet_buffer, in bytes.
+     * Sum of the size of packets in raw_packet_buffer, in bytes.
      */
-#define RAW_PACKET_BUFFER_SIZE 2500000
-    int raw_packet_buffer_remaining_size;
+    int raw_packet_buffer_size;
 
     /**
      * Offset to remap timestamps to be non-negative.
diff --git a/libavformat/options.c b/libavformat/options.c
index 753aa9b8dc..72c9bdcefe 100644
--- a/libavformat/options.c
+++ b/libavformat/options.c
@@ -174,7 +174,6 @@  AVFormatContext *avformat_alloc_context(void)
     }
 
     si->offset = AV_NOPTS_VALUE;
-    si->raw_packet_buffer_remaining_size = RAW_PACKET_BUFFER_SIZE;
     si->shortest_end = AV_NOPTS_VALUE;
 
     return s;
diff --git a/libavformat/utils.c b/libavformat/utils.c
index 509c0ecdce..bbc61dccbb 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -303,7 +303,7 @@  void ff_flush_packet_queue(AVFormatContext *s)
     avpriv_packet_list_free(&si->packet_buffer,     &si->packet_buffer_end);
     avpriv_packet_list_free(&si->raw_packet_buffer, &si->raw_packet_buffer_end);
 
-    si->raw_packet_buffer_remaining_size = RAW_PACKET_BUFFER_SIZE;
+    si->raw_packet_buffer_size = 0;
 }
 
 int av_find_default_stream_index(AVFormatContext *s)