vlc | branch: master | Frédéric Yhuel <yhu...@gmail.com> | Fri Oct 5 19:19:56 2012 +0200| [c892cfc936055725dd7f60d043c6d10399e6f6f6] | committer: Jean-Baptiste Kempf
Smooth Streaming: fix manifest parsing (FourCC) This patch fixes playback for this VOD stream: http://mediadl.microsoft.com/mediadl/IISNET/SmoothMedia/Learn/795/Bill_Staples_Cineform.ism/Manifest Signed-off-by: Jean-Baptiste Kempf <j...@videolan.org> > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=c892cfc936055725dd7f60d043c6d10399e6f6f6 --- modules/stream_filter/smooth/downloader.c | 4 +++- modules/stream_filter/smooth/smooth.c | 3 +++ modules/stream_filter/smooth/smooth.h | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/modules/stream_filter/smooth/downloader.c b/modules/stream_filter/smooth/downloader.c index 33cd09e..b5222d4 100644 --- a/modules/stream_filter/smooth/downloader.c +++ b/modules/stream_filter/smooth/downloader.c @@ -276,6 +276,7 @@ static int build_smoo_box( stream_t *s, uint8_t *smoo_box ) { stream_sys_t *p_sys = s->p_sys; sms_stream_t *sms = NULL; + uint32_t FourCC; /* smoo */ memset( smoo_box, 0, SMOO_SIZE ); @@ -327,7 +328,8 @@ static int build_smoo_box( stream_t *s, uint8_t *smoo_box ) quality_level_t * qlvl = get_qlevel( sms, sms->download_qlvl ); - ((uint32_t *)stra_box)[16] = bswap32( qlvl->FourCC ); + FourCC = qlvl->FourCC ? qlvl->FourCC : sms->default_FourCC; + ((uint32_t *)stra_box)[16] = bswap32( FourCC ); ((uint32_t *)stra_box)[17] = bswap32( qlvl->Bitrate ); ((uint32_t *)stra_box)[18] = bswap32( qlvl->MaxWidth ); ((uint32_t *)stra_box)[19] = bswap32( qlvl->MaxHeight ); diff --git a/modules/stream_filter/smooth/smooth.c b/modules/stream_filter/smooth/smooth.c index 01281cc..3e7d9a5 100644 --- a/modules/stream_filter/smooth/smooth.c +++ b/modules/stream_filter/smooth/smooth.c @@ -203,6 +203,9 @@ static int parse_Manifest( stream_t *s ) stream_name = strdup( value ); if( !strcmp( name, "TimeScale" ) ) sms->timescale = strtoull( value, NULL, 10 ); + if( !strcmp( name, "FourCC" ) ) + sms->default_FourCC = + VLC_FOURCC( value[0], value[1], value[2], value[3] ); if( !strcmp( name, "Chunks" ) ) { diff --git a/modules/stream_filter/smooth/smooth.h b/modules/stream_filter/smooth/smooth.h index 32adda6..04d2079 100644 --- a/modules/stream_filter/smooth/smooth.h +++ b/modules/stream_filter/smooth/smooth.h @@ -73,6 +73,7 @@ typedef struct sms_stream_s { vlc_array_t *qlevels; /* list of available Quality Levels */ vlc_array_t *chunks; /* list of chunks */ + uint32_t default_FourCC; unsigned vod_chunks_nb; /* total num of chunks of the VOD stream */ unsigned timescale; unsigned qlevel_nb; /* number of quality levels */ _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org http://mailman.videolan.org/listinfo/vlc-commits