2009-01-17 17:59:40 +01:00
|
|
|
/*****************************************************************************
|
|
|
|
* vlc_input_item.h: Core input item
|
|
|
|
*****************************************************************************
|
LGPL
Re-license almost all of libVLC and libVLCcore to LGPLv2.1+
This move was authorized by the developers, either:
- by e-mail,
- by vote at the VideoLAN Dev Days 2011,
- on the license website,
- in a contract, oral or written.
No objection was raised, so far.
The developers agreeing are:
Justus Piater
Alexis Ballier
Alexander Bethke
Mohammed Adnène Trojette
Alex Converse
Alexey Sokolov
Alexis de Lattre
Andre Pang
Anthony Loiseau
Cyril Deguet
André Weber
Boris Dorès
Brieuc Jeunhomme
Benjamin Drung
Hugo Beauzée-Luyssen
Benoit Steiner
Benjamin Pracht
Bernie Purcell
Przemyslaw Fiala
Arnaud de Bossoreille de Ribou
Brad Smith
Nick Briggs
Christopher Rath
Christophe Courtaut
Christopher Mueller
Clement Chesnin
Andres Krapf
Damien Fouilleul
David Flynn
Sebastien Zwickert
Antoine Cellerier
Jérôme Decoodt
Jérome Decoodt
Dylan Yudaken
Eduard Babayan
Eugenio Jarosiewicz
Elliot Murphy
Eric Petit
Erwan Tulou
Etienne Membrives
Ludovic Fauvet
Fabio Ritrovato
Tobias Güntner
Jakub Wieczorek
Frédéric Crozat
Francois Cartegnie
Laurent Aimar
Florian G. Pflug
Felix Paul Kühne
Frank Enderle
Rafaël Carré
Simon Latapie
Gildas Bazin
Geoffroy Couprie
Julien / Gellule
Gildas Bazin
Arnaud Schauly
Toralf Niebuhr
Vicente Jimenez Aguilar
Derk-Jan Hartman
Henri Fallon
Ilkka Ollakka
Olivier Teulière
Rémi Duraffort
Jakob Leben
Jean-Baptiste Kempf
Jean-Paul Saman
Jean-Philippe Grimaldi
Jean-François Massol
Gaël Hendryckx
Jakob Leben
Jean-Marc Dressler
Jai Menon
Johan Bilien
Johann Ransay
Joris van Rooij
JP Dinger
Jean-Philippe André
Adrien Grand
Juha Jeronen
Juho Vähä-Herttua
Kaarlo Raiha
Kaarlo Raiha
Kamil Baldyga
Keary Griffin
Ken Self
KO Myung-Hun
Pierre Ynard
Filippo Carone
Loïc Minier
Luca Barbato
Lucas C. Villa Real
Lukas Durfina
Adrien Maglo
Marc Ariberti
Mark Lee
Mark Moriarty
Martin Storsjö
Christophe Massiot
Michel Kaempf
Marian Ďurkovič
Mirsal Ennaime
Carlo Calabrò
Damien Lucas
Naohiro Koriyama
Basos G
Pierre Baillet
Vincent Penquerc'h
Olivier Aubert
Pankaj Yadav
Paul Corke
Pierre d'Herbemont
Philippe Morin
Antoine Lejeune
Michael Ploujnikov
Jean-Marc Dressler
Michael Hanselmann
Rafaël Carré
Ramiro Polla
Rémi Denis-Courmont
Renaud Dartus
Richard Shepherd
Faustino Osuna
Arnaud Vallat
Rob Jonson
Robert Jedrzejczyk
Steve Lhomme
Rocky Bernstein
Romain Goyet
Rov Juvano
Sam Hocevar
Martin T. H. Sandsmark
Sebastian Birk
Sébastien Escudier
Vincent Seguin
Fabio Ritrovato
Sigmund Augdal Helberg
Casian Andrei
Srikanth Raju
Hannes Domani
Stéphane Borel
Stephan Krempel
Stephan Assmus
Tony Castley
Pavlov Konstantin
Eric Petit
Tanguy Krotoff
Dennis van Amerongen
Michel Lespinasse
Can Wu
Xavier Marchesini
Sébastien Toque
Christophe Mutricy
Yoann Peronneau
Yohann Martineau
Yuval Tze
Scott Caudle
Clément Stenac
It is possible, that some minor piece of code was badly tracked, for
some reasons (SVN, mainly) or that some small developers did not answer.
However, as an "œuvre collective", defined as in "CPI 113-2 alinéa 3",
and seeing "Cour. Cass. 17 Mai 1978", and seeing that the editor and
the very vast majority of developers have agreed (> 99.99% of the code,
> 99% of developers), we are fine here.
2011-11-27 21:44:15 +01:00
|
|
|
* Copyright (C) 1999-2009 VLC authors and VideoLAN
|
2009-01-17 17:59:40 +01:00
|
|
|
* $Id$
|
|
|
|
*
|
|
|
|
* Authors: Christophe Massiot <massiot@via.ecp.fr>
|
|
|
|
* Laurent Aimar <fenrir@via.ecp.fr>
|
|
|
|
*
|
LGPL
Re-license almost all of libVLC and libVLCcore to LGPLv2.1+
This move was authorized by the developers, either:
- by e-mail,
- by vote at the VideoLAN Dev Days 2011,
- on the license website,
- in a contract, oral or written.
No objection was raised, so far.
The developers agreeing are:
Justus Piater
Alexis Ballier
Alexander Bethke
Mohammed Adnène Trojette
Alex Converse
Alexey Sokolov
Alexis de Lattre
Andre Pang
Anthony Loiseau
Cyril Deguet
André Weber
Boris Dorès
Brieuc Jeunhomme
Benjamin Drung
Hugo Beauzée-Luyssen
Benoit Steiner
Benjamin Pracht
Bernie Purcell
Przemyslaw Fiala
Arnaud de Bossoreille de Ribou
Brad Smith
Nick Briggs
Christopher Rath
Christophe Courtaut
Christopher Mueller
Clement Chesnin
Andres Krapf
Damien Fouilleul
David Flynn
Sebastien Zwickert
Antoine Cellerier
Jérôme Decoodt
Jérome Decoodt
Dylan Yudaken
Eduard Babayan
Eugenio Jarosiewicz
Elliot Murphy
Eric Petit
Erwan Tulou
Etienne Membrives
Ludovic Fauvet
Fabio Ritrovato
Tobias Güntner
Jakub Wieczorek
Frédéric Crozat
Francois Cartegnie
Laurent Aimar
Florian G. Pflug
Felix Paul Kühne
Frank Enderle
Rafaël Carré
Simon Latapie
Gildas Bazin
Geoffroy Couprie
Julien / Gellule
Gildas Bazin
Arnaud Schauly
Toralf Niebuhr
Vicente Jimenez Aguilar
Derk-Jan Hartman
Henri Fallon
Ilkka Ollakka
Olivier Teulière
Rémi Duraffort
Jakob Leben
Jean-Baptiste Kempf
Jean-Paul Saman
Jean-Philippe Grimaldi
Jean-François Massol
Gaël Hendryckx
Jakob Leben
Jean-Marc Dressler
Jai Menon
Johan Bilien
Johann Ransay
Joris van Rooij
JP Dinger
Jean-Philippe André
Adrien Grand
Juha Jeronen
Juho Vähä-Herttua
Kaarlo Raiha
Kaarlo Raiha
Kamil Baldyga
Keary Griffin
Ken Self
KO Myung-Hun
Pierre Ynard
Filippo Carone
Loïc Minier
Luca Barbato
Lucas C. Villa Real
Lukas Durfina
Adrien Maglo
Marc Ariberti
Mark Lee
Mark Moriarty
Martin Storsjö
Christophe Massiot
Michel Kaempf
Marian Ďurkovič
Mirsal Ennaime
Carlo Calabrò
Damien Lucas
Naohiro Koriyama
Basos G
Pierre Baillet
Vincent Penquerc'h
Olivier Aubert
Pankaj Yadav
Paul Corke
Pierre d'Herbemont
Philippe Morin
Antoine Lejeune
Michael Ploujnikov
Jean-Marc Dressler
Michael Hanselmann
Rafaël Carré
Ramiro Polla
Rémi Denis-Courmont
Renaud Dartus
Richard Shepherd
Faustino Osuna
Arnaud Vallat
Rob Jonson
Robert Jedrzejczyk
Steve Lhomme
Rocky Bernstein
Romain Goyet
Rov Juvano
Sam Hocevar
Martin T. H. Sandsmark
Sebastian Birk
Sébastien Escudier
Vincent Seguin
Fabio Ritrovato
Sigmund Augdal Helberg
Casian Andrei
Srikanth Raju
Hannes Domani
Stéphane Borel
Stephan Krempel
Stephan Assmus
Tony Castley
Pavlov Konstantin
Eric Petit
Tanguy Krotoff
Dennis van Amerongen
Michel Lespinasse
Can Wu
Xavier Marchesini
Sébastien Toque
Christophe Mutricy
Yoann Peronneau
Yohann Martineau
Yuval Tze
Scott Caudle
Clément Stenac
It is possible, that some minor piece of code was badly tracked, for
some reasons (SVN, mainly) or that some small developers did not answer.
However, as an "œuvre collective", defined as in "CPI 113-2 alinéa 3",
and seeing "Cour. Cass. 17 Mai 1978", and seeing that the editor and
the very vast majority of developers have agreed (> 99.99% of the code,
> 99% of developers), we are fine here.
2011-11-27 21:44:15 +01:00
|
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
|
|
* under the terms of the GNU Lesser General Public License as published by
|
|
|
|
* the Free Software Foundation; either version 2.1 of the License, or
|
2009-01-17 17:59:40 +01:00
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
LGPL
Re-license almost all of libVLC and libVLCcore to LGPLv2.1+
This move was authorized by the developers, either:
- by e-mail,
- by vote at the VideoLAN Dev Days 2011,
- on the license website,
- in a contract, oral or written.
No objection was raised, so far.
The developers agreeing are:
Justus Piater
Alexis Ballier
Alexander Bethke
Mohammed Adnène Trojette
Alex Converse
Alexey Sokolov
Alexis de Lattre
Andre Pang
Anthony Loiseau
Cyril Deguet
André Weber
Boris Dorès
Brieuc Jeunhomme
Benjamin Drung
Hugo Beauzée-Luyssen
Benoit Steiner
Benjamin Pracht
Bernie Purcell
Przemyslaw Fiala
Arnaud de Bossoreille de Ribou
Brad Smith
Nick Briggs
Christopher Rath
Christophe Courtaut
Christopher Mueller
Clement Chesnin
Andres Krapf
Damien Fouilleul
David Flynn
Sebastien Zwickert
Antoine Cellerier
Jérôme Decoodt
Jérome Decoodt
Dylan Yudaken
Eduard Babayan
Eugenio Jarosiewicz
Elliot Murphy
Eric Petit
Erwan Tulou
Etienne Membrives
Ludovic Fauvet
Fabio Ritrovato
Tobias Güntner
Jakub Wieczorek
Frédéric Crozat
Francois Cartegnie
Laurent Aimar
Florian G. Pflug
Felix Paul Kühne
Frank Enderle
Rafaël Carré
Simon Latapie
Gildas Bazin
Geoffroy Couprie
Julien / Gellule
Gildas Bazin
Arnaud Schauly
Toralf Niebuhr
Vicente Jimenez Aguilar
Derk-Jan Hartman
Henri Fallon
Ilkka Ollakka
Olivier Teulière
Rémi Duraffort
Jakob Leben
Jean-Baptiste Kempf
Jean-Paul Saman
Jean-Philippe Grimaldi
Jean-François Massol
Gaël Hendryckx
Jakob Leben
Jean-Marc Dressler
Jai Menon
Johan Bilien
Johann Ransay
Joris van Rooij
JP Dinger
Jean-Philippe André
Adrien Grand
Juha Jeronen
Juho Vähä-Herttua
Kaarlo Raiha
Kaarlo Raiha
Kamil Baldyga
Keary Griffin
Ken Self
KO Myung-Hun
Pierre Ynard
Filippo Carone
Loïc Minier
Luca Barbato
Lucas C. Villa Real
Lukas Durfina
Adrien Maglo
Marc Ariberti
Mark Lee
Mark Moriarty
Martin Storsjö
Christophe Massiot
Michel Kaempf
Marian Ďurkovič
Mirsal Ennaime
Carlo Calabrò
Damien Lucas
Naohiro Koriyama
Basos G
Pierre Baillet
Vincent Penquerc'h
Olivier Aubert
Pankaj Yadav
Paul Corke
Pierre d'Herbemont
Philippe Morin
Antoine Lejeune
Michael Ploujnikov
Jean-Marc Dressler
Michael Hanselmann
Rafaël Carré
Ramiro Polla
Rémi Denis-Courmont
Renaud Dartus
Richard Shepherd
Faustino Osuna
Arnaud Vallat
Rob Jonson
Robert Jedrzejczyk
Steve Lhomme
Rocky Bernstein
Romain Goyet
Rov Juvano
Sam Hocevar
Martin T. H. Sandsmark
Sebastian Birk
Sébastien Escudier
Vincent Seguin
Fabio Ritrovato
Sigmund Augdal Helberg
Casian Andrei
Srikanth Raju
Hannes Domani
Stéphane Borel
Stephan Krempel
Stephan Assmus
Tony Castley
Pavlov Konstantin
Eric Petit
Tanguy Krotoff
Dennis van Amerongen
Michel Lespinasse
Can Wu
Xavier Marchesini
Sébastien Toque
Christophe Mutricy
Yoann Peronneau
Yohann Martineau
Yuval Tze
Scott Caudle
Clément Stenac
It is possible, that some minor piece of code was badly tracked, for
some reasons (SVN, mainly) or that some small developers did not answer.
However, as an "œuvre collective", defined as in "CPI 113-2 alinéa 3",
and seeing "Cour. Cass. 17 Mai 1978", and seeing that the editor and
the very vast majority of developers have agreed (> 99.99% of the code,
> 99% of developers), we are fine here.
2011-11-27 21:44:15 +01:00
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU Lesser General Public License for more details.
|
2009-01-17 17:59:40 +01:00
|
|
|
*
|
LGPL
Re-license almost all of libVLC and libVLCcore to LGPLv2.1+
This move was authorized by the developers, either:
- by e-mail,
- by vote at the VideoLAN Dev Days 2011,
- on the license website,
- in a contract, oral or written.
No objection was raised, so far.
The developers agreeing are:
Justus Piater
Alexis Ballier
Alexander Bethke
Mohammed Adnène Trojette
Alex Converse
Alexey Sokolov
Alexis de Lattre
Andre Pang
Anthony Loiseau
Cyril Deguet
André Weber
Boris Dorès
Brieuc Jeunhomme
Benjamin Drung
Hugo Beauzée-Luyssen
Benoit Steiner
Benjamin Pracht
Bernie Purcell
Przemyslaw Fiala
Arnaud de Bossoreille de Ribou
Brad Smith
Nick Briggs
Christopher Rath
Christophe Courtaut
Christopher Mueller
Clement Chesnin
Andres Krapf
Damien Fouilleul
David Flynn
Sebastien Zwickert
Antoine Cellerier
Jérôme Decoodt
Jérome Decoodt
Dylan Yudaken
Eduard Babayan
Eugenio Jarosiewicz
Elliot Murphy
Eric Petit
Erwan Tulou
Etienne Membrives
Ludovic Fauvet
Fabio Ritrovato
Tobias Güntner
Jakub Wieczorek
Frédéric Crozat
Francois Cartegnie
Laurent Aimar
Florian G. Pflug
Felix Paul Kühne
Frank Enderle
Rafaël Carré
Simon Latapie
Gildas Bazin
Geoffroy Couprie
Julien / Gellule
Gildas Bazin
Arnaud Schauly
Toralf Niebuhr
Vicente Jimenez Aguilar
Derk-Jan Hartman
Henri Fallon
Ilkka Ollakka
Olivier Teulière
Rémi Duraffort
Jakob Leben
Jean-Baptiste Kempf
Jean-Paul Saman
Jean-Philippe Grimaldi
Jean-François Massol
Gaël Hendryckx
Jakob Leben
Jean-Marc Dressler
Jai Menon
Johan Bilien
Johann Ransay
Joris van Rooij
JP Dinger
Jean-Philippe André
Adrien Grand
Juha Jeronen
Juho Vähä-Herttua
Kaarlo Raiha
Kaarlo Raiha
Kamil Baldyga
Keary Griffin
Ken Self
KO Myung-Hun
Pierre Ynard
Filippo Carone
Loïc Minier
Luca Barbato
Lucas C. Villa Real
Lukas Durfina
Adrien Maglo
Marc Ariberti
Mark Lee
Mark Moriarty
Martin Storsjö
Christophe Massiot
Michel Kaempf
Marian Ďurkovič
Mirsal Ennaime
Carlo Calabrò
Damien Lucas
Naohiro Koriyama
Basos G
Pierre Baillet
Vincent Penquerc'h
Olivier Aubert
Pankaj Yadav
Paul Corke
Pierre d'Herbemont
Philippe Morin
Antoine Lejeune
Michael Ploujnikov
Jean-Marc Dressler
Michael Hanselmann
Rafaël Carré
Ramiro Polla
Rémi Denis-Courmont
Renaud Dartus
Richard Shepherd
Faustino Osuna
Arnaud Vallat
Rob Jonson
Robert Jedrzejczyk
Steve Lhomme
Rocky Bernstein
Romain Goyet
Rov Juvano
Sam Hocevar
Martin T. H. Sandsmark
Sebastian Birk
Sébastien Escudier
Vincent Seguin
Fabio Ritrovato
Sigmund Augdal Helberg
Casian Andrei
Srikanth Raju
Hannes Domani
Stéphane Borel
Stephan Krempel
Stephan Assmus
Tony Castley
Pavlov Konstantin
Eric Petit
Tanguy Krotoff
Dennis van Amerongen
Michel Lespinasse
Can Wu
Xavier Marchesini
Sébastien Toque
Christophe Mutricy
Yoann Peronneau
Yohann Martineau
Yuval Tze
Scott Caudle
Clément Stenac
It is possible, that some minor piece of code was badly tracked, for
some reasons (SVN, mainly) or that some small developers did not answer.
However, as an "œuvre collective", defined as in "CPI 113-2 alinéa 3",
and seeing "Cour. Cass. 17 Mai 1978", and seeing that the editor and
the very vast majority of developers have agreed (> 99.99% of the code,
> 99% of developers), we are fine here.
2011-11-27 21:44:15 +01:00
|
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
|
2009-01-17 17:59:40 +01:00
|
|
|
*****************************************************************************/
|
|
|
|
|
2010-02-07 11:47:41 +01:00
|
|
|
#ifndef VLC_INPUT_ITEM_H
|
|
|
|
#define VLC_INPUT_ITEM_H 1
|
2009-01-17 17:59:40 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* \file
|
|
|
|
* This file defines functions, structures and enums for input items in vlc
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <vlc_meta.h>
|
2009-09-22 22:25:07 +02:00
|
|
|
#include <vlc_epg.h>
|
2010-06-11 19:07:21 +02:00
|
|
|
#include <vlc_events.h>
|
2009-01-17 17:59:40 +01:00
|
|
|
|
|
|
|
#include <string.h>
|
|
|
|
|
2015-03-30 20:13:17 +02:00
|
|
|
typedef struct input_item_opaque input_item_opaque_t;
|
2016-03-24 09:48:10 +01:00
|
|
|
typedef struct input_item_slave input_item_slave_t;
|
2015-03-30 20:13:17 +02:00
|
|
|
|
2009-01-17 17:59:40 +01:00
|
|
|
struct info_t
|
|
|
|
{
|
|
|
|
char *psz_name; /**< Name of this info */
|
|
|
|
char *psz_value; /**< Value of the info */
|
|
|
|
};
|
|
|
|
|
|
|
|
struct info_category_t
|
|
|
|
{
|
|
|
|
char *psz_name; /**< Name of this category */
|
|
|
|
int i_infos; /**< Number of infos in the category */
|
|
|
|
struct info_t **pp_infos; /**< Pointer to an array of infos */
|
|
|
|
};
|
|
|
|
|
2015-03-30 20:13:17 +02:00
|
|
|
/**
|
|
|
|
* Describes an input and is used to spawn input_thread_t objects.
|
|
|
|
*/
|
2009-01-17 17:59:40 +01:00
|
|
|
struct input_item_t
|
|
|
|
{
|
|
|
|
int i_id; /**< Identifier of the item */
|
|
|
|
|
|
|
|
char *psz_name; /**< text describing this item */
|
|
|
|
char *psz_uri; /**< mrl of this item */
|
|
|
|
|
|
|
|
int i_options; /**< Number of input options */
|
|
|
|
char **ppsz_options; /**< Array of input options */
|
|
|
|
uint8_t *optflagv; /**< Some flags of input options */
|
|
|
|
unsigned optflagc;
|
2015-03-30 20:13:17 +02:00
|
|
|
input_item_opaque_t *opaques; /**< List of opaque pointer values */
|
2009-01-17 17:59:40 +01:00
|
|
|
|
2009-08-24 17:41:02 +02:00
|
|
|
mtime_t i_duration; /**< Duration in microseconds */
|
2009-01-17 17:59:40 +01:00
|
|
|
|
|
|
|
|
|
|
|
int i_categories; /**< Number of info categories */
|
|
|
|
info_category_t **pp_categories; /**< Pointer to the first info category */
|
|
|
|
|
|
|
|
int i_es; /**< Number of es format descriptions */
|
|
|
|
es_format_t **es; /**< Es formats */
|
|
|
|
|
|
|
|
input_stats_t *p_stats; /**< Statistics */
|
|
|
|
|
|
|
|
vlc_meta_t *p_meta;
|
|
|
|
|
2009-09-22 22:25:07 +02:00
|
|
|
int i_epg; /**< Number of EPG entries */
|
|
|
|
vlc_epg_t **pp_epg; /**< EPG entries */
|
|
|
|
|
2016-03-24 09:48:10 +01:00
|
|
|
int i_slaves; /**< Number of slaves */
|
|
|
|
input_item_slave_t **pp_slaves; /**< Slave entries that will be loaded by
|
|
|
|
the input_thread */
|
|
|
|
|
2009-01-17 17:59:40 +01:00
|
|
|
vlc_event_manager_t event_manager;
|
|
|
|
|
|
|
|
vlc_mutex_t lock; /**< Lock for the item */
|
2009-12-22 14:33:35 +01:00
|
|
|
|
|
|
|
uint8_t i_type; /**< Type (file, disc, ... see input_item_type_e) */
|
2015-03-24 17:22:15 +01:00
|
|
|
bool b_net; /**< Net: always true for TYPE_STREAM, it
|
|
|
|
depends for others types */
|
2009-12-22 14:33:35 +01:00
|
|
|
bool b_error_when_reading;/**< Error When Reading */
|
2015-03-24 17:22:19 +01:00
|
|
|
|
|
|
|
int i_preparse_depth; /**< How many level of sub items can be preparsed:
|
|
|
|
-1: recursive, 0: none, >0: n levels */
|
2016-02-03 17:47:16 +01:00
|
|
|
|
|
|
|
bool b_preparse_interact; /**< Force interaction with the user when
|
|
|
|
preparsing.*/
|
2009-01-17 17:59:40 +01:00
|
|
|
};
|
|
|
|
|
2013-12-31 18:40:06 +01:00
|
|
|
TYPEDEF_ARRAY(input_item_t*, input_item_array_t)
|
|
|
|
|
2009-01-17 19:19:09 +01:00
|
|
|
enum input_item_type_e
|
|
|
|
{
|
|
|
|
ITEM_TYPE_UNKNOWN,
|
|
|
|
ITEM_TYPE_FILE,
|
|
|
|
ITEM_TYPE_DIRECTORY,
|
|
|
|
ITEM_TYPE_DISC,
|
|
|
|
ITEM_TYPE_CARD,
|
2015-03-24 17:22:14 +01:00
|
|
|
ITEM_TYPE_STREAM,
|
2009-01-17 19:19:09 +01:00
|
|
|
ITEM_TYPE_PLAYLIST,
|
|
|
|
ITEM_TYPE_NODE,
|
|
|
|
|
|
|
|
/* This one is not a real type but the number of input_item types. */
|
|
|
|
ITEM_TYPE_NUMBER
|
|
|
|
};
|
2009-01-17 17:59:40 +01:00
|
|
|
|
2016-04-14 11:16:24 +02:00
|
|
|
enum input_item_net_type
|
|
|
|
{
|
|
|
|
ITEM_NET_UNKNOWN,
|
|
|
|
ITEM_NET,
|
|
|
|
ITEM_LOCAL
|
|
|
|
};
|
|
|
|
|
2016-03-24 09:48:10 +01:00
|
|
|
enum slave_type
|
|
|
|
{
|
|
|
|
SLAVE_TYPE_SPU,
|
|
|
|
SLAVE_TYPE_AUDIO,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum slave_priority
|
|
|
|
{
|
|
|
|
SLAVE_PRIORITY_MATCH_NONE = 1,
|
|
|
|
SLAVE_PRIORITY_MATCH_RIGHT,
|
|
|
|
SLAVE_PRIORITY_MATCH_LEFT,
|
|
|
|
SLAVE_PRIORITY_MATCH_ALL,
|
|
|
|
SLAVE_PRIORITY_USER
|
|
|
|
};
|
|
|
|
|
|
|
|
#define SLAVE_SPU_EXTENSIONS \
|
|
|
|
"idx", "sub", "srt", \
|
|
|
|
"ssa", "ass", "smi", \
|
|
|
|
"utf", "utf8", "utf-8", \
|
|
|
|
"rt", "aqt", "txt", \
|
|
|
|
"usf", "jss", "cdg", \
|
|
|
|
"psb", "mpsub","mpl2", \
|
|
|
|
"pjs", "dks", "stl", \
|
|
|
|
"vtt", "sbv"
|
|
|
|
#define SLAVE_AUDIO_EXTENSIONS \
|
|
|
|
"ac3", "m4a"
|
|
|
|
|
|
|
|
struct input_item_slave
|
|
|
|
{
|
|
|
|
enum slave_type i_type; /**< Slave type (spu, audio) */
|
|
|
|
enum slave_priority i_priority; /**< Slave priority */
|
|
|
|
char psz_uri[]; /**< Slave mrl */
|
|
|
|
};
|
|
|
|
|
2015-05-20 15:14:02 +02:00
|
|
|
typedef int (*input_item_compar_cb)( input_item_t *, input_item_t * );
|
|
|
|
|
2010-02-02 03:56:10 +01:00
|
|
|
struct input_item_node_t
|
|
|
|
{
|
|
|
|
input_item_t * p_item;
|
|
|
|
int i_children;
|
|
|
|
input_item_node_t **pp_children;
|
|
|
|
input_item_node_t *p_parent;
|
2015-05-20 15:14:02 +02:00
|
|
|
input_item_compar_cb compar_cb;
|
2015-05-18 16:01:03 +02:00
|
|
|
bool b_can_loop;
|
2010-02-02 03:56:10 +01:00
|
|
|
};
|
|
|
|
|
2016-04-11 15:44:00 +02:00
|
|
|
VLC_API void input_item_CopyOptions( input_item_t *p_child, input_item_t *p_parent );
|
2011-05-07 13:06:21 +02:00
|
|
|
VLC_API void input_item_SetName( input_item_t *p_item, const char *psz_name );
|
2009-01-17 17:59:40 +01:00
|
|
|
|
2010-02-03 01:32:06 +01:00
|
|
|
/**
|
|
|
|
* Add one subitem to this item
|
|
|
|
*
|
|
|
|
* This won't hold the item, but can tell to interested third parties
|
2009-01-17 17:59:40 +01:00
|
|
|
* Like the playlist, that there is a new sub item. With this design
|
2016-04-02 16:50:31 +02:00
|
|
|
* It is not the input item's responsibility to keep all the ref of
|
2010-02-09 15:56:34 +01:00
|
|
|
* the input item children.
|
|
|
|
*
|
|
|
|
* Sends a vlc_InputItemSubItemTreeAdded and a vlc_InputItemSubItemAdded event
|
|
|
|
*/
|
2011-05-07 13:06:21 +02:00
|
|
|
VLC_API void input_item_PostSubItem( input_item_t *p_parent, input_item_t *p_child );
|
2009-01-17 17:59:40 +01:00
|
|
|
|
2010-02-03 01:32:06 +01:00
|
|
|
/**
|
2010-02-03 03:47:17 +01:00
|
|
|
* Start adding multiple subitems.
|
2010-02-03 01:32:06 +01:00
|
|
|
*
|
2010-02-03 03:47:17 +01:00
|
|
|
* Create a root node to hold a tree of subitems for given item
|
2010-02-03 01:32:06 +01:00
|
|
|
*/
|
2011-05-07 22:02:08 +02:00
|
|
|
VLC_API input_item_node_t * input_item_node_Create( input_item_t *p_input ) VLC_USED;
|
2010-02-03 01:32:06 +01:00
|
|
|
|
|
|
|
/**
|
2010-02-09 15:56:34 +01:00
|
|
|
* Add a new child node to this parent node that will point to this subitem.
|
2010-02-03 01:32:06 +01:00
|
|
|
*/
|
2011-05-07 13:06:21 +02:00
|
|
|
VLC_API input_item_node_t * input_item_node_AppendItem( input_item_node_t *p_node, input_item_t *p_item );
|
2010-02-03 01:32:06 +01:00
|
|
|
|
|
|
|
/**
|
2010-02-09 15:56:34 +01:00
|
|
|
* Add an already created node to children of this parent node.
|
2010-02-03 01:32:06 +01:00
|
|
|
*/
|
2011-05-07 13:06:21 +02:00
|
|
|
VLC_API void input_item_node_AppendNode( input_item_node_t *p_parent, input_item_node_t *p_child );
|
2010-02-03 01:32:06 +01:00
|
|
|
|
2015-05-20 15:14:02 +02:00
|
|
|
/**
|
|
|
|
* Sort all p_item children of the node recursively.
|
|
|
|
*/
|
|
|
|
VLC_API void input_item_node_Sort( input_item_node_t *p_node,
|
|
|
|
input_item_compar_cb compar_cb );
|
|
|
|
|
2010-02-03 01:32:06 +01:00
|
|
|
/**
|
2010-02-03 03:47:17 +01:00
|
|
|
* Delete a node created with input_item_node_Create() and all its children.
|
2010-02-03 01:32:06 +01:00
|
|
|
*/
|
2011-05-07 13:06:21 +02:00
|
|
|
VLC_API void input_item_node_Delete( input_item_node_t *p_node );
|
2010-02-03 01:32:06 +01:00
|
|
|
|
2010-02-03 03:47:17 +01:00
|
|
|
/**
|
|
|
|
* End adding multiple subitems.
|
|
|
|
*
|
2010-02-09 15:56:34 +01:00
|
|
|
* Sends a vlc_InputItemSubItemTreeAdded event to notify that the item pointed to
|
|
|
|
* by the given root node has created new subitems that are pointed to by all the
|
|
|
|
* children of the node.
|
|
|
|
*
|
|
|
|
* Also sends vlc_InputItemSubItemAdded event for every child under the given root node;
|
2010-02-03 03:47:17 +01:00
|
|
|
*
|
2010-02-09 15:56:34 +01:00
|
|
|
* In the end deletes the node and all its children nodes.
|
2010-02-03 03:47:17 +01:00
|
|
|
*/
|
2011-05-07 13:06:21 +02:00
|
|
|
VLC_API void input_item_node_PostAndDelete( input_item_node_t *p_node );
|
2010-02-02 03:56:10 +01:00
|
|
|
|
2009-01-17 17:59:40 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Option flags
|
|
|
|
*/
|
|
|
|
enum input_item_option_e
|
|
|
|
{
|
2009-01-28 21:09:11 +01:00
|
|
|
/* Allow VLC to trust the given option.
|
|
|
|
* By default options are untrusted */
|
2009-01-17 17:59:40 +01:00
|
|
|
VLC_INPUT_OPTION_TRUSTED = 0x2,
|
2009-01-28 21:09:11 +01:00
|
|
|
|
2014-05-10 17:30:45 +02:00
|
|
|
/* Add the option, unless the same option
|
|
|
|
* is already present. */
|
2009-01-17 17:59:40 +01:00
|
|
|
VLC_INPUT_OPTION_UNIQUE = 0x100,
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This function allows to add an option to an existing input_item_t.
|
|
|
|
*/
|
2011-05-07 13:06:21 +02:00
|
|
|
VLC_API int input_item_AddOption(input_item_t *, const char *, unsigned i_flags );
|
2016-04-14 11:16:23 +02:00
|
|
|
/**
|
|
|
|
* This function add several options to an existing input_item_t.
|
|
|
|
*/
|
|
|
|
VLC_API int input_item_AddOptions(input_item_t *, int i_options,
|
|
|
|
const char *const *ppsz_options,
|
|
|
|
unsigned i_flags );
|
2015-03-30 20:13:17 +02:00
|
|
|
VLC_API int input_item_AddOpaque(input_item_t *, const char *, void *);
|
2009-01-17 17:59:40 +01:00
|
|
|
|
2015-03-30 20:08:45 +02:00
|
|
|
void input_item_ApplyOptions(vlc_object_t *, input_item_t *);
|
|
|
|
|
2016-03-24 09:48:10 +01:00
|
|
|
VLC_API bool input_item_slave_GetType(const char *, enum slave_type *);
|
|
|
|
|
|
|
|
VLC_API input_item_slave_t *input_item_slave_New(const char *, enum slave_type,
|
|
|
|
enum slave_priority);
|
|
|
|
#define input_item_slave_Delete(p_slave) free(p_slave)
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This function allows adding a slave to an existing input item.
|
|
|
|
* The slave is owned by the input item after this call.
|
|
|
|
*/
|
|
|
|
VLC_API int input_item_AddSlave(input_item_t *, input_item_slave_t *);
|
|
|
|
|
2009-01-17 17:59:40 +01:00
|
|
|
/* */
|
2011-05-07 13:06:21 +02:00
|
|
|
VLC_API bool input_item_HasErrorWhenReading( input_item_t * );
|
|
|
|
VLC_API void input_item_SetMeta( input_item_t *, vlc_meta_type_t meta_type, const char *psz_val );
|
|
|
|
VLC_API bool input_item_MetaMatch( input_item_t *p_i, vlc_meta_type_t meta_type, const char *psz );
|
2011-05-07 22:02:08 +02:00
|
|
|
VLC_API char * input_item_GetMeta( input_item_t *p_i, vlc_meta_type_t meta_type ) VLC_USED;
|
|
|
|
VLC_API char * input_item_GetName( input_item_t * p_i ) VLC_USED;
|
|
|
|
VLC_API char * input_item_GetTitleFbName( input_item_t * p_i ) VLC_USED;
|
|
|
|
VLC_API char * input_item_GetURI( input_item_t * p_i ) VLC_USED;
|
2014-12-17 14:26:50 +01:00
|
|
|
VLC_API char * input_item_GetNowPlayingFb( input_item_t *p_item ) VLC_USED;
|
2011-05-07 13:06:21 +02:00
|
|
|
VLC_API void input_item_SetURI( input_item_t * p_i, const char *psz_uri );
|
|
|
|
VLC_API mtime_t input_item_GetDuration( input_item_t * p_i );
|
|
|
|
VLC_API void input_item_SetDuration( input_item_t * p_i, mtime_t i_duration );
|
|
|
|
VLC_API bool input_item_IsPreparsed( input_item_t *p_i );
|
|
|
|
VLC_API bool input_item_IsArtFetched( input_item_t *p_i );
|
2009-01-17 17:59:40 +01:00
|
|
|
|
2010-02-02 17:49:20 +01:00
|
|
|
#define INPUT_META( name ) \
|
|
|
|
static inline \
|
|
|
|
void input_item_Set ## name (input_item_t *p_input, const char *val) \
|
|
|
|
{ \
|
|
|
|
input_item_SetMeta (p_input, vlc_meta_ ## name, val); \
|
|
|
|
} \
|
|
|
|
static inline \
|
|
|
|
char *input_item_Get ## name (input_item_t *p_input) \
|
|
|
|
{ \
|
|
|
|
return input_item_GetMeta (p_input, vlc_meta_ ## name); \
|
|
|
|
}
|
|
|
|
|
|
|
|
INPUT_META(Title)
|
|
|
|
INPUT_META(Artist)
|
2016-01-28 13:09:43 +01:00
|
|
|
INPUT_META(AlbumArtist)
|
2010-02-02 17:49:20 +01:00
|
|
|
INPUT_META(Genre)
|
|
|
|
INPUT_META(Copyright)
|
|
|
|
INPUT_META(Album)
|
|
|
|
INPUT_META(TrackNumber)
|
|
|
|
INPUT_META(Description)
|
|
|
|
INPUT_META(Rating)
|
|
|
|
INPUT_META(Date)
|
|
|
|
INPUT_META(Setting)
|
|
|
|
INPUT_META(URL)
|
|
|
|
INPUT_META(Language)
|
|
|
|
INPUT_META(NowPlaying)
|
2014-12-17 14:26:50 +01:00
|
|
|
INPUT_META(ESNowPlaying)
|
2010-02-02 17:49:20 +01:00
|
|
|
INPUT_META(Publisher)
|
|
|
|
INPUT_META(EncodedBy)
|
|
|
|
INPUT_META(ArtworkURL)
|
|
|
|
INPUT_META(TrackID)
|
2012-06-11 23:03:48 +02:00
|
|
|
INPUT_META(TrackTotal)
|
2014-02-06 18:10:56 +01:00
|
|
|
INPUT_META(Director)
|
|
|
|
INPUT_META(Season)
|
|
|
|
INPUT_META(Episode)
|
|
|
|
INPUT_META(ShowName)
|
|
|
|
INPUT_META(Actors)
|
2016-02-28 21:06:51 +01:00
|
|
|
INPUT_META(DiscNumber)
|
2010-02-02 17:49:20 +01:00
|
|
|
|
|
|
|
#define input_item_SetTrackNum input_item_SetTrackNumber
|
|
|
|
#define input_item_GetTrackNum input_item_GetTrackNumber
|
|
|
|
#define input_item_SetArtURL input_item_SetArtworkURL
|
|
|
|
#define input_item_GetArtURL input_item_GetArtworkURL
|
2009-01-17 17:59:40 +01:00
|
|
|
|
2011-05-07 22:02:08 +02:00
|
|
|
VLC_API char * input_item_GetInfo( input_item_t *p_i, const char *psz_cat,const char *psz_name ) VLC_USED;
|
|
|
|
VLC_API int input_item_AddInfo( input_item_t *p_i, const char *psz_cat, const char *psz_name, const char *psz_format, ... ) VLC_FORMAT( 4, 5 );
|
2011-05-07 13:06:21 +02:00
|
|
|
VLC_API int input_item_DelInfo( input_item_t *p_i, const char *psz_cat, const char *psz_name );
|
|
|
|
VLC_API void input_item_ReplaceInfos( input_item_t *, info_category_t * );
|
|
|
|
VLC_API void input_item_MergeInfos( input_item_t *, info_category_t * );
|
2009-01-17 17:59:40 +01:00
|
|
|
|
2009-01-17 19:19:09 +01:00
|
|
|
/**
|
2010-07-28 21:03:32 +02:00
|
|
|
* This function creates a new input_item_t with the provided information.
|
2009-01-17 19:19:09 +01:00
|
|
|
*
|
2016-04-14 11:16:24 +02:00
|
|
|
* XXX You may also use input_item_New, as they need less arguments.
|
2009-01-17 19:19:09 +01:00
|
|
|
*/
|
2016-04-14 11:16:24 +02:00
|
|
|
VLC_API input_item_t * input_item_NewExt( const char *psz_uri,
|
|
|
|
const char *psz_name,
|
|
|
|
mtime_t i_duration, int i_type,
|
|
|
|
enum input_item_net_type i_net ) VLC_USED;
|
2009-01-17 19:19:09 +01:00
|
|
|
|
2016-04-14 11:16:24 +02:00
|
|
|
#define input_item_New( psz_uri, psz_name ) \
|
|
|
|
input_item_NewExt( psz_uri, psz_name, -1, ITEM_TYPE_UNKNOWN, ITEM_NET_UNKNOWN )
|
2015-03-24 17:22:15 +01:00
|
|
|
|
2016-04-14 11:16:24 +02:00
|
|
|
#define input_item_NewCard( psz_uri, psz_name ) \
|
|
|
|
input_item_NewExt( psz_uri, psz_name, -1, ITEM_TYPE_CARD, ITEM_LOCAL )
|
2009-01-17 18:37:14 +01:00
|
|
|
|
2016-04-14 11:16:24 +02:00
|
|
|
#define input_item_NewDisc( psz_uri, psz_name, i_duration ) \
|
|
|
|
input_item_NewExt( psz_uri, psz_name, i_duration, ITEM_TYPE_DISC, ITEM_LOCAL )
|
|
|
|
|
|
|
|
#define input_item_NewStream( psz_uri, psz_name, i_duration ) \
|
|
|
|
input_item_NewExt( psz_uri, psz_name, i_duration, ITEM_TYPE_STREAM, ITEM_NET )
|
|
|
|
|
|
|
|
#define input_item_NewDirectory( psz_uri, psz_name, i_net ) \
|
|
|
|
input_item_NewExt( psz_uri, psz_name, -1, ITEM_TYPE_DIRECTORY, i_net )
|
|
|
|
|
|
|
|
#define input_item_NewFile( psz_uri, psz_name, i_duration, i_net ) \
|
|
|
|
input_item_NewExt( psz_uri, psz_name, i_duration, ITEM_TYPE_FILE, i_net )
|
2009-01-17 17:59:40 +01:00
|
|
|
|
2010-03-11 19:20:20 +01:00
|
|
|
/**
|
|
|
|
* This function creates a new input_item_t as a copy of another.
|
|
|
|
*/
|
2011-07-10 17:23:41 +02:00
|
|
|
VLC_API input_item_t * input_item_Copy(input_item_t * ) VLC_USED;
|
2010-03-11 19:20:20 +01:00
|
|
|
|
2012-05-13 19:03:28 +02:00
|
|
|
/** Holds an input item, i.e. creates a new reference. */
|
|
|
|
VLC_API input_item_t *input_item_Hold(input_item_t *);
|
|
|
|
|
|
|
|
/** Releases an input item, i.e. decrements its reference counter. */
|
|
|
|
VLC_API void input_item_Release(input_item_t *);
|
|
|
|
|
|
|
|
/* Historical hack... */
|
|
|
|
#define vlc_gc_incref(i) input_item_Hold(i)
|
|
|
|
#define vlc_gc_decref(i) input_item_Release(i)
|
2010-03-11 19:20:20 +01:00
|
|
|
|
2014-05-14 01:04:33 +02:00
|
|
|
typedef enum input_item_meta_request_option_t
|
|
|
|
{
|
2014-05-21 19:22:41 +02:00
|
|
|
META_REQUEST_OPTION_NONE = 0x00,
|
|
|
|
META_REQUEST_OPTION_SCOPE_LOCAL = 0x01,
|
|
|
|
META_REQUEST_OPTION_SCOPE_NETWORK = 0x02,
|
2016-02-03 17:47:16 +01:00
|
|
|
META_REQUEST_OPTION_SCOPE_ANY = 0x03,
|
|
|
|
META_REQUEST_OPTION_DO_INTERACT = 0x04
|
2014-05-14 01:04:33 +02:00
|
|
|
} input_item_meta_request_option_t;
|
|
|
|
|
2016-04-14 17:00:03 +02:00
|
|
|
/* status of the vlc_InputItemPreparseEnded event */
|
|
|
|
enum input_item_preparse_status
|
|
|
|
{
|
|
|
|
ITEM_PREPARSE_SKIPPED,
|
|
|
|
ITEM_PREPARSE_FAILED,
|
|
|
|
ITEM_PREPARSE_DONE
|
|
|
|
};
|
|
|
|
|
2014-05-14 01:04:33 +02:00
|
|
|
VLC_API int libvlc_MetaRequest(libvlc_int_t *, input_item_t *,
|
|
|
|
input_item_meta_request_option_t );
|
|
|
|
VLC_API int libvlc_ArtRequest(libvlc_int_t *, input_item_t *,
|
|
|
|
input_item_meta_request_option_t );
|
2013-12-31 19:25:21 +01:00
|
|
|
|
2009-02-28 18:38:25 +01:00
|
|
|
/******************
|
|
|
|
* Input stats
|
|
|
|
******************/
|
|
|
|
struct input_stats_t
|
|
|
|
{
|
|
|
|
vlc_mutex_t lock;
|
|
|
|
|
|
|
|
/* Input */
|
2010-07-14 18:07:36 +02:00
|
|
|
int64_t i_read_packets;
|
|
|
|
int64_t i_read_bytes;
|
2009-02-28 18:38:25 +01:00
|
|
|
float f_input_bitrate;
|
|
|
|
float f_average_input_bitrate;
|
|
|
|
|
|
|
|
/* Demux */
|
2010-07-14 18:07:36 +02:00
|
|
|
int64_t i_demux_read_packets;
|
|
|
|
int64_t i_demux_read_bytes;
|
2009-02-28 18:38:25 +01:00
|
|
|
float f_demux_bitrate;
|
|
|
|
float f_average_demux_bitrate;
|
2010-07-14 18:07:36 +02:00
|
|
|
int64_t i_demux_corrupted;
|
|
|
|
int64_t i_demux_discontinuity;
|
2009-02-28 18:38:25 +01:00
|
|
|
|
|
|
|
/* Decoders */
|
2010-07-14 18:07:36 +02:00
|
|
|
int64_t i_decoded_audio;
|
|
|
|
int64_t i_decoded_video;
|
2009-02-28 18:38:25 +01:00
|
|
|
|
|
|
|
/* Vout */
|
2010-07-14 18:07:36 +02:00
|
|
|
int64_t i_displayed_pictures;
|
|
|
|
int64_t i_lost_pictures;
|
2009-02-28 18:38:25 +01:00
|
|
|
|
|
|
|
/* Sout */
|
2010-07-14 18:07:36 +02:00
|
|
|
int64_t i_sent_packets;
|
|
|
|
int64_t i_sent_bytes;
|
2009-02-28 18:38:25 +01:00
|
|
|
float f_send_bitrate;
|
|
|
|
|
|
|
|
/* Aout */
|
2010-07-14 18:07:36 +02:00
|
|
|
int64_t i_played_abuffers;
|
|
|
|
int64_t i_lost_abuffers;
|
2009-02-28 18:38:25 +01:00
|
|
|
};
|
|
|
|
|
2009-01-17 17:59:40 +01:00
|
|
|
#endif
|