[vlc-commits] faad: drop byte of padding for raw streams

2014-05-31 Thread Tristan Matthews
vlc | branch: master | Tristan Matthews  | Sat May 31 
17:07:34 2014 -0400| [937911d559051522554ac6f0d6d35fc0836d541a] | committer: 
Tristan Matthews

faad: drop byte of padding for raw streams

Fixes #2575, #11514

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

 modules/codec/faad.c |   15 +--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/modules/codec/faad.c b/modules/codec/faad.c
index bf1b004..9aaaed6 100644
--- a/modules/codec/faad.c
+++ b/modules/codec/faad.c
@@ -491,8 +491,19 @@ static block_t *DecodeBlock( decoder_t *p_dec, block_t 
**pp_block )
 p_sys->i_buffer -= frame.bytesconsumed;
 if( p_sys->i_buffer > 0 )
 {
-memmove( p_sys->p_buffer, &p_sys->p_buffer[frame.bytesconsumed],
- p_sys->i_buffer );
+/* drop byte of raw AAC padding (if present) */
+if ( frame.header_type == RAW &&
+ p_sys->i_buffer == 1 &&
+ p_sys->p_buffer[0] == 0x21 &&
+ p_sys->p_buffer[frame.bytesconsumed] == 0 )
+{
+p_sys->i_buffer = 0;
+}
+else
+{
+memmove( p_sys->p_buffer, 
&p_sys->p_buffer[frame.bytesconsumed],
+ p_sys->i_buffer );
+}
 }
 
 return p_out;

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


