Package: release.debian.org
Severity: normal
User: release.debian....@packages.debian.org
Usertags: unblock

Please unblock package v4l-utils

Hello,

please unblock the latest stable version of v4l-utils 1.12. It fixes
a crash in the Digital Video Broadcasting (DVB) library that occurs
when a German DVB-T2 transport stream is parsed. Additionally it fixes
a bug where identical transport streams were not detected as such.

Thanks,
Gregor

diff -Nru v4l-utils-1.12.3/ChangeLog v4l-utils-1.12.5/ChangeLog
--- v4l-utils-1.12.3/ChangeLog  2017-02-17 20:07:58.000000000 +0100
+++ v4l-utils-1.12.5/ChangeLog  2017-05-10 20:23:45.000000000 +0200
@@ -1,3 +1,27 @@
+v4l-utils-1.12.5
+----------------
+
+Mauro Carvalho Chehab (1):
+      dvb-scan: fix the logic for multi-section handling
+
+
+v4l-utils-1.12.4
+----------------
+
+Clemens Ladisch (1):
+      libdvbv5: T2 delivery descriptor: fix wrong size of bandwidth field
+
+Mauro Carvalho Chehab (5):
+      desc_t2_delivery: consider valid to have a short T2 descriptor
+      desc_t2_delivery: properly handle cell and subcell tables
+      desc_t2_delivery: improve print dumps of T2 delivery
+      desc_t2_delivery: resize frequency array for subcel freqs
+      libdvbv5: add support for more PMT descriptors
+
+Reinhard Speyerer (1):
+      libdvbv5: fix T2 delivery descriptor parsing in 
dvb_desc_t2_delivery_init()
+
+
 v4l-utils-1.12.3
 ----------------
 
diff -Nru v4l-utils-1.12.3/configure v4l-utils-1.12.5/configure
--- v4l-utils-1.12.3/configure.ac       2017-02-17 20:05:46.000000000 +0100
+++ v4l-utils-1.12.5/configure.ac       2017-05-10 20:24:05.000000000 +0200
@@ -3,7 +3,7 @@
 # Process this file with autoconf to produce a configure script.
 
 AC_PREREQ(2.59)
-AC_INIT([v4l-utils],[1.12.3])
+AC_INIT([v4l-utils],[1.12.5])
 
 AC_CONFIG_AUX_DIR([build-aux])
 AC_CONFIG_MACRO_DIR([m4])
