vlc | branch: master | Francois Cartegnie <fcvlc...@free.fr> | Wed Jul 5 13:21:39 2017 +0200| [043343cafd9e6c75452fe9e6dd6d6f69a81a375d] | committer: Francois Cartegnie
demux: avi: unify cat/codec storage on tk > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=043343cafd9e6c75452fe9e6dd6d6f69a81a375d --- modules/demux/avi/avi.c | 214 ++++++++++++++++++++++++------------------------ 1 file changed, 105 insertions(+), 109 deletions(-) diff --git a/modules/demux/avi/avi.c b/modules/demux/avi/avi.c index 4cfb171120..5108489ddd 100644 --- a/modules/demux/avi/avi.c +++ b/modules/demux/avi/avi.c @@ -146,9 +146,6 @@ typedef struct bool b_activated; bool b_eof; - unsigned int i_cat; /* AUDIO_ES, VIDEO_ES */ - vlc_fourcc_t i_codec; - unsigned int i_rate; unsigned int i_scale; unsigned int i_samplesize; @@ -156,6 +153,7 @@ typedef struct unsigned int i_width_bytes; bool b_flipped; + es_format_t fmt; es_out_id_t *p_es; int i_dv_audio_rate; @@ -403,7 +401,6 @@ static int Open( vlc_object_t * p_this ) avi_chunk_STRING_t *p_strn = AVI_ChunkFind( p_strl, AVIFOURCC_strn, 0 ); avi_chunk_strf_auds_t *p_auds = NULL; avi_chunk_strf_vids_t *p_vids = NULL; - es_format_t fmt; tk->b_eof = false; tk->b_activated = true; @@ -427,17 +424,17 @@ static int Open( vlc_object_t * p_this ) switch( p_strh->i_type ) { case( AVIFOURCC_auds ): - tk->i_cat = AUDIO_ES; + { + es_format_Init( &tk->fmt, AUDIO_ES, 0 ); + if( p_auds->p_wf->wFormatTag == WAVE_FORMAT_EXTENSIBLE && p_auds->p_wf->cbSize >= sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX) ) { WAVEFORMATEXTENSIBLE *p_wfe = (WAVEFORMATEXTENSIBLE *)p_auds->p_wf; - tk->i_codec = AVI_FourccGetCodec( AUDIO_ES, - p_wfe->SubFormat.Data1 ); + tk->fmt.i_codec = AVI_FourccGetCodec( AUDIO_ES, p_wfe->SubFormat.Data1 ); } else - tk->i_codec = AVI_FourccGetCodec( AUDIO_ES, - p_auds->p_wf->wFormatTag ); + tk->fmt.i_codec = AVI_FourccGetCodec( AUDIO_ES, p_auds->p_wf->wFormatTag ); tk->i_blocksize = p_auds->p_wf->nBlockAlign; if( tk->i_blocksize == 0 ) @@ -455,18 +452,18 @@ static int Open( vlc_object_t * p_this ) tk->i_samplesize = tk->i_blocksize; } - if( tk->i_codec == VLC_CODEC_VORBIS ) + if( tk->fmt.i_codec == VLC_CODEC_VORBIS ) { tk->i_blocksize = 0; /* fix vorbis VBR decoding */ } - if ( tk->i_codec == VLC_CODEC_MP4A ) + if ( tk->fmt.i_codec == VLC_CODEC_MP4A ) { tk->i_samplesize = 0; /* ADTS/AAC VBR */ } /* Fix broken scale/rate */ - if ( tk->i_codec == VLC_CODEC_ADPCM_IMA_WAV && + if ( tk->fmt.i_codec == VLC_CODEC_ADPCM_IMA_WAV && tk->i_samplesize && tk->i_samplesize > tk->i_rate ) { tk->i_scale = 1017; @@ -475,20 +472,18 @@ static int Open( vlc_object_t * p_this ) /* From libavformat */ /* Fix broken sample size (which is mp2 num samples / frame) #12722 */ - if( tk->i_codec == VLC_CODEC_MPGA && + if( tk->fmt.i_codec == VLC_CODEC_MPGA && tk->i_samplesize == 1152 && p_auds->p_wf->nBlockAlign == 1152 ) { p_auds->p_wf->nBlockAlign = tk->i_samplesize = 0; } - es_format_Init( &fmt, AUDIO_ES, tk->i_codec ); - - fmt.audio.i_channels = p_auds->p_wf->nChannels; - fmt.audio.i_rate = p_auds->p_wf->nSamplesPerSec; - fmt.i_bitrate = p_auds->p_wf->nAvgBytesPerSec*8; - fmt.audio.i_blockalign = p_auds->p_wf->nBlockAlign; - fmt.audio.i_bitspersample = p_auds->p_wf->wBitsPerSample; - fmt.b_packetized = !tk->i_blocksize; + tk->fmt.audio.i_channels = p_auds->p_wf->nChannels; + tk->fmt.audio.i_rate = p_auds->p_wf->nSamplesPerSec; + tk->fmt.i_bitrate = p_auds->p_wf->nAvgBytesPerSec*8; + tk->fmt.audio.i_blockalign = p_auds->p_wf->nBlockAlign; + tk->fmt.audio.i_bitspersample = p_auds->p_wf->wBitsPerSample; + tk->fmt.b_packetized = !tk->i_blocksize; avi_chunk_list_t *p_info = AVI_ChunkFind( p_riff, AVIFOURCC_INFO, 0 ); if( p_info ) @@ -496,12 +491,13 @@ static int Open( vlc_object_t * p_this ) int i_chunk = AVIFOURCC_IAS1 + ((i - 1) << 24); avi_chunk_STRING_t *p_lang = AVI_ChunkFind( p_info, i_chunk, 0 ); if( p_lang != NULL && p_lang->p_str != NULL ) - fmt.psz_language = FromACP( p_lang->p_str ); + tk->fmt.psz_language = FromACP( p_lang->p_str ); } msg_Dbg( p_demux, "stream[%u] audio(0x%x - %s) %d channels %dHz %dbits", - i, p_auds->p_wf->wFormatTag,vlc_fourcc_GetDescription(AUDIO_ES,tk->i_codec), + i, p_auds->p_wf->wFormatTag, + vlc_fourcc_GetDescription(AUDIO_ES, tk->fmt.i_codec), p_auds->p_wf->nChannels, p_auds->p_wf->nSamplesPerSec, p_auds->p_wf->wBitsPerSample ); @@ -510,85 +506,85 @@ static int Open( vlc_object_t * p_this ) { int i_extra = __MIN( p_auds->p_wf->cbSize, p_auds->i_chunk_size - sizeof(WAVEFORMATEX) ); - fmt.p_extra = malloc( i_extra ); - if( unlikely(fmt.p_extra == NULL) ) + tk->fmt.p_extra = malloc( i_extra ); + if( unlikely(tk->fmt.p_extra == NULL) ) { - es_format_Clean( &fmt ); + es_format_Clean( &tk->fmt ); free( tk ); goto error; } - fmt.i_extra = i_extra; - memcpy( fmt.p_extra, &p_auds->p_wf[1], fmt.i_extra ); + tk->fmt.i_extra = i_extra; + memcpy( tk->fmt.p_extra, &p_auds->p_wf[1], tk->fmt.i_extra ); } break; + } case( AVIFOURCC_vids ): { - tk->i_cat = VIDEO_ES; - tk->i_codec = AVI_FourccGetCodec( VIDEO_ES, - p_vids->p_bih->biCompression ); if( p_vids->p_bih->biCompression == VLC_FOURCC( 'D', 'X', 'S', 'B' ) ) { msg_Dbg( p_demux, "stream[%u] subtitles", i ); - es_format_Init( &fmt, SPU_ES, p_vids->p_bih->biCompression ); - tk->i_cat = SPU_ES; + es_format_Init( &tk->fmt, SPU_ES, p_vids->p_bih->biCompression ); break; } - else if( p_vids->p_bih->biCompression == BI_RAWRGB ) + + es_format_Init( &tk->fmt, VIDEO_ES, + AVI_FourccGetCodec( VIDEO_ES, p_vids->p_bih->biCompression ) ); + + if( p_vids->p_bih->biCompression == BI_RAWRGB ) { switch( p_vids->p_bih->biBitCount ) { case 32: - tk->i_codec = VLC_CODEC_RGB32; + tk->fmt.i_codec = VLC_CODEC_RGB32; break; case 24: - tk->i_codec = VLC_CODEC_RGB24; + tk->fmt.i_codec = VLC_CODEC_RGB24; break; case 16: /* Yes it is RV15 */ case 15: - tk->i_codec = VLC_CODEC_RGB15; + tk->fmt.i_codec = VLC_CODEC_RGB15; break; case 9: /* <- TODO check that */ - tk->i_codec = VLC_CODEC_I410; + tk->fmt.i_codec = VLC_CODEC_I410; break; case 8: if ( p_vids->p_bih->biClrUsed ) - tk->i_codec = VLC_CODEC_RGBP; + tk->fmt.i_codec = VLC_CODEC_RGBP; else - tk->i_codec = VLC_CODEC_GREY; + tk->fmt.i_codec = VLC_CODEC_GREY; break; } - es_format_Init( &fmt, VIDEO_ES, tk->i_codec ); - switch( tk->i_codec ) + switch( tk->fmt.i_codec ) { case VLC_CODEC_RGB24: case VLC_CODEC_RGB32: - fmt.video.i_rmask = 0x00ff0000; - fmt.video.i_gmask = 0x0000ff00; - fmt.video.i_bmask = 0x000000ff; + tk->fmt.video.i_rmask = 0x00ff0000; + tk->fmt.video.i_gmask = 0x0000ff00; + tk->fmt.video.i_bmask = 0x000000ff; break; case VLC_CODEC_RGB15: - fmt.video.i_rmask = 0x7c00; - fmt.video.i_gmask = 0x03e0; - fmt.video.i_bmask = 0x001f; + tk->fmt.video.i_rmask = 0x7c00; + tk->fmt.video.i_gmask = 0x03e0; + tk->fmt.video.i_bmask = 0x001f; break; case VLC_CODEC_RGBP: { const VLC_BITMAPINFO *p_bi = (const VLC_BITMAPINFO *) p_vids->p_bih; - fmt.video.p_palette = malloc( sizeof(video_palette_t) ); - if ( fmt.video.p_palette ) + tk->fmt.video.p_palette = malloc( sizeof(video_palette_t) ); + if ( tk->fmt.video.p_palette ) { uint32_t entry; for( uint32_t j = 0; j < p_vids->p_bih->biClrUsed; j++ ) { entry = GetDWBE( &p_bi->bmiColors[j] ); - fmt.video.p_palette->palette[j][0] = entry >> 24; - fmt.video.p_palette->palette[j][1] = (entry >> 16) & 0xFF; - fmt.video.p_palette->palette[j][2] = (entry >> 8) & 0xFF; - fmt.video.p_palette->palette[j][3] = entry & 0xFF; + tk->fmt.video.p_palette->palette[j][0] = entry >> 24; + tk->fmt.video.p_palette->palette[j][1] = (entry >> 16) & 0xFF; + tk->fmt.video.p_palette->palette[j][2] = (entry >> 8) & 0xFF; + tk->fmt.video.p_palette->palette[j][3] = entry & 0xFF; } - fmt.video.p_palette->i_entries = p_vids->p_bih->biClrUsed; + tk->fmt.video.p_palette->i_entries = p_vids->p_bih->biClrUsed; } } break; @@ -602,27 +598,27 @@ static int Open( vlc_object_t * p_this ) } else { - es_format_Init( &fmt, VIDEO_ES, p_vids->p_bih->biCompression ); - if( tk->i_codec == VLC_CODEC_MP4V && + tk->fmt.i_codec = p_vids->p_bih->biCompression; + if( tk->fmt.i_codec == VLC_CODEC_MP4V && !strncasecmp( (char*)&p_strh->i_handler, "XVID", 4 ) ) { - fmt.i_codec = - fmt.i_original_fourcc = VLC_FOURCC( 'X', 'V', 'I', 'D' ); + tk->fmt.i_codec = + tk->fmt.i_original_fourcc = VLC_FOURCC( 'X', 'V', 'I', 'D' ); } } tk->i_samplesize = 0; - fmt.video.i_width = p_vids->p_bih->biWidth; - fmt.video.i_height = p_vids->p_bih->biHeight; - fmt.video.i_visible_width = fmt.video.i_width; - fmt.video.i_visible_height = fmt.video.i_height; - fmt.video.i_bits_per_pixel = p_vids->p_bih->biBitCount; - fmt.video.i_frame_rate = tk->i_rate; - fmt.video.i_frame_rate_base = tk->i_scale; + tk->fmt.video.i_visible_width = + tk->fmt.video.i_width = p_vids->p_bih->biWidth; + tk->fmt.video.i_visible_height = + tk->fmt.video.i_height = p_vids->p_bih->biHeight; + tk->fmt.video.i_bits_per_pixel = p_vids->p_bih->biBitCount; + tk->fmt.video.i_frame_rate = tk->i_rate; + tk->fmt.video.i_frame_rate_base = tk->i_scale; /* Uncompresse Bitmap or YUV, YUV being always topdown */ - if ( fmt.video.i_height > INT32_MAX ) - fmt.video.i_height = + if ( tk->fmt.video.i_height > INT32_MAX ) + tk->fmt.video.i_height = (unsigned int)(-(int)p_vids->p_bih->biHeight); avi_chunk_vprp_t *p_vprp = AVI_ChunkFind( p_strl, AVIFOURCC_vprp, 0 ); @@ -632,8 +628,10 @@ static int Open( vlc_object_t * p_this ) if( p_vprp->i_video_format_token >= 1 && p_vprp->i_video_format_token <= 4 ) i_frame_aspect_ratio = 0x00040003; - fmt.video.i_sar_num = ((i_frame_aspect_ratio >> 16) & 0xffff) * fmt.video.i_height; - fmt.video.i_sar_den = ((i_frame_aspect_ratio >> 0) & 0xffff) * fmt.video.i_width; + tk->fmt.video.i_sar_num = ((i_frame_aspect_ratio >> 16) & 0xffff) * + tk->fmt.video.i_height; + tk->fmt.video.i_sar_den = ((i_frame_aspect_ratio >> 0) & 0xffff) * + tk->fmt.video.i_width; } /* Extradata is the remainder of the chunk less the BIH */ if( p_vids->i_chunk_size <= INT_MAX - sizeof(VLC_BITMAPINFOHEADER) ) @@ -641,15 +639,15 @@ static int Open( vlc_object_t * p_this ) int i_extra = p_vids->i_chunk_size - sizeof(VLC_BITMAPINFOHEADER); if( i_extra > 0 ) { - fmt.p_extra = malloc( i_extra ); - if( unlikely(fmt.p_extra == NULL) ) + tk->fmt.p_extra = malloc( i_extra ); + if( unlikely(tk->fmt.p_extra == NULL) ) { - es_format_Clean( &fmt ); + es_format_Clean( &tk->fmt ); free( tk ); goto error; } - fmt.i_extra = i_extra; - memcpy( fmt.p_extra, &p_vids->p_bih[1], fmt.i_extra ); + tk->fmt.i_extra = i_extra; + memcpy( tk->fmt.p_extra, &p_vids->p_bih[1], tk->fmt.i_extra ); } } @@ -661,21 +659,21 @@ static int Open( vlc_object_t * p_this ) (float)tk->i_rate/(float)tk->i_scale ); /* Extract palette from extradata if bpp <= 8 */ - if( fmt.video.i_bits_per_pixel > 0 && fmt.video.i_bits_per_pixel <= 8 ) + if( tk->fmt.video.i_bits_per_pixel > 0 && tk->fmt.video.i_bits_per_pixel <= 8 ) { /* The palette should not be included in biSize, but come * directly after BITMAPINFORHEADER in the BITMAPINFO structure */ - if( fmt.i_extra > 0 ) + if( tk->fmt.i_extra > 0 ) { - fmt.video.p_palette = calloc( 1, sizeof(video_palette_t) ); - if( likely(fmt.video.p_palette) ) + tk->fmt.video.p_palette = calloc( 1, sizeof(video_palette_t) ); + if( likely(tk->fmt.video.p_palette) ) { - const uint8_t *p_pal = fmt.p_extra; - fmt.video.p_palette->i_entries = __MIN(fmt.i_extra/4, 256); - for( int k = 0; k < fmt.video.p_palette->i_entries; k++ ) + const uint8_t *p_pal = tk->fmt.p_extra; + tk->fmt.video.p_palette->i_entries = __MIN(tk->fmt.i_extra/4, 256); + for( int k = 0; k < tk->fmt.video.p_palette->i_entries; k++ ) { for( int j = 0; j < 4; j++ ) - fmt.video.p_palette->palette[k][j] = p_pal[4*k+j]; + tk->fmt.video.p_palette->palette[k][j] = p_pal[4*k+j]; } } } @@ -692,16 +690,14 @@ static int Open( vlc_object_t * p_this ) case( AVIFOURCC_iavs): case( AVIFOURCC_ivas): msg_Dbg( p_demux, "stream[%u] iavs with handler %4.4s", i, (char *)&p_strh->i_handler ); - tk->i_cat = VIDEO_ES; - tk->i_codec = AVI_FourccGetCodec( VIDEO_ES, p_strh->i_handler ); + es_format_Init( &tk->fmt, VIDEO_ES, p_strh->i_handler ); tk->i_samplesize = 0; - tk->i_dv_audio_rate = tk->i_codec == VLC_CODEC_DV ? -1 : 0; + tk->i_dv_audio_rate = p_strh->i_handler == VLC_CODEC_DV ? -1 : 0; - es_format_Init( &fmt, VIDEO_ES, p_strh->i_handler ); - fmt.video.i_width = p_avih->i_width; - fmt.video.i_height = p_avih->i_height; - fmt.video.i_visible_width = fmt.video.i_width; - fmt.video.i_visible_height = fmt.video.i_height; + tk->fmt.video.i_visible_width = + tk->fmt.video.i_width = p_avih->i_width; + tk->fmt.video.i_visible_height = + tk->fmt.video.i_height = p_avih->i_height; break; case( AVIFOURCC_mids): @@ -713,10 +709,9 @@ static int Open( vlc_object_t * p_this ) continue; } if( p_strn && p_strn->p_str ) - fmt.psz_description = FromACP( p_strn->p_str ); - tk->p_es = es_out_Add( p_demux->out, &fmt ); + tk->fmt.psz_description = FromACP( p_strn->p_str ); + tk->p_es = es_out_Add( p_demux->out, &tk->fmt ); TAB_APPEND( p_sys->i_track, p_sys->track, tk ); - es_format_Clean( &fmt ); } if( p_sys->i_track <= 0 ) @@ -755,7 +750,7 @@ aviindex: for( unsigned int i = 0; i < p_sys->i_track; i++ ) { const avi_track_t *tk = p_sys->track[i]; - if( tk->i_cat == VIDEO_ES && tk->idx.p_entry ) + if( tk->fmt.i_cat == VIDEO_ES && tk->idx.p_entry ) i_idx_totalframes = __MAX(i_idx_totalframes, tk->idx.i_size); } if( i_idx_totalframes != p_avih->i_totalframes && @@ -813,7 +808,7 @@ aviindex: avi_chunk_list_t *p_strl; avi_chunk_strf_auds_t *p_auds; - if( tk->i_cat != AUDIO_ES ) + if( tk->fmt.i_cat != AUDIO_ES ) { continue; } @@ -882,6 +877,7 @@ static void Close ( vlc_object_t * p_this ) { if( p_sys->track[i] ) { + es_format_Clean( &p_sys->track[i]->fmt ); avi_index_Clean( &p_sys->track[i]->idx ); free( p_sys->track[i] ); } @@ -1189,7 +1185,7 @@ static int Demux_Seekable( demux_t *p_demux ) /* add this chunk to the index */ avi_entry_t index; index.i_id = avi_pk.i_fourcc; - index.i_flags = AVI_GetKeyFlag(tk->i_codec, avi_pk.i_peek); + index.i_flags = AVI_GetKeyFlag(tk->fmt.i_codec, avi_pk.i_peek); index.i_pos = avi_pk.i_pos; index.i_length = avi_pk.i_size; index.i_lengthtotal = index.i_length; @@ -1301,7 +1297,7 @@ static int Demux_Seekable( demux_t *p_demux ) int i_length = tk->idx.p_entry[tk->i_idxposc].i_length; tk->i_idxposc++; - if( tk->i_cat == AUDIO_ES ) + if( tk->fmt.i_cat == AUDIO_ES ) { tk->i_blockno += tk->i_blocksize > 0 ? ( i_length + tk->i_blocksize - 1 ) / tk->i_blocksize : 1; } @@ -1323,7 +1319,7 @@ static int Demux_Seekable( demux_t *p_demux ) toread[i_track].i_posf = -1; } - if( tk->i_cat != VIDEO_ES ) + if( tk->fmt.i_cat != VIDEO_ES ) p_frame->i_dts = p_frame->i_pts; else { @@ -1369,7 +1365,7 @@ static int Demux_UnSeekable( demux_t *p_demux ) if( b ) { - if( tk->i_cat == VIDEO_ES ) + if( tk->fmt.i_cat == VIDEO_ES ) { p_stream_master = tk; break; @@ -1479,7 +1475,7 @@ static int Demux_UnSeekable( demux_t *p_demux ) } else { - if( p_stream->i_cat == AUDIO_ES ) + if( p_stream->fmt.i_cat == AUDIO_ES ) { p_stream->i_blockno += p_stream->i_blocksize > 0 ? ( avi_pk.i_size + p_stream->i_blocksize - 1 ) / p_stream->i_blocksize : 1; } @@ -1708,7 +1704,7 @@ static int Control( demux_t *p_demux, int i_query, va_list args ) for( unsigned i = 0; i < p_sys->i_track; i++ ) { avi_track_t *tk = p_sys->track[i]; - if( tk->i_cat == VIDEO_ES && tk->i_scale > 0) + if( tk->fmt.i_cat == VIDEO_ES && tk->i_scale > 0) { *pf = (float)tk->i_rate / (float)tk->i_scale; break; @@ -1814,7 +1810,7 @@ static mtime_t AVI_GetPTS( avi_track_t *tk ) } else { - if( tk->i_cat == AUDIO_ES ) + if( tk->fmt.i_cat == AUDIO_ES ) { return AVI_GetDPTS( tk, tk->i_blockno ); } @@ -1879,7 +1875,7 @@ static int AVI_StreamChunkFind( demux_t *p_demux, unsigned int i_stream ) /* add this chunk to the index */ avi_entry_t index; index.i_id = avi_pk.i_fourcc; - index.i_flags = AVI_GetKeyFlag(tk_pk->i_codec, avi_pk.i_peek); + index.i_flags = AVI_GetKeyFlag(tk_pk->fmt.i_codec, avi_pk.i_peek); index.i_pos = avi_pk.i_pos; index.i_length = avi_pk.i_size; index.i_lengthtotal = index.i_length; @@ -2010,7 +2006,7 @@ static int AVI_TrackSeek( demux_t *p_demux, return VLC_EGENERIC; } - if( p_stream->i_cat == AUDIO_ES ) + if( p_stream->fmt.i_cat == AUDIO_ES ) { unsigned int i; tk->i_blockno = 0; @@ -2033,7 +2029,7 @@ static int AVI_TrackSeek( demux_t *p_demux, i_oldpts > i_date ? ">" : "<", i_date ); - if( p_stream->i_cat == VIDEO_ES ) + if( p_stream->fmt.i_cat == VIDEO_ES ) { /* search key frame */ //if( i_date < i_oldpts || 1 ) @@ -2421,7 +2417,7 @@ static int AVI_IndexLoad_idx1( demux_t *p_demux, &i_stream, &i_cat ); if( i_stream < p_sys->i_track && - (i_cat == p_sys->track[i_stream]->i_cat || i_cat == UNKNOWN_ES ) ) + (i_cat == p_sys->track[i_stream]->fmt.i_cat || i_cat == UNKNOWN_ES ) ) { avi_entry_t index; index.i_id = p_idx1->entry[i_index].i_fourcc; @@ -2678,13 +2674,13 @@ static void AVI_IndexCreate( demux_t *p_demux ) break; if( pk.i_stream < p_sys->i_track && - pk.i_cat == p_sys->track[pk.i_stream]->i_cat ) + pk.i_cat == p_sys->track[pk.i_stream]->fmt.i_cat ) { avi_track_t *tk = p_sys->track[pk.i_stream]; avi_entry_t index; index.i_id = pk.i_fourcc; - index.i_flags = AVI_GetKeyFlag(tk->i_codec, pk.i_peek); + index.i_flags = AVI_GetKeyFlag(tk->fmt.i_codec, pk.i_peek); index.i_pos = pk.i_pos; index.i_length = pk.i_size; index.i_lengthtotal = pk.i_size; _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits