Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • videolan/vlc
  • chouquette/vlc
  • bakiewicz.marek122/vlc
  • devnexen/vlc
  • rohanrajpal/vlc
  • blurrrb/vlc
  • gsoc/gsoc2019/darkapex/vlc
  • b1ue/vlc
  • fkuehne/vlc
  • magsoft/vlc
  • chub/vlc
  • cramiro9/vlc
  • robUx4/vlc
  • rom1v/vlc
  • akshayaky/vlc
  • tmk907/vlc
  • akymaster/vlc
  • govind.sharma/vlc
  • psilokos/vlc
  • xjbeta/vlc
  • jahan/vlc
  • 1480c1/vlc
  • amanchande/vlc
  • aaqib/vlc
  • rist/vlc
  • apol/vlc
  • mindfreeze/vlc
  • alexandre-janniaux/vlc
  • sandsmark/vlc
  • jagannatharjun/vlc
  • gsoc/gsoc2020/matiaslgonzalez/vlc
  • gsoc/gsoc2020/jagannatharjun/vlc
  • mstorsjo/vlc
  • gsoc/gsoc2020/vedenta/vlc
  • gsoc/gsoc2020/arnav-ishaan/vlc
  • gsoc/gsoc2020/andreduong/vlc
  • fuzun/vlc
  • gsoc/gsoc2020/vatsin/vlc
  • gsoc/gsoc2020/sagid/vlc
  • yaron/vlc
  • Phoenix/vlc
  • Garf/vlc
  • ePiratWorkarounds/vlc
  • tguillem/vlc
  • jnqnfe/vlc
  • mdc/vlc
  • Vedaa/vlc
  • rasa/vlc
  • quink/vlc
  • yealo/vlc
  • aleksey_ak/vlc
  • ePirat/vlc
  • ilya.yanok/vlc
  • asenat/vlc
  • m/vlc
  • bunjee/vlc
  • BLumia/vlc
  • sagudev/vlc
  • hamedmonji30/vlc
  • nullgemm/vlc
  • DivyamAhuja/vlc
  • thesamesam/vlc
  • dag7/vlc
  • snehil101/vlc
  • haasn/vlc
  • jbk/vlc
  • ValZapod/vlc
  • mfkl/vlc
  • WangChuan/vlc
  • core1024/vlc
  • GhostVaibhav/vlc
  • dfuhrmann/vlc
  • davide.prade/vlc
  • tmatth/vlc
  • Courmisch/vlc
  • zouya/vlc
  • hpi/vlc
  • EwoutH/vlc
  • aleung27/vlc
  • hengwu0/vlc
  • saladin/vlc
  • ashuio/vlc
  • richselwood/vlc
  • verma16Ayush/vlc
  • chemicalflash/vlc
  • PoignardAzur/vlc
  • huangjieNT/vlc
  • Blake-Haydon/vlc
  • AnuthaDev/vlc
  • gsoc/gsoc2021/mpd/vlc
  • nicolas_lequec/vlc
  • sambassaly/vlc
  • thresh/vlc
  • bonniegong/vlc
  • myaashish/vlc
  • stavros.vagionitis/vlc
  • ileoo/vlc
  • louis-santucci/vlc
  • cchristiansen/vlc
  • sabyasachi07/vlc
  • AbduAmeen/vlc
  • ashishb0410/vlc
  • urbanhusky/vlc
  • davidepietrasanta/vlc
  • riksleutelstad/vlc
  • jeremyVignelles/vlc
  • komh/vlc
  • iamjithinjohn/vlc
  • JohannesKauffmann/vlc2
  • kunglao/vlc
  • natzberg/vlc
  • jill/vlc
  • cwendling/vlc
  • adufou/vlc
  • ErwanAirone/vlc
  • HasinduDilshan10/vlc
  • vagrantc/vlc
  • rafiv/macos-bigsur-icon
  • Aymeriic/vlc
  • saranshg20/vlc
  • metzlove24/vlc
  • linkfanel/vlc
  • Ds886/vlc
  • metehan-arslan/vlc
  • Skantes/vlc
  • kgsandundananjaya96/vlc
  • mitchcapper/vlc
  • advaitgupta/vlc
  • StefanBruens/vlc
  • ratajs/vlc
  • T.M.F.B.3761/vlc
  • m222059/vlc
  • casemerrick/vlc
  • joshuaword2alt/vlc
  • sjwaddy/vlc
  • dima/vlc
  • Ybalrid/vlc
  • umxprime/vlc
  • eschmidt/vlc
  • vannieuwenhuysenmichelle/vlc
  • badcf00d/vlc
  • wesinator/vlc
  • louis/vlc
  • xqq/vlc
  • EmperorYP7/vlc
  • NicoLiam/vlc
  • loveleen/vlc
  • rofferom/vlc
  • rbultje/vlc
  • TheUnamed/vlc
  • pratiksharma341/vlc
  • Saurab17/vlc
  • purist.coder/vlc
  • Shuicheng/vlc
  • mdrrubel292/vlc
  • silverbleu00/vlc
  • metif12/vlc
  • asher-m/vlc
  • jeffk/vlc
  • Brandonbr1/vlc
  • beautyyuyanli/vlc
  • rego21/vlc
  • muyangren907/vlc
  • collectionbylawrencejason/vlc
  • evelez/vlc
  • GSMgeeth/vlc
  • Oneric/vlc
  • TJ5/vlc
  • XuanTung95/vlc
  • darrenjenny21/vlc
  • Trenly/vlc
  • RockyTDR/vlc
  • mjakubowski/vlc
  • caprica/vlc
  • ForteFrankie/vlc
  • seannamiller19/vlc
  • junlon2006/vlc
  • kiwiren6666/vlc
  • iuseiphonexs/vlc
  • fenngtun/vlc
  • Rajdutt999/vlc
  • typx/vlc
  • leon.vitanos/vlc
  • robertogarci0938/vlc
  • gsoc/gsoc2022/luc65r/vlc-mpd
  • skeller/vlc
  • MCJack123/vlc
  • luc65r/vlc-mpd
  • popov895/vlc
  • claucambra/vlc
  • brad/vlc
  • matthewmurua88/vlc
  • Tomas8874/vlc
  • philenotfound/vlc
  • makita-do3/vlc
  • LZXCorp/vlc
  • mar0x/vlc
  • senojetkennedy0102/vlc
  • shaneb243/vlc
  • ahmadbader/vlc
  • rajduttcse26/vlc-audio-filters
  • Juniorzito8415/vlc
  • achernyakov/vlc
  • lucasjetgroup/vlc
  • pupdoggy666/vlc
  • gmde9363/vlc
  • alexnwayne/vlc
  • bahareebrahimi781/vlc
  • hamad633666/vlc
  • umghof3112/vlc
  • joe0199771874/vlc
  • Octocats66666666/vlc
  • jjm_223/vlc
  • btech10110.19/vlc
  • sunnykfc028/vlc-audio-filters
  • loic/vlc
  • nguyenminhducmx1/vlc
  • JanekKrueger/vlc
  • bstubbington2/vlc
  • rcombs/vlc
  • Ordissimo/vlc
  • king7532/vlc
  • noobsauce101/vlc
  • schong0525/vlc
  • myQwil/vlc
  • apisbg91/vlc
  • geeboy0101017/vlc
  • kim.faughey/vlc
  • nurupo/vlc
  • yyusea/vlc
  • 0711235879.khco/vlc
  • ialo/vlc
  • iloveyeye2/vlc
  • gdtdftdqtd/vlc
  • leandroconsiglio/vlc
  • AndyHTML2012/vlc
  • ncz/vlc
  • lucenticus/vlc
  • knr1931/vlc
  • kjoonlee/vlc
  • chandrakant100/vlc-qt
  • johge42/vlc
  • polter/vlc
  • hexchain/vlc
  • Tushwrld/vlc
  • mztea928/vlc
  • jbelloncastro/vlc
  • alvinhochun/vlc
  • ghostpiratecrow/vlc
  • ujjwaltwitx/vlc
  • alexsonarin06/vlc
  • adrianbon76/vlc
  • altsod/vlc
  • damien.lucas44/vlc
  • dmytrivtaisa/vlc
  • utk202/vlc
  • aaxhrj/vlc
  • thomas.hermes/vlc
  • structurenewworldorder/vlc
  • slomo/vlc
  • wantlamy/vlc
  • musc.o3cminc/vlc
  • thebarshablog/vlc
  • kerrick/vlc
  • kratos142518/vlc
  • leogps/vlc
  • vacantron/vlc
  • luna_koly/vlc
  • Ratio2/vlc
  • anuoshemohammad/vlc
  • apsun/vlc
  • aaa1115910/vlc
  • alimotmoyo/vlc
  • Ambossmann/vlc
  • Sam-LearnsToCode/vlc
  • Chilledheart/vlc
  • Labnann/vlc
  • ktcoooot1/vlc
  • mohit-marathe/vlc
  • johnddx/vlc
  • manstabuk/vlc
  • Omar-ahmed314/vlc
  • vineethkm/vlc
  • 9Enemi86/vlc
  • radoslav.m.panteleev/vlc
  • ashishami2002/vlc
  • Corbax/vlc
  • firnasahmed/vlc
  • pelayarmalam4/vlc
  • c0ff330k/vlc
  • shikhindahikar/vlc
  • l342723951/vlc
  • christianschwandner/vlc
  • douniwan5788/vlc
  • 7damian7/vlc
  • ferdnyc/vlc
  • f.ales1/vlc
  • pandagby/vlc
  • BaaBaa/vlc
  • jewe37/vlc
  • w00drow/vlc
  • russelltg/vlc
  • ironicallygod/vlc
  • soumyaDghosh/vlc
  • linzihao1999/vlc
  • deyayush6/vlc
  • mibi88/vlc
  • newabdallah10/vlc
  • jhorbincolombia/vlc
  • rimvihaqueshupto/vlc
  • andrewkhon98/vlc
  • fab78/vlc
  • lapaz17/vlc
  • amanna13/vlc
  • mdakram28/vlc
  • 07jw1980/vlc
  • sohamgupta/vlc
  • Eson-Jia1/vlc
  • Sumou/vlc
  • vikram-kangotra/vlc
  • chalice191/vlc
  • olivercalder/vlc
  • aaasg4001/vlc
  • zipdox/vlc
  • kwizart/vlc
  • Dragon-S/vlc
  • jdemeule/vlc
  • gabriel_lt/vlc
  • locutusofborg/vlc
  • sammirata/vlc-librist
  • another/vlc
  • Benjamin_Loison/vlc
  • ahmedmoselhi/vlc
  • petergaal/vlc
  • huynhsontung/vlc
  • dariusmihut/vlc
  • tvermaashutosh/vlc
  • buti/vlc
  • Niram7777/vlc
  • rohan-here/vlc
  • balaji-sivasakthi/vlc
  • rlindner81/vlc
  • Kakadus/vlc
  • djain/vlc
  • ABBurmeister/vlc
  • craighuggins/vlc
  • orbea/vlc
  • maxos/vlc
  • aakarshmj/vlc
  • kblaschke/vlc
  • ankitm/vlc
  • advait-0/vlc
  • mohak2003/vlc
  • yselkowitz/vlc
  • AZM999/vlc-azm
  • andrey.turkin/vlc
  • Disha-Baghel/vlc
  • nowrep/vlc
  • Apeng/vlc
  • Choucroute_melba/vlc
  • autra/vlc
  • eclipseo/vlc
  • fhuber/vlc
  • olafhering/vlc
  • sdasda7777/vlc
  • 1div0/vlc
  • skosnits/vlc-extended-playlist-support
  • dnicolson/vlc
  • Timshel/vlc
  • octopols/vlc
  • MangalK/vlc
  • nima64/vlc
  • misawai/vlc
  • Alexander-Wilms/vlc
  • Maxime2/vlc-fork-for-visualizer
  • ww/vlc
  • jeske/vlc
  • sgross-emlix/vlc
  • morenonatural/vlc
  • freakingLovesVLC/vlc
  • borisgolovnev/vlc
  • mpromonet/vlc
  • diogo.simao-marques/vlc
  • masstock/vlc
  • pratikpatel8982/vlc
  • hugok79/vlc
  • longervision/vlc
  • abhiudaysurya/vlc
  • rishabhgarg/vlc
  • tumic/vlc
  • cart/vlc
  • shubham442/vlc
  • Aditya692005/vlc
  • sammirata/vlc4
  • syrykh/vlc
  • Vvorcun/macos-new-icon
  • AyaanshC/vlc
  • nasso/vlc
  • Quark/vlc
  • sebastinas/vlc
  • rhstone/vlc
  • talregev/vlc
  • Managor/vlc