diff -Nru v4l-utils-1.12.3/contrib/cobalt-ctl/Makefile 
v4l-utils-1.12.5/contrib/cobalt-ctl/Makefile
diff -Nru v4l-utils-1.12.3/debian/changelog v4l-utils-1.12.5/debian/changelog
--- v4l-utils-1.12.3/debian/changelog   2017-02-17 20:14:26.000000000 +0100
+++ v4l-utils-1.12.5/debian/changelog   2017-05-10 20:29:42.000000000 +0200
@@ -1,3 +1,22 @@
+v4l-utils (1.12.5-1) unstable; urgency=medium
+
+  * Imported Upstream version 1.12.5 (Closes: #859008)
+
+ -- Gregor Jasny <gja...@googlemail.com>  Wed, 10 May 2017 20:29:42 +0200
+
+v4l-utils (1.12.4-1) unstable; urgency=medium
+
+  * Imported Upstream version 1.12.4 (Closes: #859008)
+  * Remove patches applied upstream
+
+ -- Gregor Jasny <gja...@googlemail.com>  Sat, 06 May 2017 19:29:03 +0200
+
+v4l-utils (1.12.3-2) unstable; urgency=medium
+
+  * Fix DVB descriptor parsing (Closes: #859008)
+
+ -- Gregor Jasny <gja...@googlemail.com>  Tue, 02 May 2017 22:12:52 +0200
+
 v4l-utils (1.12.3-1) unstable; urgency=medium
 
   * Imported Upstream version 1.12.3 (Closes: #854100)
diff -Nru v4l-utils-1.12.3/debian/control v4l-utils-1.12.5/debian/control
--- v4l-utils-1.12.3/debian/control     2017-01-22 21:28:14.000000000 +0100
+++ v4l-utils-1.12.5/debian/control     2017-05-06 19:27:07.000000000 +0200
@@ -21,7 +21,7 @@
 Standards-Version: 3.9.8
 Vcs-Browser: https://anonscm.debian.org/cgit/collab-maint/libv4l.git
 Vcs-Git: https://anonscm.debian.org/git/collab-maint/libv4l.git
-Homepage: http://linuxtv.org/downloads/v4l-utils/
+Homepage: https://linuxtv.org/downloads/v4l-utils/
 
 Package: libv4l-0
 Section: libs
diff -Nru v4l-utils-1.12.3/debian/libdvbv5-0.symbols 
v4l-utils-1.12.5/debian/libdvbv5-0.symbols
--- v4l-utils-1.12.3/debian/libdvbv5-0.symbols  2017-01-22 19:33:15.000000000 
+0100
+++ v4l-utils-1.12.5/debian/libdvbv5-0.symbols  2017-05-06 19:43:11.000000000 
+0200
@@ -271,6 +271,7 @@
  isdbt_interval@Base 1.4.0
  isdbt_mode@Base 1.4.0
  pmt_stream_name@Base 1.4.0
+ siso_miso@Base 1.12.4
  stack_dump@Base 1.12.1
  sys_atsc_props@Base 1.4.0
  sys_atscmh_props@Base 1.4.0
diff -Nru v4l-utils-1.12.3/debian/watch v4l-utils-1.12.5/debian/watch
--- v4l-utils-1.12.3/debian/watch       2016-06-15 21:34:30.000000000 +0200
+++ v4l-utils-1.12.5/debian/watch       2017-05-06 19:26:55.000000000 +0200
@@ -1,3 +1,3 @@
 version=4
-opts=pgpsigurlmangle=s/$/.asc/ http://linuxtv.org/downloads/@PACKAGE@/ 
@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate
+opts=pgpsigurlmangle=s/$/.asc/ https://linuxtv.org/downloads/@PACKAGE@/ 
@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ debian uupdate
 
diff -Nru v4l-utils-1.12.3/lib/include/libdvbv5/desc_t2_delivery.h 
v4l-utils-1.12.5/lib/include/libdvbv5/desc_t2_delivery.h
--- v4l-utils-1.12.3/lib/include/libdvbv5/desc_t2_delivery.h    2017-01-22 
18:33:34.000000000 +0100
+++ v4l-utils-1.12.5/lib/include/libdvbv5/desc_t2_delivery.h    2017-05-10 
20:21:39.000000000 +0200
@@ -45,10 +45,14 @@
  *
  * @param cell_id_extension    cell id extension
  * @param transposer_frequency transposer frequency
+ *
+ * NOTE: This struct is deprecated and will never be filled. All
+ * subcell transposer frequencies will be added to
+ * dvb_desc_t2_delivery::centre_frequency array.
  */
 struct dvb_desc_t2_delivery_subcell {
        uint8_t cell_id_extension;
-       uint16_t transposer_frequency;
+       uint16_t transposer_frequency;          // Should be 32 bits, instead
 } __attribute__((packed));
 
 /**
@@ -65,7 +69,8 @@
  * @param other_frequency_flag other frequency flag
  * @param tfs_flag             tfs flag
  *
- * @param centre_frequency     centre frequency vector
+ * @param centre_frequency     centre frequency vector, for all cell and
+ *                             subcel ID's
  * @param frequency_loop_length        size of the 
dvb_desc_t2_delivery::centre_frequency
  *                             vector
  *
@@ -86,13 +91,15 @@
                        uint16_t transmission_mode:3;
                        uint16_t guard_interval:3;
                        uint16_t reserved:2;
-                       uint16_t bandwidth:3;
+                       uint16_t bandwidth:4;
                        uint16_t SISO_MISO:2;
                } __attribute__((packed));
        } __attribute__((packed));
 
        uint32_t *centre_frequency;
        uint8_t frequency_loop_length;
+
+       /* Unused, as the definitions here are incomplete */
        uint8_t subcel_info_loop_length;
        struct dvb_desc_t2_delivery_subcell *subcell;
 } __attribute__((packed));
@@ -161,6 +168,12 @@
  */
 extern const unsigned dvbt2_transmission_mode[];
 
+/**
+ * @brief converts from internal representation to string the SISO_MISO
+ *       field of dvb_desc_t2_delivery:SISO_MISO field.
+ */
+const char *siso_miso[4];
+
 #ifdef __cplusplus
 }
 #endif
diff -Nru v4l-utils-1.12.3/lib/include/libdvbv5/libdvb-version.h 
v4l-utils-1.12.5/lib/include/libdvbv5/libdvb-version.h
--- v4l-utils-1.12.3/lib/include/libdvbv5/libdvb-version.h      2017-02-17 
20:09:16.000000000 +0100
+++ v4l-utils-1.12.5/lib/include/libdvbv5/libdvb-version.h      2017-05-10 
20:26:11.000000000 +0200
@@ -1,4 +1,4 @@
 #define LIBDVBV5_VERSION_MAJOR 1
 #define LIBDVBV5_VERSION_MINOR 12
-#define LIBDVBV5_VERSION_PATCH 3
-#define LIBDVBV5_VERSION       "1.12.3"
+#define LIBDVBV5_VERSION_PATCH 5
+#define LIBDVBV5_VERSION       "1.12.5"
diff -Nru v4l-utils-1.12.3/lib/include/libdvbv5/pmt.h 
v4l-utils-1.12.5/lib/include/libdvbv5/pmt.h
--- v4l-utils-1.12.3/lib/include/libdvbv5/pmt.h 2017-01-22 18:33:34.000000000 
+0100
+++ v4l-utils-1.12.5/lib/include/libdvbv5/pmt.h 2017-05-06 18:51:00.000000000 
+0200
@@ -104,7 +104,6 @@
  *     @brief  User Private (from 0x80 to 0xff)
  */
 enum dvb_streams {
-       stream_reserved0        = 0x00,
        stream_video            = 0x01,
        stream_video_h262       = 0x02,
        stream_audio            = 0x03,
@@ -125,8 +124,20 @@
        stream_14496_1_pes      = 0x12,
        stream_14496_1_iso      = 0x13,
        stream_download         = 0x14,
-       stream_reserved         = 0x15,
-       stream_private          = 0x80
+       stream_video_h264       = 0x1b,
+       stream_audio_14496_3    = 0x1c,
+       stream_video_hevc       = 0x24,
+       stream_video_cavs       = 0x42,
+       stream_video_moto       = 0x80,
+       stream_audio_a52        = 0x81,
+       stream_scte_27          = 0x82,
+       stream_audio_sdds       = 0x84,
+       stream_audio_dts_hdmv   = 0x85,
+       stream_audio_e_ac3      = 0x87,
+       stream_audio_dts        = 0x8a,
+       stream_audio_a52_vls    = 0x91,
+       stream_spu_vls          = 0x92,
+       stream_audio_sdds2      = 0x94,
 };
 
 /**
diff -Nru v4l-utils-1.12.3/lib/libdvbv5/descriptors/desc_t2_delivery.c 
v4l-utils-1.12.5/lib/libdvbv5/descriptors/desc_t2_delivery.c
--- v4l-utils-1.12.3/lib/libdvbv5/descriptors/desc_t2_delivery.c        
2017-01-22 18:33:34.000000000 +0100
+++ v4l-utils-1.12.5/lib/libdvbv5/descriptors/desc_t2_delivery.c        
2017-05-10 20:21:39.000000000 +0200
@@ -30,7 +30,7 @@
        struct dvb_desc_t2_delivery *d = desc;
        unsigned char *p = (unsigned char *) buf;
        size_t desc_len = ext->length - 1, len, len2;
-       int i;
+       int i, n, pos = 0, subcel_length;
 
        len = offsetof(struct dvb_desc_t2_delivery, bitfield);
        len2 = offsetof(struct dvb_desc_t2_delivery, centre_frequency);
@@ -40,53 +40,76 @@
                return -1;
        }
        if (desc_len < len2) {
-               memcpy(p, buf, len);
+               memcpy(d, buf, len);
                bswap16(d->system_id);
 
-               if (desc_len != len)
-                       dvb_logwarn("T2 delivery descriptor is truncated");
+               /* It is valid to have length == 4 */
+               if (desc_len == len)
+                       return 0;
 
+               dvb_logwarn("T2 delivery descriptor is truncated");
                return -2;
        }
-       memcpy(p, buf, len2);
+       memcpy(d, buf, len2);
+       bswap16(d->system_id);
+       bswap16(d->bitfield);
        p += len2;
 
-       len = desc_len - (p - buf);
-       memcpy(&d->centre_frequency, p, len);
-       p += len;
-
-       if (d->tfs_flag)
-               d->frequency_loop_length = 1;
-       else {
-               d->frequency_loop_length = *p;
-               p++;
-       }
+       while (desc_len - (p - buf)) {
+               if (desc_len - (p - buf) < sizeof(uint16_t)) {
+                       dvb_logwarn("T2 delivery descriptor is truncated");
+                       return -2;
+               }
 
-       d->centre_frequency = calloc(d->frequency_loop_length,
-                                    sizeof(*d->centre_frequency));
-       if (!d->centre_frequency) {
-               dvb_logerr("%s: out of memory", __func__);
-               return -3;
-       }
 
-       memcpy(d->centre_frequency, p, sizeof(*d->centre_frequency) * 
d->frequency_loop_length);
-       p += sizeof(*d->centre_frequency) * d->frequency_loop_length;
+               /* Discard cell ID */
+               p += sizeof(uint16_t);
 
-       for (i = 0; i < d->frequency_loop_length; i++)
-               bswap32(d->centre_frequency[i]);
+               if (d->tfs_flag) {
+                       n = *p;
+                       p++;
+               }
+               else
+                       n = 1;
+
+               d->frequency_loop_length += n;
+               d->centre_frequency = realloc(d->centre_frequency,
+                                             d->frequency_loop_length * 
sizeof(*d->centre_frequency));
+               if (!d->centre_frequency) {
+                       dvb_logerr("%s: out of memory", __func__);
+                       return -3;
+               }
+
+               memcpy(&d->centre_frequency[pos], p, 
sizeof(*d->centre_frequency) * n);
+               p += sizeof(*d->centre_frequency) * n;
+
+               for (i = 0; i < n; i++) {
+                       bswap32(d->centre_frequency[pos]);
+                       pos++;
+               }
 
-       d->subcel_info_loop_length = *p;
-       p++;
+               /* Handle subcel frequency table */
+               subcel_length = *p;
+               p++;
+               for (i = 0; i < subcel_length; i++) {
+                       if (desc_len - (p - buf) < sizeof(uint8_t) + 
sizeof(uint32_t)) {
+                               dvb_logwarn("T2 delivery descriptor is 
truncated");
+                               return -2;
+                       }
+                       p++;    // Ignore subcell ID
+
+                       // Add transposer_frequency at centre_frequency table
+                       d->frequency_loop_length++;
+                       d->centre_frequency = realloc(d->centre_frequency,
+                                                     d->frequency_loop_length 
* sizeof(*d->centre_frequency));
+                       memcpy(&d->centre_frequency[pos], p, 
sizeof(*d->centre_frequency));
+                       bswap32(d->centre_frequency[pos]);
+                       pos++;
 
-       d->subcell = calloc(d->subcel_info_loop_length, sizeof(*d->subcell));
-       if (!d->subcell) {
-               dvb_logerr("%s: out of memory", __func__);
-               return -4;
+                       p += sizeof(*d->centre_frequency);
+               }
        }
-       memcpy(d->subcell, p, sizeof(*d->subcell) * d->subcel_info_loop_length);
 
-       for (i = 0; i < d->subcel_info_loop_length; i++)
-               bswap16(d->subcell[i].transposer_frequency);
        return 0;
 }
 
@@ -105,19 +128,16 @@
 
        dvb_loginfo("|           tfs_flag                  %d", d->tfs_flag);
        dvb_loginfo("|           other_frequency_flag      %d", 
d->other_frequency_flag);
-       dvb_loginfo("|           transmission_mode         %d", 
d->transmission_mode);
-       dvb_loginfo("|           guard_interval            %d", 
d->guard_interval);
+       dvb_loginfo("|           transmission_mode         %s (%d)",
+                   
fe_transmission_mode_name[dvbt2_transmission_mode[d->transmission_mode]], 
d->transmission_mode);
+       dvb_loginfo("|           guard_interval            %s (%d)",
+                   fe_guard_interval_name[dvbt2_interval[d->guard_interval]], 
d->guard_interval );
        dvb_loginfo("|           reserved                  %d", d->reserved);
-       dvb_loginfo("|           bandwidth                 %d", d->bandwidth);
-       dvb_loginfo("|           SISO MISO                 %d", d->SISO_MISO);
+       dvb_loginfo("|           bandwidth                 %d", 
dvbt2_bw[d->bandwidth]);
+       dvb_loginfo("|           SISO MISO                 %s", 
siso_miso[d->SISO_MISO]);
 
        for (i = 0; i < d->frequency_loop_length; i++)
                dvb_loginfo("|           centre frequency[%d]   %d", i, 
d->centre_frequency[i]);
-
-       for (i = 0; i < d->subcel_info_loop_length; i++) {
-               dvb_loginfo("|           cell_id_extension[%d]  %d", i, 
d->subcell[i].cell_id_extension);
-               dvb_loginfo("|           transposer frequency   %d", 
d->subcell[i].transposer_frequency);
-       }
 }
 
 void dvb_desc_t2_delivery_free(const void *desc)
@@ -159,3 +179,8 @@
        [5] = TRANSMISSION_MODE_32K,
        [6 ...7] = TRANSMISSION_MODE_AUTO,      /* Reserved */
 };
