[vlc-commits] demux: mp4: fix heap overflow (fix #12283)

2014-09-27 Thread Francois Cartegnie
vlc/vlc-2.2 | branch: master | Francois Cartegnie  | Fri Sep 
26 15:56:25 2014 +0200| [115ebace05b4ecb5866f425ef9dfc186fdc94406] | committer: 
Jean-Baptiste Kempf

demux: mp4: fix heap overflow (fix #12283)

(cherry picked from commit fd9a60b0178286f603ef9b3057b4ff4ab28d7a22)
Signed-off-by: Jean-Baptiste Kempf 

> http://git.videolan.org/gitweb.cgi/vlc/vlc-2.2.git/?a=commit;h=115ebace05b4ecb5866f425ef9dfc186fdc94406
---

 modules/demux/mp4/libmp4.c |4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/modules/demux/mp4/libmp4.c b/modules/demux/mp4/libmp4.c
index 1d02274..f27d22b 100644
--- a/modules/demux/mp4/libmp4.c
+++ b/modules/demux/mp4/libmp4.c
@@ -881,7 +881,9 @@ static int MP4_ReadBox_mdhd( stream_t *p_stream, MP4_Box_t 
*p_box )
 MP4_GET4BYTES( p_box->data.p_mdhd->i_timescale );
 MP4_GET4BYTES( p_box->data.p_mdhd->i_duration );
 }
-p_box->data.p_mdhd->i_language_code = i_language = GetWBE( p_peek );
+
+MP4_GET2BYTES( i_language );
+p_box->data.p_mdhd->i_language_code = i_language;
 for( unsigned i = 0; i < 3; i++ )
 {
 p_box->data.p_mdhd->i_language[i] =

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] demux: mp4: add new language conversion tables

2014-09-27 Thread Francois Cartegnie
vlc/vlc-2.2 | branch: master | Francois Cartegnie  | Fri Sep 
26 15:57:27 2014 +0200| [42100068b054f248a8e271c826086bfdcc0ed2e1] | committer: 
Jean-Baptiste Kempf

demux: mp4: add new language conversion tables

(cherry picked from commit 2a3c52805fe2527c97310c7a7f59178633a1da1e)
Signed-off-by: Jean-Baptiste Kempf 

> http://git.videolan.org/gitweb.cgi/vlc/vlc-2.2.git/?a=commit;h=42100068b054f248a8e271c826086bfdcc0ed2e1
---

 modules/demux/Makefile.am |3 +-
 modules/demux/mp4/languages.h |   91 +
 modules/demux/mp4/libmp4.c|1 +
 3 files changed, 94 insertions(+), 1 deletion(-)

diff --git a/modules/demux/Makefile.am b/modules/demux/Makefile.am
index 75f5b52..995c6d9 100644
--- a/modules/demux/Makefile.am
+++ b/modules/demux/Makefile.am
@@ -187,7 +187,8 @@ demux_LTLIBRARIES += $(LTLIBmkv)
 EXTRA_LTLIBRARIES += libmkv_plugin.la
 
 libmp4_plugin_la_SOURCES = demux/mp4/mp4.c demux/mp4/mp4.h \
-   demux/mp4/libmp4.c demux/mp4/libmp4.h 
demux/mp4/id3genres.h
+   demux/mp4/libmp4.c demux/mp4/libmp4.h \
+   demux/mp4/id3genres.h demux/mp4/languages.h
 libmp4_plugin_la_LIBADD = $(LIBM)
 libmp4_plugin_la_LDFLAGS = $(AM_LDFLAGS)
 if HAVE_ZLIB
diff --git a/modules/demux/mp4/languages.h b/modules/demux/mp4/languages.h
new file mode 100644
index 000..de7b04a
--- /dev/null
+++ b/modules/demux/mp4/languages.h
@@ -0,0 +1,91 @@
+/*
+ * languages.h: Quicktime language codes and ISO-639-2/T conversion
+ *
+ * Copyright (C) 2014 VLC authors and VideoLAN
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ */
+#ifndef _VLC_MP4_LANGUAGES_H
+#define _VLC_MP4_LANGUAGES_H 1
+
+static bool decodeQtLanguageCode( uint16_t i_language_code, char *psz_iso,
+  bool *b_mactables )
+{
+static const char * psz_qt_to_iso639_2T_lower =
+"eng""fra""deu""ita""nld"
+"swe""spa""dan""por""nor" /* 5-9 */
+"heb""jpn""ara""fin""gre"
+"isl""mlt""tur""hrv""zho" /* 15-19 */
+"urd""hin""tha""kor""lit"
+"pol""hun""est""lav""sme" /* 25-29 */
+"fao""fas""rus""zho""nld" /* nld==flemish */
+"gle""sqi""ron""ces""slk" /* 35-39 */
+"slv""yid""srp""mkd""bul"
+"ukr""bel""uzb""kaz""aze" /* 45-49 */
+"aze""hye""kat""mol""kir"
+"tgk""tuk""mon""mon""pus" /* 55-59 */
+"kur""kas""snd""bod""nep"
+"san""mar""ben""asm""guj" /* 65-69 */
+"pan""ori""mal""kan""tam"
+"tel""sin""mya""khm""lao" /* 75-79 */
+"vie""ind""tgl""msa""msa"
+"amh""tir""orm""som""swa" /* 85-89 */
+"kin""run""nya""mlg""epo" /* 90-94 */
+;
+
+static const char * psz_qt_to_iso639_2T_upper =
+"cym""eus""cat""lat""que" /* 128-132 */
+"grn""aym""tat""uig""dzo"
+"jaw""sun""glg""afr""bre" /* 138-142 */
+"iku""gla""glv""gle""ton"
+"gre" /* 148 */
+;
+
+if ( i_language_code < 0x400 || i_language_code == 0x7FFF )
+{
+const void *p_data;
+*b_mactables = true;
+if ( i_language_code <= 94 )
+{
+p_data = psz_qt_to_iso639_2T_lower + i_language_code * 3;
+}
+else if ( i_language_code >= 128 && i_language_code <= 148 )
+{
+i_language_code -= 128;
+p_data = psz_qt_to_iso639_2T_upper + i_language_code * 3;
+}
+else
+return false;
+memcpy( psz_iso, p_data, 3 );
+}
+else
+{
+*b_mactables 

[vlc-commits] Add audio/ogg and video/ogg to vlc.desktop.in

2014-09-27 Thread Jean-Baptiste Kempf
vlc/vlc-2.2 | branch: master | Jean-Baptiste Kempf  | Thu 
Sep 25 13:55:24 2014 +0200| [9f92846490751c29f2f07cc0d1000a0444b652b9] | 
committer: Jean-Baptiste Kempf

Add audio/ogg and video/ogg to vlc.desktop.in

Close #12282
Ref: Debian BTS #762564

(cherry picked from commit bba3fa4472757d7f7b7dcb855afaa5171743b729)
Signed-off-by: Jean-Baptiste Kempf 

> http://git.videolan.org/gitweb.cgi/vlc/vlc-2.2.git/?a=commit;h=9f92846490751c29f2f07cc0d1000a0444b652b9
---

 share/vlc.desktop.in |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/share/vlc.desktop.in b/share/vlc.desktop.in
index ab097bf..c5ea887 100644
--- a/share/vlc.desktop.in
+++ b/share/vlc.desktop.in
@@ -88,6 +88,6 @@ Icon=vlc
 Terminal=false
 Type=Application
 Categories=AudioVideo;Player;Recorder;
-MimeType=video/dv;video/mpeg;video/x-mpeg;video/msvideo;video/quicktime;video/x-anim;video/x-avi;video/x-ms-asf;video/x-ms-wmv;video/x-msvideo;video/x-nsv;video/x-flc;video/x-fli;video/x-flv;video/vnd.rn-realvideo;video/mp4;video/mp4v-es;video/mp2t;application/ogg;application/x-ogg;video/x-ogm+ogg;audio/x-vorbis+ogg;application/x-matroska;audio/x-matroska;video/x-matroska;video/webm;audio/webm;audio/x-mp3;audio/x-mpeg;audio/mpeg;audio/x-wav;audio/x-mpegurl;audio/x-scpls;audio/x-m4a;audio/x-ms-asf;audio/x-ms-asx;audio/x-ms-wax;application/vnd.rn-realmedia;audio/x-real-audio;audio/x-pn-realaudio;application/x-flac;audio/x-flac;application/x-shockwave-flash;misc/ultravox;audio/vnd.rn-realaudio;audio/x-pn-aiff;audio/x-pn-au;audio/x-pn-wav;audio/x-pn-windows-acm;image/vnd.rn-realpix;audio/x-pn-realaudio-plugin;application/x-extension-mp4;audio/mp4;audio/amr;audio/amr-wb;x-content/video-vcd;x-content/video-svcd;x-content/video-dvd;x-content/audio-cdda;x-content/audio-player;application/xs
 pf+xml;x-scheme-handler/mms;x-scheme-handler/rtmp;x-scheme-handler/rtsp;
+MimeType=video/dv;video/mpeg;video/x-mpeg;video/msvideo;video/quicktime;video/x-anim;video/x-avi;video/x-ms-asf;video/x-ms-wmv;video/x-msvideo;video/x-nsv;video/x-flc;video/x-fli;video/x-flv;video/vnd.rn-realvideo;video/mp4;video/mp4v-es;video/mp2t;application/ogg;application/x-ogg;video/x-ogm+ogg;audio/x-vorbis+ogg;audio/ogg;video/ogg;application/x-matroska;audio/x-matroska;video/x-matroska;video/webm;audio/webm;audio/x-mp3;audio/x-mpeg;audio/mpeg;audio/x-wav;audio/x-mpegurl;audio/x-scpls;audio/x-m4a;audio/x-ms-asf;audio/x-ms-asx;audio/x-ms-wax;application/vnd.rn-realmedia;audio/x-real-audio;audio/x-pn-realaudio;application/x-flac;audio/x-flac;application/x-shockwave-flash;misc/ultravox;audio/vnd.rn-realaudio;audio/x-pn-aiff;audio/x-pn-au;audio/x-pn-wav;audio/x-pn-windows-acm;image/vnd.rn-realpix;audio/x-pn-realaudio-plugin;application/x-extension-mp4;audio/mp4;audio/amr;audio/amr-wb;x-content/video-vcd;x-content/video-svcd;x-content/video-dvd;x-content/audio-cdda;x-content/audio-p
 
layer;application/xspf+xml;x-scheme-handler/mms;x-scheme-handler/rtmp;x-scheme-handler/rtsp;
 X-KDE-Protocols=ftp,http,https,mms,rtmp,rtsp,sftp,smb
 Keywords=Player;Capture;DVD;Audio;Video;Server;Broadcast;

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] demux: mp4: fix heap read overflow in vide handler

2014-09-27 Thread Francois Cartegnie
vlc/vlc-2.2 | branch: master | Francois Cartegnie  | Sat Sep 
27 18:31:35 2014 +0200| [456cb8f019e409b8130622757bedf23080659b04] | committer: 
Jean-Baptiste Kempf

demux: mp4: fix heap read overflow in vide handler

(cherry picked from commit 3417a40402599d56395fd2ae0e55baec25e41a52)
Signed-off-by: Jean-Baptiste Kempf 

> http://git.videolan.org/gitweb.cgi/vlc/vlc-2.2.git/?a=commit;h=456cb8f019e409b8130622757bedf23080659b04
---

 modules/demux/mp4/libmp4.c |2 ++
 1 file changed, 2 insertions(+)

diff --git a/modules/demux/mp4/libmp4.c b/modules/demux/mp4/libmp4.c
index cbe6e79..eaca2e6 100644
--- a/modules/demux/mp4/libmp4.c
+++ b/modules/demux/mp4/libmp4.c
@@ -1825,6 +1825,8 @@ int MP4_ReadBox_sample_vide( stream_t *p_stream, 
MP4_Box_t *p_box )
 MP4_GET4BYTES( p_box->data.p_sample_vide->i_qt_data_size );
 MP4_GET2BYTES( p_box->data.p_sample_vide->i_qt_frame_count );
 
+if ( i_read < 32 )
+MP4_READBOX_EXIT( 0 );
 memcpy( &p_box->data.p_sample_vide->i_compressorname, p_peek, 32 );
 p_peek += 32; i_read -= 32;
 

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] demux: mp4: fix overflow in cprt language decoding

2014-09-27 Thread Francois Cartegnie
vlc/vlc-2.2 | branch: master | Francois Cartegnie  | Sat Sep 
27 18:26:18 2014 +0200| [aff8684782ee144b6c06f7d63bfcca1ce3b31f10] | committer: 
Jean-Baptiste Kempf

demux: mp4: fix overflow in cprt language decoding

refs #12283

(cherry picked from commit fa6b1937bcbdd00726502c1f47a6826a08b5dade)
Signed-off-by: Jean-Baptiste Kempf 

> http://git.videolan.org/gitweb.cgi/vlc/vlc-2.2.git/?a=commit;h=aff8684782ee144b6c06f7d63bfcca1ce3b31f10
---

 modules/demux/mp4/libmp4.c |   19 +++
 modules/demux/mp4/libmp4.h |4 ++--
 2 files changed, 9 insertions(+), 14 deletions(-)

diff --git a/modules/demux/mp4/libmp4.c b/modules/demux/mp4/libmp4.c
index c68c340..6609369 100644
--- a/modules/demux/mp4/libmp4.c
+++ b/modules/demux/mp4/libmp4.c
@@ -2342,26 +2342,21 @@ static int MP4_ReadBox_elst( stream_t *p_stream, 
MP4_Box_t *p_box )
 
 static int MP4_ReadBox_cprt( stream_t *p_stream, MP4_Box_t *p_box )
 {
-unsigned int i_language;
+uint16_t i_language;
+bool b_mac;
 
 MP4_READBOX_ENTER( MP4_Box_data_cprt_t );
 
 MP4_GETVERSIONFLAGS( p_box->data.p_cprt );
 
-i_language = GetWBE( p_peek );
-for( unsigned i = 0; i < 3; i++ )
-{
-p_box->data.p_cprt->i_language[i] =
-( ( i_language >> ( (2-i)*5 ) )&0x1f ) + 0x60;
-}
-p_peek += 2; i_read -= 2;
+MP4_GET2BYTES( i_language );
+decodeQtLanguageCode( i_language, p_box->data.p_cprt->rgs_language, &b_mac 
);
+
 MP4_GETSTRINGZ( p_box->data.p_cprt->psz_notice );
 
 #ifdef MP4_VERBOSE
-msg_Dbg( p_stream, "read box: \"cprt\" language %c%c%c notice %s",
-  p_box->data.p_cprt->i_language[0],
-  p_box->data.p_cprt->i_language[1],
-  p_box->data.p_cprt->i_language[2],
+msg_Dbg( p_stream, "read box: \"cprt\" language %3.3s notice %s",
+  p_box->data.p_cprt->rgs_language,
   p_box->data.p_cprt->psz_notice );
 
 #endif
diff --git a/modules/demux/mp4/libmp4.h b/modules/demux/mp4/libmp4.h
index 2fad10e..5e71347 100644
--- a/modules/demux/mp4/libmp4.h
+++ b/modules/demux/mp4/libmp4.h
@@ -748,8 +748,8 @@ typedef struct MP4_Box_data_cprt_s
 {
 uint8_t  i_version;
 uint32_t i_flags;
-/* 1 pad bit */
-unsigned char i_language[3];
+
+char rgs_language[3]; /* ISO-639-2/T */
 
 char *psz_notice;
 } MP4_Box_data_cprt_t;

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] demux: mp4: don't read at all if not content

2014-09-27 Thread Francois Cartegnie
vlc/vlc-2.2 | branch: master | Francois Cartegnie  | Wed Sep 
24 13:32:37 2014 +0200| [a92109bb6e9fd5da974a78d74978ca67070139e7] | committer: 
Jean-Baptiste Kempf

demux: mp4: don't read at all if not content

fixes 1 byte read overflow

(cherry picked from commit 2d07e7885945ef30a55a078d956e4b6714c5c1ee)
Signed-off-by: Jean-Baptiste Kempf 

> http://git.videolan.org/gitweb.cgi/vlc/vlc-2.2.git/?a=commit;h=a92109bb6e9fd5da974a78d74978ca67070139e7
---

 modules/demux/mp4/libmp4.c |4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/modules/demux/mp4/libmp4.c b/modules/demux/mp4/libmp4.c
index e5e9697..1d02274 100644
--- a/modules/demux/mp4/libmp4.c
+++ b/modules/demux/mp4/libmp4.c
@@ -1396,7 +1396,7 @@ static int MP4_ReadBox_avcC( stream_t *p_stream, 
MP4_Box_t *p_box )
 if( !p_avcC->i_sps_length || !p_avcC->sps )
 goto error;
 
-for( i = 0; i < p_avcC->i_sps && i_read; i++ )
+for( i = 0; i < p_avcC->i_sps && i_read > 2; i++ )
 {
 MP4_GET2BYTES( p_avcC->i_sps_length[i] );
 if ( p_avcC->i_sps_length[i] > i_read )
@@ -1421,7 +1421,7 @@ static int MP4_ReadBox_avcC( stream_t *p_stream, 
MP4_Box_t *p_box )
 if( !p_avcC->i_pps_length || !p_avcC->pps )
 goto error;
 
-for( i = 0; i < p_avcC->i_pps && i_read; i++ )
+for( i = 0; i < p_avcC->i_pps && i_read > 2; i++ )
 {
 MP4_GET2BYTES( p_avcC->i_pps_length[i] );
 if( p_avcC->i_pps_length[i] > i_read )

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] demux: mp4: don't trust atom type processing stsd (fix #12285)

2014-09-27 Thread Francois Cartegnie
vlc/vlc-2.2 | branch: master | Francois Cartegnie  | Sat Sep 
27 17:43:33 2014 +0200| [72ba79902865231d688932205dfa2ce72ec5f9be] | committer: 
Jean-Baptiste Kempf

demux: mp4: don't trust atom type processing stsd (fix #12285)

(cherry picked from commit 99fd06680b5a71928c3ebcf08a4f138b6d70b33d)
Signed-off-by: Jean-Baptiste Kempf 

> http://git.videolan.org/gitweb.cgi/vlc/vlc-2.2.git/?a=commit;h=72ba79902865231d688932205dfa2ce72ec5f9be
---

 modules/demux/mp4/libmp4.c |4 
 modules/demux/mp4/libmp4.h |1 +
 modules/demux/mp4/mp4.c|   24 
 3 files changed, 25 insertions(+), 4 deletions(-)

diff --git a/modules/demux/mp4/libmp4.c b/modules/demux/mp4/libmp4.c
index f27d22b..7bfc620 100644
--- a/modules/demux/mp4/libmp4.c
+++ b/modules/demux/mp4/libmp4.c
@@ -1608,6 +1608,7 @@ static int MP4_ReadBox_trkn( stream_t *p_stream, 
MP4_Box_t *p_box )
 
 static int MP4_ReadBox_sample_soun( stream_t *p_stream, MP4_Box_t *p_box )
 {
+p_box->i_handler = ATOM_soun;
 MP4_READBOX_ENTER( MP4_Box_data_sample_soun_t );
 p_box->data.p_sample_soun->p_qt_description = NULL;
 
@@ -1779,6 +1780,7 @@ static void MP4_FreeBox_sample_soun( MP4_Box_t *p_box )
 
 int MP4_ReadBox_sample_vide( stream_t *p_stream, MP4_Box_t *p_box )
 {
+p_box->i_handler = ATOM_vide;
 MP4_READBOX_ENTER( MP4_Box_data_sample_vide_t );
 
 for( unsigned i = 0; i < 6 ; i++ )
@@ -1865,6 +1867,7 @@ static int MP4_ReadBox_sample_text( stream_t *p_stream, 
MP4_Box_t *p_box )
 {
 int32_t t;
 
+p_box->i_handler = ATOM_text;
 MP4_READBOX_ENTER( MP4_Box_data_sample_text_t );
 
 MP4_GET4BYTES( p_box->data.p_sample_text->i_reserved1 );
@@ -1915,6 +1918,7 @@ static int MP4_ReadBox_sample_text( stream_t *p_stream, 
MP4_Box_t *p_box )
 
 static int MP4_ReadBox_sample_tx3g( stream_t *p_stream, MP4_Box_t *p_box )
 {
+p_box->i_handler = ATOM_text;
 MP4_READBOX_ENTER( MP4_Box_data_sample_text_t );
 
 MP4_GET4BYTES( p_box->data.p_sample_text->i_reserved1 );
diff --git a/modules/demux/mp4/libmp4.h b/modules/demux/mp4/libmp4.h
index 9c8212a..cc75b93 100644
--- a/modules/demux/mp4/libmp4.h
+++ b/modules/demux/mp4/libmp4.h
@@ -1282,6 +1282,7 @@ typedef struct MP4_Box_s
 
 uint32_t i_type;
 uint32_t i_shortsize;
+uint32_t i_handler;  /* stsd handler */
 
 UUID_t   i_uuid;  /* Set if i_type == "uuid" */
 
diff --git a/modules/demux/mp4/mp4.c b/modules/demux/mp4/mp4.c
index 06732ce..f128386 100644
--- a/modules/demux/mp4/mp4.c
+++ b/modules/demux/mp4/mp4.c
@@ -2211,7 +2211,7 @@ static int TrackCreateES( demux_t *p_demux, mp4_track_t 
*p_track,
 switch( p_track->fmt.i_cat )
 {
 case VIDEO_ES:
-if ( !p_sample->data.p_sample_vide )
+if ( !p_sample->data.p_sample_vide || p_sample->i_handler != ATOM_vide 
)
 break;
 p_track->fmt.video.i_width = p_sample->data.p_sample_vide->i_width;
 p_track->fmt.video.i_height = p_sample->data.p_sample_vide->i_height;
@@ -2268,7 +2268,7 @@ static int TrackCreateES( demux_t *p_demux, mp4_track_t 
*p_track,
 break;
 
 case AUDIO_ES:
-if ( !p_sample->data.p_sample_soun )
+if ( !p_sample->data.p_sample_soun || p_sample->i_handler != ATOM_soun 
)
 break;
 p_track->fmt.audio.i_channels =
 p_sample->data.p_sample_soun->i_channelcount;
@@ -2409,6 +2409,8 @@ static int TrackCreateES( demux_t *p_demux, mp4_track_t 
*p_track,
 case( VLC_FOURCC( 'r', 'a', 'w', ' ' ) ):
 case( VLC_FOURCC( 'N', 'O', 'N', 'E' ) ):
 {
+if ( p_sample->i_handler != ATOM_soun )
+break;
 MP4_Box_data_sample_soun_t *p_soun = p_sample->data.p_sample_soun;
 
 if(p_soun && (p_soun->i_samplesize+7)/8 == 1 )
@@ -2439,6 +2441,8 @@ static int TrackCreateES( demux_t *p_demux, mp4_track_t 
*p_track,
 case( VLC_FOURCC( 't', 'e', 'x', 't' ) ):
 case( VLC_FOURCC( 't', 'x', '3', 'g' ) ):
 {
+if ( p_sample->i_handler != ATOM_text )
+break;
 p_track->fmt.i_codec = VLC_CODEC_TX3G;
 MP4_Box_data_sample_text_t *p_text = p_sample->data.p_sample_text;
 if ( p_text )
@@ -2495,6 +2499,8 @@ static int TrackCreateES( demux_t *p_demux, mp4_track_t 
*p_track,
 break;
 case VLC_CODEC_DVD_LPCM:
 {
+if ( p_sample->i_handler != ATOM_soun )
+break;
 MP4_Box_data_sample_soun_t *p_soun = p_sample->data.p_sample_soun;
 if( p_soun->i_qt_version == 2 )
 {
@@ -2708,6 +2714,9 @@ static int TrackCreateES( demux_t *p_demux, mp4_track_t 
*p_track,
 case VLC_FOURCC( 'V', 'P', '3', '1' ):
 case VLC_FOURCC( '3', 'I', 'V', '1' ):
 case VLC_FOURCC( 'Z', 'y', 'G', 'o' ):
+{
+if ( p_sample->i_handler != ATOM_vide )
+break;
 p_track->fmt.i_extra =
 

[vlc-commits] demux: mp4: use new lang tables

2014-09-27 Thread Francois Cartegnie
vlc/vlc-2.2 | branch: master | Francois Cartegnie  | Fri Sep 
26 19:27:50 2014 +0200| [0cbdd515e52ba2ea078922c55b856ae13c9cdb17] | committer: 
Jean-Baptiste Kempf

demux: mp4: use new lang tables

The "```" case could also never happen as this is the
decoding of value 0 which should map to mac.

(cherry picked from commit 07a88c4b37cb6e38082966679bb8f1e40c9894eb)
Signed-off-by: Jean-Baptiste Kempf 

> http://git.videolan.org/gitweb.cgi/vlc/vlc-2.2.git/?a=commit;h=0cbdd515e52ba2ea078922c55b856ae13c9cdb17
---

 modules/demux/mp4/libmp4.c |   14 ---
 modules/demux/mp4/libmp4.h |7 +++---
 modules/demux/mp4/mp4.c|   57 ++--
 3 files changed, 9 insertions(+), 69 deletions(-)

diff --git a/modules/demux/mp4/libmp4.c b/modules/demux/mp4/libmp4.c
index 5754b7f..c68c340 100644
--- a/modules/demux/mp4/libmp4.c
+++ b/modules/demux/mp4/libmp4.c
@@ -884,12 +884,8 @@ static int MP4_ReadBox_mdhd( stream_t *p_stream, MP4_Box_t 
*p_box )
 }
 
 MP4_GET2BYTES( i_language );
-p_box->data.p_mdhd->i_language_code = i_language;
-for( unsigned i = 0; i < 3; i++ )
-{
-p_box->data.p_mdhd->i_language[i] =
-( ( i_language >> ( (2-i)*5 ) )&0x1f ) + 0x60;
-}
+decodeQtLanguageCode( i_language, p_box->data.p_mdhd->rgs_language,
+  &p_box->data.p_mdhd->b_mac_encoding );
 
 MP4_GET2BYTES( p_box->data.p_mdhd->i_predefined );
 
@@ -897,14 +893,12 @@ static int MP4_ReadBox_mdhd( stream_t *p_stream, 
MP4_Box_t *p_box )
 MP4_ConvertDate2Str( s_creation_time, p_box->data.p_mdhd->i_creation_time, 
false );
 MP4_ConvertDate2Str( s_modification_time, 
p_box->data.p_mdhd->i_modification_time, false );
 MP4_ConvertDate2Str( s_duration, p_box->data.p_mdhd->i_duration, true );
-msg_Dbg( p_stream, "read box: \"mdhd\" creation %s modification %s time 
scale %d duration %s language %c%c%c",
+msg_Dbg( p_stream, "read box: \"mdhd\" creation %s modification %s time 
scale %d duration %s language %3.3s",
   s_creation_time,
   s_modification_time,
   (uint32_t)p_box->data.p_mdhd->i_timescale,
   s_duration,
-  p_box->data.p_mdhd->i_language[0],
-  p_box->data.p_mdhd->i_language[1],
-  p_box->data.p_mdhd->i_language[2] );
+  (char*) &p_box->data.p_mdhd->rgs_language );
 #endif
 MP4_READBOX_EXIT( 1 );
 }
diff --git a/modules/demux/mp4/libmp4.h b/modules/demux/mp4/libmp4.h
index cc75b93..2fad10e 100644
--- a/modules/demux/mp4/libmp4.h
+++ b/modules/demux/mp4/libmp4.h
@@ -379,10 +379,9 @@ typedef struct MP4_Box_data_mdhd_s
 uint32_t i_timescale;
 uint64_t i_duration;
 
-/* one bit for pad */
-uint16_t  i_language_code;
-/* unsigned int(5)[3] language difference with 0x60*/
-unsigned char i_language[3];
+char rgs_language[3]; /* ISO-639-2/T or Mac lang table */
+bool b_mac_encoding;  /* media using mac encoding */
+
 uint16_t i_predefined;
 
 } MP4_Box_data_mdhd_t;
diff --git a/modules/demux/mp4/mp4.c b/modules/demux/mp4/mp4.c
index f128386..dad0ad0 100644
--- a/modules/demux/mp4/mp4.c
+++ b/modules/demux/mp4/mp4.c
@@ -125,7 +125,6 @@ static int  MP4_TrackNextSample( demux_t *, mp4_track_t 
*, uint32_t );
 static void MP4_TrackSetELST( demux_t *, mp4_track_t *, int64_t );
 
 static void MP4_UpdateSeekpoint( demux_t * );
-static const char *MP4_ConvertMacCode( uint16_t );
 
 static MP4_Box_t * MP4_GetTrexByTrackID( MP4_Box_t *p_moov, const uint32_t 
i_id );
 
@@ -3115,19 +3114,8 @@ static void MP4_TrackCreate( demux_t *p_demux, 
mp4_track_t *p_track,
 if( p_track->i_timescale == 0 )
 return;
 
-if( BOXDATA(p_mdhd)->i_language_code < 0x400 )
-{
-strcpy( language, MP4_ConvertMacCode( BOXDATA(p_mdhd)->i_language_code 
) );
-p_track->b_mac_encoding = true;
-}
-else if( BOXDATA(p_mdhd)->i_language_code == 0x7fff )
-p_track->b_mac_encoding = true;
-else
-{
-for( unsigned i = 0; i < 3; i++ )
-language[i] = BOXDATA(p_mdhd)->i_language[i];
-language[3] = '\0';
-}
+memcpy( &language, BOXDATA(p_mdhd)->rgs_language, 3 );
+p_track->b_mac_encoding = BOXDATA(p_mdhd)->b_mac_encoding;
 
 switch( p_hdlr->data.p_hdlr->i_handler_type )
 {
@@ -3627,47 +3615,6 @@ static void MP4_TrackSetELST( demux_t *p_demux, 
mp4_track_t *tk,
 }
 }
 
-/* */
-static const char *MP4_ConvertMacCode( uint16_t i_code )
-{
-static const struct { const char psz_iso639_1[3]; uint16_t i_code; } 
p_cvt[] = {
-{ "en",   0 }, { "fr",   1 }, { "de",   2 }, { "it",   3 }, { "nl",   
4 },
-{ "sv",   5 }, { "es",   6 }, { "da",   7 }, { "pt",   8 }, { "no",   
9 },
-{ "he",  10 }, { "ja",  11 }, { "ar",  12 }, { "fi",  13 }, { "el",  
14 },
-{ "is",  15 }, { "mt",  16 }, { "tr",  17 }, { "hr",  18 }, { "zh",  
19 },
-{ 

[vlc-commits] demux: mp4: fix heap overflow reading esds

2014-09-27 Thread Francois Cartegnie
vlc/vlc-2.2 | branch: master | Francois Cartegnie  | Sat Sep 
27 18:29:13 2014 +0200| [86271ad8ba8e61fec437c9c8a6b71686712996bc] | committer: 
Jean-Baptiste Kempf

demux: mp4: fix heap overflow reading esds

(cherry picked from commit 44c7fb66827345a5179b4f919c7234c65d569db1)
Signed-off-by: Jean-Baptiste Kempf 

> http://git.videolan.org/gitweb.cgi/vlc/vlc-2.2.git/?a=commit;h=86271ad8ba8e61fec437c9c8a6b71686712996bc
---

 modules/demux/mp4/libmp4.c |1 +
 1 file changed, 1 insertion(+)

diff --git a/modules/demux/mp4/libmp4.c b/modules/demux/mp4/libmp4.c
index 7bfc620..cbe6e79 100644
--- a/modules/demux/mp4/libmp4.c
+++ b/modules/demux/mp4/libmp4.c
@@ -1242,6 +1242,7 @@ static int MP4_ReadBox_esds( stream_t *p_stream, 
MP4_Box_t *p_box )
 unsigned int i_len;
 
 MP4_GET1BYTE( i_len );
+i_len = __MIN(i_read, i_len);
 es_descriptor.psz_URL = malloc( i_len + 1 );
 if( es_descriptor.psz_URL )
 {

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] theora: cleanup

2014-09-27 Thread Tristan Matthews
vlc | branch: master | Tristan Matthews  | Sat Sep 27 
12:45:56 2014 -0400| [ba3094452b50ed262e74145234e0c05e34796a58] | committer: 
Tristan Matthews

theora: cleanup

Remove dead code and superfluous width/height variables.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=ba3094452b50ed262e74145234e0c05e34796a58
---

 modules/codec/theora.c |   50 +---
 1 file changed, 22 insertions(+), 28 deletions(-)

diff --git a/modules/codec/theora.c b/modules/codec/theora.c
index 3c033f4..ded8538 100644
--- a/modules/codec/theora.c
+++ b/modules/codec/theora.c
@@ -566,7 +566,6 @@ static void CloseDecoder( vlc_object_t *p_this )
 th_info_clear(&p_sys->ti);
 th_comment_clear(&p_sys->tc);
 th_decode_free(p_sys->tcx);
-p_sys->tcx = NULL;
 free( p_sys );
 }
 
@@ -635,7 +634,6 @@ struct encoder_sys_t
 th_info  ti; /* theora bitstream settings */
 th_comment   tc; /* theora comment header */
 th_enc_ctx   *tcx;   /* theora context */
-int i_width, i_height;
 };
 
 /*
@@ -695,9 +693,6 @@ static int OpenEncoder( vlc_object_t *p_this )
 p_sys->ti.pic_x = 0 /*frame_x_offset*/;
 p_sys->ti.pic_y = 0 /*frame_y_offset*/;
 
-p_sys->i_width = p_sys->ti.frame_width;
-p_sys->i_height = p_sys->ti.frame_height;
-
 if( !p_enc->fmt_in.video.i_frame_rate ||
 !p_enc->fmt_in.video.i_frame_rate_base )
 {
@@ -783,77 +778,77 @@ static block_t *Encode( encoder_t *p_enc, picture_t 
*p_pict )
 ogg_packet oggpacket;
 block_t *p_block;
 th_ycbcr_buffer ycbcr;
-int i;
+unsigned i;
 
 if( !p_pict ) return NULL;
 /* Sanity check */
-if( p_pict->p[0].i_pitch < (int)p_sys->i_width ||
-p_pict->p[0].i_lines < (int)p_sys->i_height )
+if( p_pict->p[0].i_pitch < (int)p_sys->ti.frame_width ||
+p_pict->p[0].i_lines < (int)p_sys->ti.frame_height )
 {
 msg_Warn( p_enc, "frame is smaller than encoding size"
   "(%ix%i->%ix%i) -> dropping frame",
   p_pict->p[0].i_pitch, p_pict->p[0].i_lines,
-  p_sys->i_width, p_sys->i_height );
+  p_sys->ti.frame_width, p_sys->ti.frame_height );
 return NULL;
 }
 
 /* Fill padding */
-if( p_pict->p[0].i_visible_pitch < (int)p_sys->i_width )
+if( p_pict->p[0].i_visible_pitch < (int)p_sys->ti.frame_width )
 {
-for( i = 0; i < p_sys->i_height; i++ )
+for( i = 0; i < p_sys->ti.frame_height; i++ )
 {
 memset( p_pict->p[0].p_pixels + i * p_pict->p[0].i_pitch +
 p_pict->p[0].i_visible_pitch,
 *( p_pict->p[0].p_pixels + i * p_pict->p[0].i_pitch +
p_pict->p[0].i_visible_pitch - 1 ),
-p_sys->i_width - p_pict->p[0].i_visible_pitch );
+p_sys->ti.frame_width - p_pict->p[0].i_visible_pitch );
 }
-for( i = 0; i < p_sys->i_height / 2; i++ )
+for( i = 0; i < p_sys->ti.frame_height / 2; i++ )
 {
 memset( p_pict->p[1].p_pixels + i * p_pict->p[1].i_pitch +
 p_pict->p[1].i_visible_pitch,
 *( p_pict->p[1].p_pixels + i * p_pict->p[1].i_pitch +
p_pict->p[1].i_visible_pitch - 1 ),
-p_sys->i_width / 2 - p_pict->p[1].i_visible_pitch );
+p_sys->ti.frame_width / 2 - p_pict->p[1].i_visible_pitch );
 memset( p_pict->p[2].p_pixels + i * p_pict->p[2].i_pitch +
 p_pict->p[2].i_visible_pitch,
 *( p_pict->p[2].p_pixels + i * p_pict->p[2].i_pitch +
p_pict->p[2].i_visible_pitch - 1 ),
-p_sys->i_width / 2 - p_pict->p[2].i_visible_pitch );
+p_sys->ti.frame_width / 2 - p_pict->p[2].i_visible_pitch );
 }
 }
 
-if( p_pict->p[0].i_visible_lines < (int)p_sys->i_height )
+if( p_pict->p[0].i_visible_lines < (int)p_sys->ti.frame_height )
 {
-for( i = p_pict->p[0].i_visible_lines; i < p_sys->i_height; i++ )
+for( i = p_pict->p[0].i_visible_lines; i < p_sys->ti.frame_height; i++ 
)
 {
 memset( p_pict->p[0].p_pixels + i * p_pict->p[0].i_pitch, 0,
-p_sys->i_width );
+p_sys->ti.frame_width );
 }
-for( i = p_pict->p[1].i_visible_lines; i < p_sys->i_height / 2; i++ )
+for( i = p_pict->p[1].i_visible_lines; i < p_sys->ti.frame_height / 2; 
i++ )
 {
 memset( p_pict->p[1].p_pixels + i * p_pict->p[1].i_pitch, 0x80,
-p_sys->i_width / 2 );
+p_sys->ti.frame_width / 2 );
 memset( p_pict->p[2].p_pixels + i * p_pict->p[2].i_pitch, 0x80,
-p_sys->i_width / 2 );
+

[vlc-commits] demux: mp4: fix heap read overflow in vide handler

2014-09-27 Thread Francois Cartegnie
vlc | branch: master | Francois Cartegnie  | Sat Sep 27 
18:31:35 2014 +0200| [3417a40402599d56395fd2ae0e55baec25e41a52] | committer: 
Francois Cartegnie

demux: mp4: fix heap read overflow in vide handler

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=3417a40402599d56395fd2ae0e55baec25e41a52
---

 modules/demux/mp4/libmp4.c |2 ++
 1 file changed, 2 insertions(+)

diff --git a/modules/demux/mp4/libmp4.c b/modules/demux/mp4/libmp4.c
index 63d7db4..84b3f80 100644
--- a/modules/demux/mp4/libmp4.c
+++ b/modules/demux/mp4/libmp4.c
@@ -1907,6 +1907,8 @@ int MP4_ReadBox_sample_vide( stream_t *p_stream, 
MP4_Box_t *p_box )
 MP4_GET4BYTES( p_box->data.p_sample_vide->i_qt_data_size );
 MP4_GET2BYTES( p_box->data.p_sample_vide->i_qt_frame_count );
 
+if ( i_read < 32 )
+MP4_READBOX_EXIT( 0 );
 memcpy( &p_box->data.p_sample_vide->i_compressorname, p_peek, 32 );
 p_peek += 32; i_read -= 32;
 

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] demux: mp4: fix overflow in cprt language decoding

2014-09-27 Thread Francois Cartegnie
vlc | branch: master | Francois Cartegnie  | Sat Sep 27 
18:26:18 2014 +0200| [fa6b1937bcbdd00726502c1f47a6826a08b5dade] | committer: 
Francois Cartegnie

demux: mp4: fix overflow in cprt language decoding

refs #12283

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=fa6b1937bcbdd00726502c1f47a6826a08b5dade
---

 modules/demux/mp4/libmp4.c |   19 +++
 modules/demux/mp4/libmp4.h |4 ++--
 2 files changed, 9 insertions(+), 14 deletions(-)

diff --git a/modules/demux/mp4/libmp4.c b/modules/demux/mp4/libmp4.c
index 1961efa..1263723 100644
--- a/modules/demux/mp4/libmp4.c
+++ b/modules/demux/mp4/libmp4.c
@@ -2426,26 +2426,21 @@ static int MP4_ReadBox_elst( stream_t *p_stream, 
MP4_Box_t *p_box )
 
 static int MP4_ReadBox_cprt( stream_t *p_stream, MP4_Box_t *p_box )
 {
-unsigned int i_language;
+uint16_t i_language;
+bool b_mac;
 
 MP4_READBOX_ENTER( MP4_Box_data_cprt_t );
 
 MP4_GETVERSIONFLAGS( p_box->data.p_cprt );
 
-i_language = GetWBE( p_peek );
-for( unsigned i = 0; i < 3; i++ )
-{
-p_box->data.p_cprt->i_language[i] =
-( ( i_language >> ( (2-i)*5 ) )&0x1f ) + 0x60;
-}
-p_peek += 2; i_read -= 2;
+MP4_GET2BYTES( i_language );
+decodeQtLanguageCode( i_language, p_box->data.p_cprt->rgs_language, &b_mac 
);
+
 MP4_GETSTRINGZ( p_box->data.p_cprt->psz_notice );
 
 #ifdef MP4_VERBOSE
-msg_Dbg( p_stream, "read box: \"cprt\" language %c%c%c notice %s",
-  p_box->data.p_cprt->i_language[0],
-  p_box->data.p_cprt->i_language[1],
-  p_box->data.p_cprt->i_language[2],
+msg_Dbg( p_stream, "read box: \"cprt\" language %3.3s notice %s",
+  p_box->data.p_cprt->rgs_language,
   p_box->data.p_cprt->psz_notice );
 
 #endif
diff --git a/modules/demux/mp4/libmp4.h b/modules/demux/mp4/libmp4.h
index 8668052..683b677 100644
--- a/modules/demux/mp4/libmp4.h
+++ b/modules/demux/mp4/libmp4.h
@@ -756,8 +756,8 @@ typedef struct MP4_Box_data_cprt_s
 {
 uint8_t  i_version;
 uint32_t i_flags;
-/* 1 pad bit */
-unsigned char i_language[3];
+
+char rgs_language[3]; /* ISO-639-2/T */
 
 char *psz_notice;
 } MP4_Box_data_cprt_t;

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] demux: mp4: fix heap overflow reading esds

2014-09-27 Thread Francois Cartegnie
vlc | branch: master | Francois Cartegnie  | Sat Sep 27 
18:29:13 2014 +0200| [44c7fb66827345a5179b4f919c7234c65d569db1] | committer: 
Francois Cartegnie

demux: mp4: fix heap overflow reading esds

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=44c7fb66827345a5179b4f919c7234c65d569db1
---

 modules/demux/mp4/libmp4.c |1 +
 1 file changed, 1 insertion(+)

diff --git a/modules/demux/mp4/libmp4.c b/modules/demux/mp4/libmp4.c
index 1263723..63d7db4 100644
--- a/modules/demux/mp4/libmp4.c
+++ b/modules/demux/mp4/libmp4.c
@@ -1237,6 +1237,7 @@ static int MP4_ReadBox_esds( stream_t *p_stream, 
MP4_Box_t *p_box )
 unsigned int i_len;
 
 MP4_GET1BYTE( i_len );
+i_len = __MIN(i_read, i_len);
 es_descriptor.psz_URL = malloc( i_len + 1 );
 if( es_descriptor.psz_URL )
 {

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] demux: mkv: fix previous type fix

2014-09-27 Thread Francois Cartegnie
vlc | branch: master | Francois Cartegnie  | Sat Sep 27 
18:12:55 2014 +0200| [2ca410382c2ac6443d99700a7e4399e0af591076] | committer: 
Francois Cartegnie

demux: mkv: fix previous type fix

first segment is always 0, not an undefined value
regression introduced by aaebd49a151fae2fd86242dadd3e6e93cbb41e3b
instead of removing the tautology

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=2ca410382c2ac6443d99700a7e4399e0af591076
---

 modules/demux/mkv/virtual_segment.hpp |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/modules/demux/mkv/virtual_segment.hpp 
b/modules/demux/mkv/virtual_segment.hpp
index 5e659cd..ed40e59 100644
--- a/modules/demux/mkv/virtual_segment.hpp
+++ b/modules/demux/mkv/virtual_segment.hpp
@@ -121,7 +121,7 @@ public:
 
 inline virtual_edition_c * CurrentEdition()
 {
-if( i_current_edition > 0 && i_current_edition < editions.size() )
+if( i_current_edition < editions.size() )
 return editions[i_current_edition];
 return NULL;
 }

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] demux: mp4: don't trust atom type processing stsd (fix #12285)

2014-09-27 Thread Francois Cartegnie
vlc | branch: master | Francois Cartegnie  | Sat Sep 27 
17:43:33 2014 +0200| [99fd06680b5a71928c3ebcf08a4f138b6d70b33d] | committer: 
Francois Cartegnie

demux: mp4: don't trust atom type processing stsd (fix #12285)

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=99fd06680b5a71928c3ebcf08a4f138b6d70b33d
---

 modules/demux/mp4/libmp4.c |4 
 modules/demux/mp4/libmp4.h |1 +
 modules/demux/mp4/mp4.c|   24 
 3 files changed, 25 insertions(+), 4 deletions(-)

diff --git a/modules/demux/mp4/libmp4.c b/modules/demux/mp4/libmp4.c
index 8cb6f8b..1961efa 100644
--- a/modules/demux/mp4/libmp4.c
+++ b/modules/demux/mp4/libmp4.c
@@ -1690,6 +1690,7 @@ static int MP4_ReadBox_trkn( stream_t *p_stream, 
MP4_Box_t *p_box )
 
 static int MP4_ReadBox_sample_soun( stream_t *p_stream, MP4_Box_t *p_box )
 {
+p_box->i_handler = ATOM_soun;
 MP4_READBOX_ENTER( MP4_Box_data_sample_soun_t );
 p_box->data.p_sample_soun->p_qt_description = NULL;
 
@@ -1861,6 +1862,7 @@ static void MP4_FreeBox_sample_soun( MP4_Box_t *p_box )
 
 int MP4_ReadBox_sample_vide( stream_t *p_stream, MP4_Box_t *p_box )
 {
+p_box->i_handler = ATOM_vide;
 MP4_READBOX_ENTER( MP4_Box_data_sample_vide_t );
 
 for( unsigned i = 0; i < 6 ; i++ )
@@ -1947,6 +1949,7 @@ static int MP4_ReadBox_sample_text( stream_t *p_stream, 
MP4_Box_t *p_box )
 {
 int32_t t;
 
+p_box->i_handler = ATOM_text;
 MP4_READBOX_ENTER( MP4_Box_data_sample_text_t );
 
 MP4_GET4BYTES( p_box->data.p_sample_text->i_reserved1 );
@@ -1997,6 +2000,7 @@ static int MP4_ReadBox_sample_text( stream_t *p_stream, 
MP4_Box_t *p_box )
 
 static int MP4_ReadBox_sample_tx3g( stream_t *p_stream, MP4_Box_t *p_box )
 {
+p_box->i_handler = ATOM_text;
 MP4_READBOX_ENTER( MP4_Box_data_sample_text_t );
 
 MP4_GET4BYTES( p_box->data.p_sample_text->i_reserved1 );
diff --git a/modules/demux/mp4/libmp4.h b/modules/demux/mp4/libmp4.h
index 3893e99..8668052 100644
--- a/modules/demux/mp4/libmp4.h
+++ b/modules/demux/mp4/libmp4.h
@@ -1375,6 +1375,7 @@ typedef struct MP4_Box_s
 
 uint32_t i_type;
 uint32_t i_shortsize;
+uint32_t i_handler;  /* stsd handler */
 
 enum
 {
diff --git a/modules/demux/mp4/mp4.c b/modules/demux/mp4/mp4.c
index 34cd2c2..8dceb5a 100644
--- a/modules/demux/mp4/mp4.c
+++ b/modules/demux/mp4/mp4.c
@@ -2306,7 +2306,7 @@ static int TrackCreateES( demux_t *p_demux, mp4_track_t 
*p_track,
 switch( p_track->fmt.i_cat )
 {
 case VIDEO_ES:
-if ( !p_sample->data.p_sample_vide )
+if ( !p_sample->data.p_sample_vide || p_sample->i_handler != ATOM_vide 
)
 break;
 p_track->fmt.video.i_width = p_sample->data.p_sample_vide->i_width;
 p_track->fmt.video.i_height = p_sample->data.p_sample_vide->i_height;
@@ -2363,7 +2363,7 @@ static int TrackCreateES( demux_t *p_demux, mp4_track_t 
*p_track,
 break;
 
 case AUDIO_ES:
-if ( !p_sample->data.p_sample_soun )
+if ( !p_sample->data.p_sample_soun || p_sample->i_handler != ATOM_soun 
)
 break;
 p_track->fmt.audio.i_channels =
 p_sample->data.p_sample_soun->i_channelcount;
@@ -2548,6 +2548,8 @@ static int TrackCreateES( demux_t *p_demux, mp4_track_t 
*p_track,
 case( VLC_FOURCC( 'r', 'a', 'w', ' ' ) ):
 case( VLC_FOURCC( 'N', 'O', 'N', 'E' ) ):
 {
+if ( p_sample->i_handler != ATOM_soun )
+break;
 MP4_Box_data_sample_soun_t *p_soun = p_sample->data.p_sample_soun;
 
 if(p_soun && (p_soun->i_samplesize+7)/8 == 1 )
@@ -2584,6 +2586,8 @@ static int TrackCreateES( demux_t *p_demux, mp4_track_t 
*p_track,
 case( VLC_FOURCC( 't', 'e', 'x', 't' ) ):
 case( VLC_FOURCC( 't', 'x', '3', 'g' ) ):
 {
+if ( p_sample->i_handler != ATOM_text )
+break;
 p_track->fmt.i_codec = VLC_CODEC_TX3G;
 MP4_Box_data_sample_text_t *p_text = p_sample->data.p_sample_text;
 if ( p_text )
@@ -2640,6 +2644,8 @@ static int TrackCreateES( demux_t *p_demux, mp4_track_t 
*p_track,
 break;
 case VLC_CODEC_DVD_LPCM:
 {
+if ( p_sample->i_handler != ATOM_soun )
+break;
 MP4_Box_data_sample_soun_t *p_soun = p_sample->data.p_sample_soun;
 if( p_soun->i_qt_version == 2 )
 {
@@ -2853,6 +2859,9 @@ static int TrackCreateES( demux_t *p_demux, mp4_track_t 
*p_track,
 case VLC_FOURCC( 'V', 'P', '3', '1' ):
 case VLC_FOURCC( '3', 'I', 'V', '1' ):
 case VLC_FOURCC( 'Z', 'y', 'G', 'o' ):
+{
+if ( p_sample->i_handler != ATOM_vide )
+break;
 p_track->fmt.i_extra =
 p_sample->data.p_sample_vide->i_qt_image_description;
 if( p_track->fmt.i_extra > 0 )
@@ -2863,6 +2872,7 @@ static int TrackCreateES( demux_t

[vlc-commits] demux: mp4: add boxdata and missing checks

2014-09-27 Thread Francois Cartegnie
vlc | branch: master | Francois Cartegnie  | Sat Sep 27 
17:57:53 2014 +0200| [3c8d0b092bf66feeb48d54dd88710af48f5aa735] | committer: 
Francois Cartegnie

demux: mp4: add boxdata and missing checks

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=3c8d0b092bf66feeb48d54dd88710af48f5aa735
---

 modules/demux/mp4/mp4.c |   28 +---
 1 file changed, 13 insertions(+), 15 deletions(-)

diff --git a/modules/demux/mp4/mp4.c b/modules/demux/mp4/mp4.c
index 8dceb5a..a146de7 100644
--- a/modules/demux/mp4/mp4.c
+++ b/modules/demux/mp4/mp4.c
@@ -2509,24 +2509,23 @@ static int TrackCreateES( demux_t *p_demux, mp4_track_t 
*p_track,
 }
 case( ATOM_eac3 ):
 {
-MP4_Box_t *p_dec3_box = MP4_BoxGet(  p_sample, "dec3", 0 );
+const MP4_Box_t *p_dec3 = MP4_BoxGet(  p_sample, "dec3", 0 );
 
 p_track->fmt.i_codec = VLC_CODEC_EAC3;
-if( p_dec3_box )
+if( p_dec3 && BOXDATA(p_dec3) )
 {
-MP4_Box_data_dec3_t *p_dec3 = p_dec3_box->data.p_dec3;
 p_track->fmt.audio.i_channels = 0;
-p_track->fmt.i_bitrate = p_dec3->i_data_rate * 1000;
+p_track->fmt.i_bitrate = BOXDATA(p_dec3)->i_data_rate * 1000;
 p_track->fmt.audio.i_bitspersample = 0;
 }
 break;
 }
 case( ATOM_ac3 ):
 {
-MP4_Box_t *p_dac3_box = MP4_BoxGet(  p_sample, "dac3", 0 );
+const MP4_Box_t *p_dac3 = MP4_BoxGet(  p_sample, "dac3", 0 );
 
 p_track->fmt.i_codec = VLC_CODEC_A52;
-if( p_dac3_box )
+if( p_dac3 && BOXDATA(p_dac3) )
 {
 static const int pi_bitrate[] = {
  32,  40,  48,  56,
@@ -2535,11 +2534,10 @@ static int TrackCreateES( demux_t *p_demux, mp4_track_t 
*p_track,
 256, 320, 384, 448,
 512, 576, 640,
 };
-MP4_Box_data_dac3_t *p_dac3 = p_dac3_box->data.p_dac3;
 p_track->fmt.audio.i_channels = 0;
 p_track->fmt.i_bitrate = 0;
-if( p_dac3->i_bitrate_code < 
sizeof(pi_bitrate)/sizeof(*pi_bitrate) )
-p_track->fmt.i_bitrate = 
pi_bitrate[p_dac3->i_bitrate_code] * 1000;
+if( BOXDATA(p_dac3)->i_bitrate_code < 
sizeof(pi_bitrate)/sizeof(*pi_bitrate) )
+p_track->fmt.i_bitrate = 
pi_bitrate[BOXDATA(p_dac3)->i_bitrate_code] * 1000;
 p_track->fmt.audio.i_bitspersample = 0;
 }
 break;
@@ -2905,7 +2903,7 @@ static int TrackCreateES( demux_t *p_demux, mp4_track_t 
*p_track,
 case VLC_FOURCC( 'v', 'c', '-', '1' ):
 {
 MP4_Box_t *p_dvc1 = MP4_BoxGet( p_sample, "dvc1" );
-if( p_dvc1 )
+if( p_dvc1 && BOXDATA(p_dvc1) )
 {
 p_track->fmt.i_extra = BOXDATA(p_dvc1)->i_vc1;
 if( p_track->fmt.i_extra > 0 )
@@ -2927,7 +2925,7 @@ static int TrackCreateES( demux_t *p_demux, mp4_track_t 
*p_track,
 {
 MP4_Box_t *p_avcC = MP4_BoxGet( p_sample, "avcC" );
 
-if( p_avcC )
+if( p_avcC && BOXDATA(p_avcC) )
 {
 p_track->fmt.i_extra = BOXDATA(p_avcC)->i_avcC;
 if( p_track->fmt.i_extra > 0 )
@@ -2948,13 +2946,13 @@ static int TrackCreateES( demux_t *p_demux, mp4_track_t 
*p_track,
 {
 MP4_Box_t *p_hvcC = MP4_BoxGet( p_sample, "hvcC" );
 
-if( p_hvcC )
+if( p_hvcC && BOXDATA(p_hvcC) )
 {
-p_track->fmt.i_extra = p_hvcC->data.p_hvcC->i_hvcC;
+p_track->fmt.i_extra = BOXDATA(p_hvcC)->i_hvcC;
 if( p_track->fmt.i_extra > 0 )
 {
-p_track->fmt.p_extra = malloc( 
p_hvcC->data.p_hvcC->i_hvcC );
-memcpy( p_track->fmt.p_extra, 
p_hvcC->data.p_hvcC->p_hvcC,
+p_track->fmt.p_extra = malloc( BOXDATA(p_hvcC)->i_hvcC 
);
+memcpy( p_track->fmt.p_extra, BOXDATA(p_hvcC)->p_hvcC,
 p_track->fmt.i_extra );
 }
 p_track->fmt.i_codec = VLC_CODEC_HEVC;

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] wl_screenshooter: Wayland screen grabber

2014-09-27 Thread Rémi Denis-Courmont
vlc | branch: master | Rémi Denis-Courmont  | Sat Sep 27 
18:53:15 2014 +0300| [cc79ed90a9d70190be59924aa6d730a49d002e29] | committer: 
Rémi Denis-Courmont

wl_screenshooter: Wayland screen grabber

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=cc79ed90a9d70190be59924aa6d730a49d002e29
---

 NEWS|1 +
 modules/MODULES_LIST|1 +
 modules/access/Makefile.am  |   16 ++
 modules/access/screen/wayland.c |  513 +++
 po/POTFILES.in  |1 +
 5 files changed, 532 insertions(+)

Diff:   
http://git.videolan.org/gitweb.cgi/vlc.git/?a=commitdiff;h=cc79ed90a9d70190be59924aa6d730a49d002e29
___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] Build system support for wayland-scanner

2014-09-27 Thread Rémi Denis-Courmont
vlc | branch: master | Rémi Denis-Courmont  | Sat Sep 27 
11:45:07 2014 +0300| [fa446c65542bbc6387fb4b333de93f205255faab] | committer: 
Rémi Denis-Courmont

Build system support for wayland-scanner

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=fa446c65542bbc6387fb4b333de93f205255faab
---

 configure.ac|   12 
 modules/.gitignore  |2 ++
 modules/Makefile.am |   12 
 3 files changed, 26 insertions(+)

diff --git a/configure.ac b/configure.ac
index eff4995..eaf4dcf 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3182,7 +3182,19 @@ dnl
 AC_ARG_ENABLE(wayland,
   [AS_HELP_STRING([--enable-wayland], [Wayland support (default auto)])])
 have_wayland="no"
+AC_ARG_VAR([WAYLAND_SCANNER], [Wayland scanner utility])
+
 AS_IF([test "${enable_wayland}" != "no"], [
+  AC_MSG_CHECKING([for the Wayland scanner])
+  AS_IF([test -z "$WAYLAND_SCANNER"], [
+PKG_CHECK_EXISTS([wayland-scanner], [
+  WAYLAND_SCANNER="$(${PKG_CONFIG} wayland-scanner --variable 
wayland_scanner)"
+], [
+  WAYLAND_SCANNER="wayland-scanner"
+])
+  ])
+  AC_MSG_RESULT([$WAYLAND_SCANNER])
+
   PKG_CHECK_MODULES([WAYLAND_CLIENT], [wayland-client >= 1.5.91], [
 have_wayland="yes"
   ], [
diff --git a/modules/.gitignore b/modules/.gitignore
index 87bac2f..8497dd8 100644
--- a/modules/.gitignore
+++ b/modules/.gitignore
@@ -1,3 +1,5 @@
+*-client-protocol.h
+*-protocol.c
 plugins.dat
 srtp-test-aes
 srtp-test-recv
diff --git a/modules/Makefile.am b/modules/Makefile.am
index 005c150..486e71e 100644
--- a/modules/Makefile.am
+++ b/modules/Makefile.am
@@ -1,6 +1,7 @@
 noinst_LTLIBRARIES =
 noinst_HEADERS =
 check_PROGRAMS =
+EXTRA_DIST =
 
 BASE_SUBDIRS = \
audio_filter \
@@ -72,3 +73,14 @@ module.rc.lo: module.rc
-i $< -o $@
echo HELLO
 endif
+
+# Wayland
+SUFFIXES += -client-protocol.h -protocol.c .xml
+
+.xml-client-protocol.h:
+   $(AM_V_GEN)$(WAYLAND_SCANNER) client-header < "$^" > "$@.tmp"
+   $(AM_V_at)mv -f -- "$@.tmp" "$@"
+
+.xml-protocol.c:
+   $(AM_V_GEN)$(WAYLAND_SCANNER) code < "$^" > "$@.tmp"
+   $(AM_V_at)mv -f -- "$@.tmp" "$@"

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits