[vlc-commits] stream_extractor: archive: add archive_extractor_reset
Filip Roséen
git at videolan.org
Tue Jul 24 15:41:06 CEST 2018
vlc | branch: master | Filip Roséen <filip at atch.se> | Tue Jul 24 14:30:47 2018 +0200| [6062e012d835e384cbfe8d1ae6ba2e2f17704815] | committer: Jean-Baptiste Kempf
stream_extractor: archive: add archive_extractor_reset
In order for us to start over, such as a failed attempt of
dumb-seeking, we must reset the state of our extractor as if we just
opened the file.
This helper accomplishes that while also making sure that all
associated variables are back in a proper state.
Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=6062e012d835e384cbfe8d1ae6ba2e2f17704815
---
modules/stream_extractor/archive.c | 23 +++++++++++++++++------
1 file changed, 17 insertions(+), 6 deletions(-)
diff --git a/modules/stream_extractor/archive.c b/modules/stream_extractor/archive.c
index 43b4056360..8f81e592f8 100644
--- a/modules/stream_extractor/archive.c
+++ b/modules/stream_extractor/archive.c
@@ -384,6 +384,21 @@ static int archive_seek_subentry( private_sys_t* p_sys, char const* psz_subentry
return VLC_SUCCESS;
}
+static int archive_extractor_reset( stream_extractor_t* p_extractor )
+{
+ private_sys_t* p_sys = p_extractor->p_sys;
+
+ if( vlc_stream_Seek( p_extractor->source, 0 )
+ || archive_clean( p_sys )
+ || archive_init( p_sys, p_extractor->source )
+ || archive_seek_subentry( p_sys, p_extractor->identifier ) )
+ return VLC_EGENERIC;
+
+ p_sys->i_offset = 0;
+ p_sys->b_dead = false;
+ return VLC_SUCCESS;
+}
+
/* ------------------------------------------------------------------------- */
static private_sys_t* setup( vlc_object_t* obj, stream_t* source )
@@ -619,13 +634,9 @@ static int Seek( stream_extractor_t* p_extractor, uint64_t i_req )
if( i_req < i_offset )
{
- if( archive_clean( p_sys ) )
- return VLC_EGENERIC;
-
- if( archive_init( p_sys, p_extractor->source ) ||
- archive_seek_subentry( p_sys, p_extractor->identifier ) )
+ if( archive_extractor_reset( p_extractor ) )
{
- msg_Err( p_extractor, "unable to recreate libarchive handle" );
+ msg_Err( p_extractor, "unable to reset libarchive handle" );
return VLC_EGENERIC;
}
More information about the vlc-commits
mailing list