[vlc-commits] demux: ts: only SET_GROUP_PCR on groups with es (fix #6029)

2014-05-31 Thread Francois Cartegnie
vlc | branch: master | Francois Cartegnie  | Wed Apr 16 
21:34:33 2014 +0200| [c4b10db33cf1431f55fceddec9284a56d18b7341] | committer: 
Francois Cartegnie

demux: ts: only SET_GROUP_PCR on groups with es (fix #6029)

There was the missing ref clock assertion after SET_GROUP_PCR because
that group had no active es.

Unsure if that's the best way to find all es associated to a PMT/group/program

Francois

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

 modules/demux/ts.c |   28 +++-
 1 file changed, 23 insertions(+), 5 deletions(-)

diff --git a/modules/demux/ts.c b/modules/demux/ts.c
index 7673e79..6decd2f 100644
--- a/modules/demux/ts.c
+++ b/modules/demux/ts.c
@@ -2167,16 +2167,34 @@ static void PCRHandle( demux_t *p_demux, ts_pid_t *pid, 
block_t *p_bk )
 p_sys->i_current_pcr = AdjustPCRWrapAround( p_demux, i_pcr );
 
 /* Search program and set the PCR */
-for( int i = 0; i < p_sys->i_pmt; i++ )
+int i_group = -1;
+for( int i = 0; i < p_sys->i_pmt && i_group < 0 ; i++ )
+{
+bool b_pmt_has_es = false;
+
 for( int i_prg = 0; i_prg < p_sys->pmt[i]->psi->i_prg; i_prg++ )
+{
 if( pid->i_pid == p_sys->pmt[i]->psi->prg[i_prg]->i_pid_pcr )
 {
+/* We've found our target group */
 p_sys->pmt[i]->psi->prg[i_prg]->i_pcr_value = i_pcr;
-if (p_sys->b_trust_pcr)
-es_out_Control( p_demux->out, ES_OUT_SET_GROUP_PCR,
-  (int)p_sys->pmt[i]->psi->prg[i_prg]->i_number,
-  (int64_t)(VLC_TS_0 + i_pcr * 100 / 9) );
+i_group = p_sys->pmt[i]->psi->prg[i_prg]->i_number;
+for( int j = 0; j < 8192; j++ )
+{
+const ts_pid_t *pid = &p_sys->pid[j];
+if( pid->b_valid && pid->p_owner == p_sys->pmt[i]->psi && 
pid->es )
+{
+b_pmt_has_es = true;
+break;
+}
+}
 }
+}
+
+if ( p_sys->b_trust_pcr && i_group > 0 && b_pmt_has_es )
+es_out_Control( p_demux->out, ES_OUT_SET_GROUP_PCR,
+  i_group, VLC_TS_0 + i_pcr * 100 / 9 );
+}
 }
 
 static bool GatherData( demux_t *p_demux, ts_pid_t *pid, block_t *p_bk )

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


[vlc-commits] demux: mp4: export ContainerChildren instead of ContainedRaw

2014-05-31 Thread Francois Cartegnie
vlc | branch: master | Francois Cartegnie  | Thu May 29 
16:18:47 2014 +0200| [ad7f67f398331ebaa8194e8aa199857b3b03906f] | committer: 
Francois Cartegnie

demux: mp4: export ContainerChildren instead of ContainedRaw

So we can stop probing at some point.

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

 modules/demux/mp4/libmp4.c |6 +++---
 modules/demux/mp4/libmp4.h |3 ++-
 modules/demux/mp4/mp4.c|2 +-
 3 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/modules/demux/mp4/libmp4.c b/modules/demux/mp4/libmp4.c
index 2125975..4ac1ba1 100644
--- a/modules/demux/mp4/libmp4.c
+++ b/modules/demux/mp4/libmp4.c
@@ -190,8 +190,8 @@ static int MP4_NextBox( stream_t *p_stream, MP4_Box_t 
*p_box )
  *   after called one of theses functions, file position is unknown
  *   you need to call MP4_GotoBox to go where you want
  */
-static int MP4_ReadBoxContainerChildren( stream_t *p_stream,
-MP4_Box_t *p_container, uint32_t 
i_last_child )
+int MP4_ReadBoxContainerChildren( stream_t *p_stream,
+  MP4_Box_t *p_container, uint32_t 
i_last_child )
 {
 MP4_Box_t *p_box;
 
@@ -226,7 +226,7 @@ static int MP4_ReadBoxContainerChildren( stream_t *p_stream,
 return 1;
 }
 
-int MP4_ReadBoxContainerRaw( stream_t *p_stream, MP4_Box_t *p_container )
+static int MP4_ReadBoxContainerRaw( stream_t *p_stream, MP4_Box_t *p_container 
)
 {
 return MP4_ReadBoxContainerChildren( p_stream, p_container, 0 );
 }
diff --git a/modules/demux/mp4/libmp4.h b/modules/demux/mp4/libmp4.h
index 6850b2b..fe192b7 100644
--- a/modules/demux/mp4/libmp4.h
+++ b/modules/demux/mp4/libmp4.h
@@ -1563,7 +1563,8 @@ int MP4_BoxCount( MP4_Box_t *p_box, const char *psz_fmt, 
... );
 
 /* Internal functions exposed for MKV demux */
 int MP4_ReadBoxCommon( stream_t *p_stream, MP4_Box_t *p_box );
-int MP4_ReadBoxContainerRaw( stream_t *p_stream, MP4_Box_t *p_container );
+int MP4_ReadBoxContainerChildren( stream_t *p_stream, MP4_Box_t *p_container,
+  uint32_t i_last_child );
 int MP4_ReadBox_sample_vide( stream_t *p_stream, MP4_Box_t *p_box );
 void MP4_FreeBox_sample_vide( MP4_Box_t *p_box );
 
diff --git a/modules/demux/mp4/mp4.c b/modules/demux/mp4/mp4.c
index a365992..7e107d4 100644
--- a/modules/demux/mp4/mp4.c
+++ b/modules/demux/mp4/mp4.c
@@ -4297,7 +4297,7 @@ static int ProbeFragments( demux_t *p_demux )
 
 assert( p_sys->p_root );
 
-MP4_ReadBoxContainerRaw( p_demux->s, p_sys->p_root ); /* Get the rest of 
the file */
+MP4_ReadBoxContainerChildren( p_demux->s, p_sys->p_root, 0 ); /* Get the 
rest of the file */
 
 MP4_Box_t *p_moov = MP4_BoxGet( p_sys->p_root, "/moov" );
 if ( !p_moov )

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


[vlc-commits] demux: mp4: validate fragmentation after first moof

2014-05-31 Thread Francois Cartegnie
vlc | branch: master | Francois Cartegnie  | Thu May 29 
16:27:07 2014 +0200| [6fd2c53062d51ff5a06ee7249ac94fb807643f0c] | committer: 
Francois Cartegnie

demux: mp4: validate fragmentation after first moof

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

 modules/demux/mp4/mp4.c |   29 -
 1 file changed, 20 insertions(+), 9 deletions(-)

diff --git a/modules/demux/mp4/mp4.c b/modules/demux/mp4/mp4.c
index 7e107d4..25ff40a 100644
--- a/modules/demux/mp4/mp4.c
+++ b/modules/demux/mp4/mp4.c
@@ -130,7 +130,7 @@ static const char *MP4_ConvertMacCode( uint16_t );
 static MP4_Box_t * MP4_GetTrexByTrackID( MP4_Box_t *p_moov, const uint32_t 
i_id );
 
 static bool AddFragment( demux_t *p_demux, MP4_Box_t *p_moox );
-static int  ProbeFragments( demux_t *p_demux );
+static int  ProbeFragments( demux_t *p_demux, bool b_force );
 
 /* Helpers */
 
@@ -453,7 +453,7 @@ static int Open( vlc_object_t * p_this )
 {
 /* Probe remaining to check if there's really fragments
or if that file is just ready to append fragments */
-ProbeFragments( p_demux );
+ProbeFragments( p_demux, false );
 p_sys->b_fragmented = !!MP4_BoxCount( p_sys->p_root, "/moof" );
 }
 else
@@ -4287,7 +4287,7 @@ static bool AddFragment( demux_t *p_demux, MP4_Box_t 
*p_moox )
 return true;
 }
 
-static int ProbeFragments( demux_t *p_demux )
+static int ProbeFragments( demux_t *p_demux, bool b_force )
 {
 demux_sys_t *p_sys = p_demux->p_sys;
 uint64_t i_current_pos;
@@ -4297,11 +4297,22 @@ static int ProbeFragments( demux_t *p_demux )
 
 assert( p_sys->p_root );
 
-MP4_ReadBoxContainerChildren( p_demux->s, p_sys->p_root, 0 ); /* Get the 
rest of the file */
+if ( p_sys->b_fastseekable || b_force )
+{
+MP4_ReadBoxContainerChildren( p_demux->s, p_sys->p_root, 0 ); /* Get 
the rest of the file */
+p_sys->b_fragments_probed = true;
+}
+else
+{
+/* We stop at first moof, which validates our fragmentation condition
+ * and we'll find others while reading. */
+MP4_ReadBoxContainerChildren( p_demux->s, p_sys->p_root, ATOM_moof );
+}
 
 MP4_Box_t *p_moov = MP4_BoxGet( p_sys->p_root, "/moov" );
 if ( !p_moov )
 {
+/* moov/mvex before probing should be present anyway */
 MP4_BoxDumpStructure( p_demux->s, p_sys->p_root );
 return VLC_EGENERIC;
 }
@@ -4315,12 +4326,12 @@ static int ProbeFragments( demux_t *p_demux )
 p_moof = p_moof->p_next;
 }
 
-p_sys->b_fragments_probed = true;
-
 MP4_Box_t *p_mdat = MP4_BoxGet( p_sys->p_root, "mdat" );
-assert( p_mdat );
-stream_Seek( p_demux->s, p_mdat->i_pos );
-msg_Dbg( p_demux, "rewinding to mdat %"PRId64, p_mdat->i_pos );
+if ( p_mdat )
+{
+stream_Seek( p_demux->s, p_mdat->i_pos );
+msg_Dbg( p_demux, "rewinding to mdat %"PRId64, p_mdat->i_pos );
+}
 
 return VLC_SUCCESS;
 }

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