+const char *siso_miso[4] = {
+       [0] = "SISO",
+       [1] = "MISO",
+       [2 ...3] = "reserved",
+};
diff -Nru v4l-utils-1.12.3/lib/libdvbv5/dvb-file.c 
v4l-utils-1.12.5/lib/libdvbv5/dvb-file.c
--- v4l-utils-1.12.3/lib/libdvbv5/dvb-file.c    2017-01-22 18:33:34.000000000 
+0100
+++ v4l-utils-1.12.5/lib/libdvbv5/dvb-file.c    2017-05-06 18:51:00.000000000 
+0200
@@ -1024,6 +1024,9 @@
                case 0x01: /* ISO/IEC 11172-2 Video */
                case 0x02: /* H.262, ISO/IEC 13818-2 or ISO/IEC 11172-2 video */
                case 0x1b: /* H.264 AVC */
+               case 0x24: /* HEVC */
+               case 0x42: /* CAVS */
+               case 0x80: /* MPEG-2 MOTO video */
                        entry->video_pid = realloc(entry->video_pid,
                                                   sizeof(*entry->video_pid) *
                                                   (video_len + 1));
@@ -1032,9 +1035,17 @@
                        break;
                case 0x03: /* ISO/IEC 11172-3 Audio */
                case 0x04: /* ISO/IEC 13818-3 Audio */
