[SCM] libav/experimental: mpegts: pass MpegTSContext ptr explicitly

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Aug 10 16:03:49 UTC 2014


The following commit has been merged in the experimental branch:
commit 5adcef9c1bf701ba2dd43363ae983ba6d74bdb9a
Author: Alexander V. Lukyanov <lavv17f at gmail.com>
Date:   Tue Jul 8 11:54:15 2014 +0400

    mpegts: pass MpegTSContext ptr explicitly
    
    AVFormatContext->priv_data is not always a MpegTSContext, it can be
    RTSPState when decoding a RTP stream. So it is necessary to pass
    MpegTSContext pointer explicitly.
    
    Within libav, the write_section_data function doesn't actually use
    the MpegTSContext at all, so this doesn't change anything at the
    moment (no memory was corrupted before), but it reduces the risk of
    anybody trying to touch the MpegTSContext via AVFormatContext->priv_data
    in the future.
    
    Signed-off-by: Martin Storsjö <martin at martin.st>

diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
index c00f4b1..5d8b08c 100644
--- a/libavformat/mpegts.c
+++ b/libavformat/mpegts.c
@@ -287,7 +287,7 @@ static int discard_pid(MpegTSContext *ts, unsigned int pid)
  *  Assemble PES packets out of TS packets, and then call the "section_cb"
  *  function when they are complete.
  */
-static void write_section_data(AVFormatContext *s, MpegTSFilter *tss1,
+static void write_section_data(MpegTSContext *ts, MpegTSFilter *tss1,
                                const uint8_t *buf, int buf_size, int is_start)
 {
     MpegTSSectionFilter *tss = &tss1->u.section_filter;
@@ -1704,7 +1704,6 @@ static void sdt_cb(MpegTSFilter *filter, const uint8_t *section, int section_len
 /* handle one TS packet */
 static int handle_packet(MpegTSContext *ts, const uint8_t *packet)
 {
-    AVFormatContext *s = ts->stream;
     MpegTSFilter *tss;
     int len, pid, cc, expected_cc, cc_ok, afc, is_start, is_discontinuity,
         has_adaptation, has_payload;
@@ -1774,7 +1773,7 @@ static int handle_packet(MpegTSContext *ts, const uint8_t *packet)
                 return 0;
             if (len && cc_ok) {
                 /* write remaining section bytes */
-                write_section_data(s, tss,
+                write_section_data(ts, tss,
                                    p, len, 0);
                 /* check whether filter has been closed */
                 if (!ts->pids[pid])
@@ -1782,12 +1781,12 @@ static int handle_packet(MpegTSContext *ts, const uint8_t *packet)
             }
             p += len;
             if (p < p_end) {
-                write_section_data(s, tss,
+                write_section_data(ts, tss,
                                    p, p_end - p, 1);
             }
         } else {
             if (cc_ok) {
-                write_section_data(s, tss,
+                write_section_data(ts, tss,
                                    p, p_end - p, 0);
             }
         }

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list