403 results
Show changes
Commits on Source (4)
......@@ -81,6 +81,9 @@ struct private_sys_t
libarchive_callback_t** pp_callback_data;
size_t i_callback_data;
const uint8_t *last_arcbuf;
size_t last_arcsize;
};
struct libarchive_callback_t {
......@@ -399,6 +402,8 @@ static int archive_extractor_reset( stream_extractor_t* p_extractor )
p_sys->i_offset = 0;
p_sys->b_eof = false;
p_sys->b_dead = false;
p_sys->last_arcbuf = NULL;
p_sys->last_arcsize = 0;
return VLC_SUCCESS;
}
......@@ -424,6 +429,8 @@ static private_sys_t* setup( vlc_object_t* obj, stream_t* source,
p_sys->source = source;
p_sys->p_obj = obj;
p_sys->last_arcbuf = NULL;
p_sys->last_arcsize = 0;
return p_sys;
......@@ -530,6 +537,7 @@ static int ReadDir( stream_directory_t* p_directory, input_item_node_t* p_node )
vlc_readdir_helper_init( &rdh, p_directory, p_node);
struct archive_entry* entry;
int archive_status;
unsigned item_count = 0;
while( !( archive_status = archive_read_next_header( p_arc, &entry ) ) )
{
......@@ -564,6 +572,7 @@ static int ReadDir( stream_directory_t* p_directory, input_item_node_t* p_node )
int64_t size = archive_entry_size( entry );
if( size >= 0 )
input_item_AddStat( p_item, "size", size );
item_count++;
}
free( mrl );
......@@ -571,14 +580,14 @@ static int ReadDir( stream_directory_t* p_directory, input_item_node_t* p_node )
break;
}
vlc_readdir_helper_finish( &rdh, archive_status == ARCHIVE_EOF );
return archive_status == ARCHIVE_EOF ? VLC_SUCCESS : VLC_EGENERIC;
bool success = item_count > 0 || archive_status == ARCHIVE_EOF;
vlc_readdir_helper_finish( &rdh, success );
return success ? VLC_SUCCESS : VLC_EGENERIC;
}
static ssize_t Read( stream_extractor_t *p_extractor, void* p_data, size_t i_size )
{
char dummy_buffer[ 8192 ];
private_sys_t* p_sys = p_extractor->p_sys;
libarchive_t* p_arc = p_sys->p_archive;
ssize_t i_ret;
......@@ -589,12 +598,39 @@ static ssize_t Read( stream_extractor_t *p_extractor, void* p_data, size_t i_siz
if( p_sys->b_eof )
return 0;
i_ret = archive_read_data( p_arc,
p_data ? p_data : dummy_buffer,
p_data ? i_size : __MIN( i_size, sizeof( dummy_buffer ) ) );
const void *arcbuf = NULL;
size_t arcsize = 0;
la_int64_t arcoffset = 0;
if( p_sys->last_arcbuf == NULL )
{
i_ret = archive_read_data_block( p_arc, &arcbuf, &arcsize, &arcoffset);
assert(arcoffset == (la_int64_t) p_sys->i_offset); (void)arcoffset;
}
else
{
i_ret = ARCHIVE_OK;
arcbuf = p_sys->last_arcbuf;
arcsize = p_sys->last_arcsize;
}
switch( i_ret )
{
case ARCHIVE_OK:
case ARCHIVE_EOF:
if( i_size >= arcsize )
{
i_size = arcsize;
p_sys->last_arcbuf = NULL;
p_sys->last_arcsize = 0;
}
else
{
p_sys->last_arcbuf = (uint8_t *)arcbuf + i_size;
p_sys->last_arcsize = arcsize - i_size;
}
if( p_data != NULL)
memcpy( p_data, arcbuf, i_size );
break;
case ARCHIVE_RETRY:
case ARCHIVE_FAILED:
msg_Dbg( p_extractor, "libarchive: %s", archive_error_string( p_arc ) );
......@@ -609,8 +645,8 @@ static ssize_t Read( stream_extractor_t *p_extractor, void* p_data, size_t i_siz
goto fatal_error;
}
p_sys->i_offset += i_ret;
return i_ret;
p_sys->i_offset += i_size;
return i_size;
fatal_error:
p_sys->b_dead = true;
......@@ -650,6 +686,7 @@ static int Seek( stream_extractor_t* p_extractor, uint64_t i_req )
}
p_sys->b_eof = false;
int ret = VLC_SUCCESS;
if( !p_sys->b_seekable_archive || p_sys->b_dead
|| archive_seek_data( p_sys->p_archive, i_req, SEEK_SET ) < 0 )
......@@ -660,29 +697,47 @@ static int Seek( stream_extractor_t* p_extractor, uint64_t i_req )
uint64_t i_skip = i_req - p_sys->i_offset;
/* RECREATE LIBARCHIVE HANDLE IF WE ARE SEEKING BACKWARDS */
if( i_req < p_sys->i_offset )
/* The 1st try is the original skip.
* The 2nd try is to go back to the previous position in case of
* failure. */
uint64_t preskip_offset = p_sys->i_offset;
for (unsigned i = 0; i < 2; ++i)
{
if( archive_extractor_reset( p_extractor ) )
if( i_req < p_sys->i_offset )
{
msg_Err( p_extractor, "unable to reset libarchive handle" );
return VLC_EGENERIC;
/* RECREATE LIBARCHIVE HANDLE IF WE ARE SEEKING BACKWARDS */
if( archive_extractor_reset( p_extractor ) )
{
msg_Err( p_extractor, "unable to reset libarchive handle" );
return VLC_EGENERIC;
}
i_skip = i_req;
}
i_skip = i_req;
}
if( archive_skip_decompressed( p_extractor, &i_skip ) )
{
msg_Warn( p_extractor, "failed to skip to seek position %" PRIu64 "/%" PRId64,
i_req, archive_entry_size( p_sys->p_entry ) );
p_sys->i_offset += i_skip;
return VLC_EGENERIC;
if( archive_skip_decompressed( p_extractor, &i_skip ) == 0 )
break; /* Success */
msg_Warn( p_extractor, "failed to skip to seek position %"
PRIu64 "/%" PRId64, i_req,
archive_entry_size( p_sys->p_entry ) );
ret = VLC_EGENERIC;
/* Seek back to the original offset before failure */
i_req = preskip_offset;
if( i_req == p_sys->i_offset )
break; /* no data was skipped, no need for a 2nd try */
assert( i_req < p_sys->i_offset );
}
}
else
{
p_sys->last_arcbuf = NULL;
p_sys->last_arcsize = 0;
}
p_sys->i_offset = i_req;
return VLC_SUCCESS;
return ret;
}
......