+               case 0x07: /* DTS and DTS-HD Audio */
                case 0x0f: /* ISO/IEC 13818-7 Audio with ADTS (AAC) */
                case 0x11: /* ISO/IEC 14496-3 Audio with the LATM */
-               case 0x81: /* user private - in general ATSC Dolby - AC-3 */
+               case 0x1c: /* ISO/IEC 14496-3 Audio, without additional 
transport syntax */
+               case 0x81: /* A52 */
+               case 0x84: /* SDDS */
+               case 0x85: /* DTS on HDMV */
+               case 0x87: /* E-AC3 */
+               case 0x8a: /* DTS */
+               case 0x91: /* A52 VLS */
+               case 0x94: /* SDDS */
                        entry->audio_pid = realloc(entry->audio_pid,
                                                   sizeof(*entry->audio_pid) *
                                                   (audio_len + 1));
diff -Nru v4l-utils-1.12.3/lib/libdvbv5/dvb-scan.c 
v4l-utils-1.12.5/lib/libdvbv5/dvb-scan.c
--- v4l-utils-1.12.3/lib/libdvbv5/dvb-scan.c    2017-01-22 18:33:34.000000000 
+0100
+++ v4l-utils-1.12.5/lib/libdvbv5/dvb-scan.c    2017-05-10 20:21:53.000000000 
+0200
@@ -239,12 +239,6 @@
                                return -1;
                        }
                        ext += i;