[vlc-commits] demux: mp4: add "Leaf" mode demuxer

2014-05-31 Thread Francois Cartegnie
vlc | branch: master | Francois Cartegnie  | Sun May 25 
22:14:38 2014 +0200| [39f437a934e3689c9b6a07d1a5e2d795b3552f74] | committer: 
Francois Cartegnie

demux: mp4: add "Leaf" mode demuxer

Adds a data order driven demuxer instead of trying
to rearrange seek order. Re-enables fragmented
files if fast-seekable.

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

 modules/demux/mp4/libmp4.h |   11 +
 modules/demux/mp4/mp4.c| 1230 
 2 files changed, 1131 insertions(+), 110 deletions(-)

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


[vlc-commits] demux: mp4: fix seek return value

2014-05-31 Thread Francois Cartegnie
vlc | branch: master | Francois Cartegnie  | Thu May 29 
19:46:57 2014 +0200| [9b0c6e6b681e61a89b18ca04eaf01b588b128a28] | committer: 
Francois Cartegnie

demux: mp4: fix seek return value

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

 modules/demux/mp4/mp4.c |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/modules/demux/mp4/mp4.c b/modules/demux/mp4/mp4.c
index 25ff40a..3861383 100644
--- a/modules/demux/mp4/mp4.c
+++ b/modules/demux/mp4/mp4.c
@@ -1049,7 +1049,7 @@ static int Control( demux_t *p_demux, int i_query, 
va_list args )
  (double)p_sys->i_timescale );
 return Seek( p_demux, i64 );
 }
-else return VLC_SUCCESS;
+else return VLC_EGENERIC;
 
 case DEMUX_GET_TIME:
 pi64 = (int64_t*)va_arg( args, int64_t * );

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