[vlc-commits] faad: drop byte of padding for raw streams
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)
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
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
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
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
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