-
-                       memset(ext, 0, sizeof(*ext));
-                       ext->ext_id = h.id;
-                       ext->first_section = h.section_id;
-                       ext->last_section = h.last_section;
-                       new = 1;
                }
        }
 
diff -Nru v4l-utils-1.12.3/lib/libdvbv5/tables/pmt.c 
v4l-utils-1.12.5/lib/libdvbv5/tables/pmt.c
--- v4l-utils-1.12.3/lib/libdvbv5/tables/pmt.c  2017-01-22 18:33:34.000000000 
+0100
+++ v4l-utils-1.12.5/lib/libdvbv5/tables/pmt.c  2017-05-06 18:51:00.000000000 
+0200
@@ -172,7 +172,9 @@
 }
 
 const char *pmt_stream_name[] = {
-       [stream_reserved0]         = "Reserved",
+       [0x00 ... 0x7f] = "Reserved",
+       [0x80 ... 0xff] = "User Private",
+
        [stream_video]             = "Video ISO/IEC 11172",
        [stream_video_h262]        = "Video ISO/IEC 13818-2",
        [stream_audio]             = "Audio ISO/IEC 11172",
@@ -193,7 +195,20 @@
        [stream_14496_1_pes]       = "ISO/IEC 14496-1 PES",
        [stream_14496_1_iso]       = "ISO/IEC 14496-1 ISO",
        [stream_download]          = "ISO/IEC 13818-6 Synchronized Download 
Protocol",
-       [stream_reserved ... 0x7f] = "ISO/IEC 13818-1 Reserved",
-       [stream_private  ... 0xff] = "User Private"
+
+       [stream_video_h264]        = "H264",
+       [stream_audio_14496_3]     = "ISO/IEC 14496-3 Audio",
+       [stream_video_hevc]        = "HEVC",
+       [stream_video_cavs]        = "CAVS (Chinese AVS)",
+       [stream_video_moto]        = "MPEG-2 MOTO video",
+       [stream_audio_a52]         = "A52",
+       [stream_scte_27]           = "SCTE-27 (sub)",
+       [stream_audio_sdds]        = "SDDS",
+       [stream_audio_dts_hdmv]    = "DTS",
+       [stream_audio_e_ac3]       = "E-AC3, ATSC",
+       [stream_audio_dts]         = "DTS",
+       [stream_audio_a52_vls]     = "A52 vls",
+       [stream_spu_vls]           = "DVD_SPU vls",
+       [stream_audio_sdds2]       = "SDDS",
 };
 

unblock v4l-utils/1.12.5-1

-- System Information:
Debian Release: 9.0
  APT prefers unstable
  APT policy: (500, 'unstable'), (1, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 4.9.0-1-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Reply via email to