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 (9)
......@@ -111,12 +111,10 @@ typedef struct libvlc_media_track_t
char *psz_description;
/** String identifier of track, can be used to save the track preference
* from an other LibVLC run, only valid when the track is fetch from a
* media_player */
* from an other LibVLC run */
const char *psz_id;
/** A string identifier is stable when it is certified to be the same
* across different playback instances for the same track, only valid when
* the track is fetch from a media_player */
* across different playback instances for the same track. */
bool id_stable;
/** Name of the track, only valid when the track is fetch from a
* media_player */
......
......@@ -33,7 +33,9 @@
#include <vlc_epg.h>
#include <vlc_events.h>
#include <vlc_list.h>
#include <vlc_vector.h>
#include <vlc_threads.h>
#include <vlc_es.h>
#include <string.h>
......@@ -81,6 +83,14 @@ enum input_item_type_e
ITEM_TYPE_NUMBER
};
struct input_item_es
{
es_format_t es;
char *id;
bool id_stable;
};
typedef struct VLC_VECTOR(struct input_item_es) input_item_es_vector;
/**
* Describes an input and is used to spawn input_thread_t objects.
*/
......@@ -100,8 +110,7 @@ struct input_item_t
struct vlc_list categories; /**< List of categories */
int i_es; /**< Number of es format descriptions */
es_format_t **es; /**< Es formats */
input_item_es_vector es_vec; /**< ES formats */
input_stats_t *p_stats; /**< Statistics */
......
......@@ -319,6 +319,26 @@ vlc_vector_growsize_(size_t value)
) \
)
/**
* Push a hole at the end of the vector.
*
* The amortized complexity is O(1). The items in the hole are left
* uninitialized and can be accessed in the range [size-count; size-1].
*
* \param pv a pointer to the vector
* \param count the number of items in the hole
* \retval true if no allocation failed
* \retval false on allocation failure (the vector is left untouched)
*/
#define vlc_vector_push_hole(pv, count) \
( \
vlc_vector_reserve(pv, (pv)->size + vlc_vector_enforce_size_t_(count)) && \
( \
(pv)->size += vlc_vector_enforce_size_t_(count), \
true \
) \
)
/**
* Append `count` items at the end of the vector.
*
......
......@@ -950,8 +950,7 @@ libvlc_media_get_tracklist( libvlc_media_t *p_md, libvlc_track_type_t type )
vlc_mutex_lock( &p_input_item->lock );
libvlc_media_tracklist_t *list =
libvlc_media_tracklist_from_es_array( p_input_item->es,
p_input_item->i_es, type );
libvlc_media_tracklist_from_item( p_input_item, type );
vlc_mutex_unlock( &p_input_item->lock );
return list;
......
......@@ -83,6 +83,7 @@ typedef struct libvlc_media_trackpriv_t
libvlc_subtitle_track_t subtitle;
};
vlc_es_id_t *es_id;
char *item_str_id;
vlc_atomic_rc_t rc;
} libvlc_media_trackpriv_t;
......@@ -100,9 +101,7 @@ libvlc_media_track_t *
libvlc_media_track_create_from_player_track( const struct vlc_player_track *track );
libvlc_media_tracklist_t *
libvlc_media_tracklist_from_es_array( es_format_t **es_array,
size_t es_count,
libvlc_track_type_t type );
libvlc_media_tracklist_from_item( input_item_t *item, libvlc_track_type_t type );
libvlc_media_tracklist_t *
libvlc_media_tracklist_from_player( vlc_player_t *player,
......
......@@ -119,6 +119,7 @@ libvlc_media_trackpriv_new( void )
return NULL;
trackpriv->es_id = NULL;
trackpriv->item_str_id = NULL;
vlc_atomic_rc_init( &trackpriv->rc );
return trackpriv;
}
......@@ -163,6 +164,7 @@ libvlc_media_track_release( libvlc_media_track_t *track )
libvlc_media_track_clean( track );
if( trackpriv->es_id )
vlc_es_id_Release( trackpriv->es_id );
free( trackpriv->item_str_id );
free( trackpriv );
}
}
......@@ -185,16 +187,15 @@ libvlc_media_tracklist_alloc( size_t count )
}
libvlc_media_tracklist_t *
libvlc_media_tracklist_from_es_array( es_format_t **es_array,
size_t es_count,
libvlc_track_type_t type )
libvlc_media_tracklist_from_item( input_item_t *item, libvlc_track_type_t type )
{
size_t count = 0;
const enum es_format_category_e cat = libvlc_track_type_to_escat( type );
for( size_t i = 0; i < es_count; ++i )
for( size_t i = 0; i < item->es_vec.size; ++i )
{
if( es_array[i]->i_cat == cat )
const es_format_t *es_fmt = &item->es_vec.data[i].es;
if( es_fmt->i_cat == cat )
count++;
}
......@@ -203,9 +204,11 @@ libvlc_media_tracklist_from_es_array( es_format_t **es_array,
if( count == 0 || list == NULL )
return list;
for( size_t i = 0; i < es_count; ++i )
for( size_t i = 0; i < item->es_vec.size; ++i )
{
if( es_array[i]->i_cat == cat )
const struct input_item_es *item_es = &item->es_vec.data[i];
const es_format_t *es_fmt = &item_es->es;
if( es_fmt->i_cat == cat )
{
libvlc_media_trackpriv_t *trackpriv = libvlc_media_trackpriv_new();
if( trackpriv == NULL )
......@@ -214,7 +217,16 @@ libvlc_media_tracklist_from_es_array( es_format_t **es_array,
return NULL;
}
list->tracks[list->count++] = trackpriv;
libvlc_media_trackpriv_from_es( trackpriv, es_array[i] );
libvlc_media_trackpriv_from_es( trackpriv, es_fmt );
trackpriv->item_str_id = strdup( item_es->id );
if( trackpriv->item_str_id == NULL )
{
libvlc_media_tracklist_delete( list );
return NULL;
}
trackpriv->t.psz_id = trackpriv->item_str_id;
trackpriv->t.id_stable = item_es->id_stable;
}
}
......
......@@ -688,9 +688,9 @@ static int DrawStats(intf_thread_t *intf)
vlc_mutex_lock(&item->lock);
p_stats = item->p_stats;
for (int i = 0; i < item->i_es ; i++) {
i_audio += (item->es[i]->i_cat == AUDIO_ES);
i_video += (item->es[i]->i_cat == VIDEO_ES);
for (int i = 0; i < item->es_vec.size ; i++) {
i_audio += (item->es_vec.data[i].es.i_cat == AUDIO_ES);
i_video += (item->es_vec.data[i].es.i_cat == VIDEO_ES);
}
/* Input */
......
......@@ -136,10 +136,10 @@ void MetadataExtractor::populateItem( medialibrary::parser::IItem& item, input_i
item.setDuration( MS_FROM_VLC_TICK(inputItem->i_duration) );
for ( auto i = 0; i < inputItem->i_es; ++i )
for ( auto i = 0; i < inputItem->es_vec.size; ++i )
{
medialibrary::parser::IItem::Track t;
const es_format_t *p_es = inputItem->es[i];
const es_format_t *p_es = &inputItem->es_vec.data[i].es;
switch ( p_es->i_cat )
{
......
......@@ -4251,7 +4251,8 @@ static int EsOutEsUpdateFmt(es_out_t *out, es_out_id_t *es,
if (ret == VLC_SUCCESS)
{
EsOutUpdateEsLanguageTitle(es, &es->fmt_out);
input_item_UpdateTracksInfo(input_GetItem(p_input), &es->fmt_out);
input_item_UpdateTracksInfo(input_GetItem(p_input), &es->fmt_out,
es->id.str_id, es->id.stable);
}
return ret;
......@@ -4281,7 +4282,7 @@ static void EsOutUpdateInfo( es_out_t *out, es_out_id_t *es, const vlc_meta_t *p
const es_format_t *p_fmt_es = &es->fmt;
const es_format_t *fmt = es->fmt_out.i_cat != UNKNOWN_ES ? &es->fmt_out : &es->fmt;
input_item_UpdateTracksInfo( p_item , fmt );
input_item_UpdateTracksInfo( p_item , fmt, es->id.str_id, es->id.stable );
/* Create category */
char* psz_cat = EsInfoCategoryName( es );
......
......@@ -500,12 +500,13 @@ void input_item_Release( input_item_t *p_item )
TAB_CLEAN( p_item->i_options, p_item->ppsz_options );
free( p_item->optflagv );
for( int i = 0; i < p_item->i_es; i++ )
for( size_t i = 0; i < p_item->es_vec.size; ++i )
{
es_format_Clean( p_item->es[i] );
free( p_item->es[i] );
struct input_item_es *item_es = &p_item->es_vec.data[i];
es_format_Clean( &item_es->es );
free( item_es->id );
}
TAB_CLEAN( p_item->i_es, p_item->es );
vlc_vector_destroy( &p_item->es_vec );
for( int i = 0; i < p_item->i_epg; i++ )
vlc_epg_Delete( p_item->pp_epg[i] );
......@@ -1100,7 +1101,7 @@ input_item_NewExt( const char *psz_uri, const char *psz_name,
p_input->i_duration = duration;
vlc_list_init( &p_input->categories );
TAB_INIT( p_input->i_es, p_input->es );
vlc_vector_init( &p_input->es_vec );
p_input->p_stats = NULL;
TAB_INIT( p_input->i_epg, p_input->pp_epg );
TAB_INIT( p_input->i_slaves, p_input->pp_slaves );
......@@ -1320,32 +1321,43 @@ void input_item_node_RemoveNode( input_item_node_t *parent,
}
/* Called by es_out when a new Elementary Stream is added or updated. */
void input_item_UpdateTracksInfo(input_item_t *item, const es_format_t *fmt)
void input_item_UpdateTracksInfo(input_item_t *item, const es_format_t *fmt,
const char *es_id, bool es_id_stable)
{
int i;
es_format_t *fmt_copy = malloc(sizeof *fmt_copy);
if (!fmt_copy)
return;
es_format_Copy(fmt_copy, fmt);
assert( es_id != NULL );
vlc_mutex_lock( &item->lock );
for( i = 0; i < item->i_es; i++ )
for( size_t i = 0; i < item->es_vec.size; ++i )
{
if (item->es[i]->i_id != fmt->i_id)
struct input_item_es *item_es = &item->es_vec.data[i];
if (strcmp(item_es->id, es_id) != 0)
continue;
/* We've found the right ES, replace it */
es_format_Clean(item->es[i]);
free(item->es[i]);
item->es[i] = fmt_copy;
es_format_Clean(&item_es->es);
es_format_Copy(&item_es->es, fmt);
vlc_mutex_unlock( &item->lock );
return;
}
char *es_id_dup = strdup( es_id );
if( es_id_dup == NULL )
{
vlc_mutex_unlock( &item->lock );
return;
}
/* ES not found, insert it */
TAB_APPEND(item->i_es, item->es, fmt_copy);
if (vlc_vector_push_hole( &item->es_vec, 1 ))
{
struct input_item_es *item_es = &item->es_vec.data[item->es_vec.size - 1];
item_es->id = es_id_dup;
item_es->id_stable = es_id_stable;
es_format_Copy( &item_es->es, fmt );
}
else
free( es_id_dup );
vlc_mutex_unlock( &item->lock );
}
......
......@@ -27,7 +27,8 @@
#include <vlc_atomic.h>
void input_item_SetErrorWhenReading( input_item_t *p_i, bool b_error );
void input_item_UpdateTracksInfo( input_item_t *item, const es_format_t *fmt );
void input_item_UpdateTracksInfo( input_item_t *item, const es_format_t *fmt,
const char *es_id, bool stable );
bool input_item_ShouldPreparseSubItems( input_item_t *p_i );
typedef struct input_item_owner
......
......@@ -87,9 +87,15 @@ static void test_vector_push_array(void)
int items[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
ok = vlc_vector_push_all(&vec, items, 8);
assert(ok);
int items_hole[] = { 7, 6, 5, 4, 3, 2, 1, 0 };
ok = vlc_vector_push_hole(&vec, 8);
assert(ok);
assert(vec.size == 13);
for (size_t i = 0; i < 8; ++i)
vec.data[vec.size-8+i] = items_hole[i];
assert(vec.size == 21);
assert(vec.data[0] == 3);
assert(vec.data[1] == 14);
assert(vec.data[2] == 15);
......@@ -103,6 +109,14 @@ static void test_vector_push_array(void)
assert(vec.data[10] == 6);
assert(vec.data[11] == 7);
assert(vec.data[12] == 8);
assert(vec.data[13] == 7);
assert(vec.data[14] == 6);
assert(vec.data[15] == 5);
assert(vec.data[16] == 4);
assert(vec.data[17] == 3);
assert(vec.data[18] == 2);
assert(vec.data[19] == 1);
assert(vec.data[20] == 0);
vlc_vector_destroy(&vec);
}
......
......@@ -103,10 +103,11 @@ static void print_media(libvlc_media_t *media)
}
}
static void test_media_preparsed(libvlc_instance_t *vlc, const char *path,
const char *location,
libvlc_media_parse_flag_t parse_flags,
libvlc_media_parsed_status_t i_expected_status)
static libvlc_media_t *
test_media_preparsed_ext(libvlc_instance_t *vlc, const char *path,
const char *location,
libvlc_media_parse_flag_t parse_flags,
libvlc_media_parsed_status_t i_expected_status)
{
test_log ("test_media_preparsed: %s, expected: %d\n", path ? path : location,
i_expected_status);
......@@ -137,6 +138,74 @@ static void test_media_preparsed(libvlc_instance_t *vlc, const char *path,
if (i_expected_status == libvlc_media_parsed_status_done)
print_media(media);
return media;
}
static void test_media_preparsed(libvlc_instance_t *vlc, const char *path,
const char *location,
libvlc_media_parse_flag_t parse_flags,
libvlc_media_parsed_status_t i_expected_status)
{
libvlc_media_t *media = test_media_preparsed_ext(vlc, path, location,
parse_flags,
i_expected_status);
libvlc_media_release (media);
}
static void test_media_tracks(libvlc_instance_t *vlc)
{
const char *url =
"mock://video_track_count=4;audio_track_count=42;"
"video_width=100;video_height=50;"
"audio_channels=2;audio_rate=48000;";
libvlc_media_t *media =
test_media_preparsed_ext(vlc, NULL, url,
libvlc_media_parse_local|libvlc_media_parse_forced,
libvlc_media_parsed_status_done);
libvlc_media_tracklist_t *tracklist;
tracklist = libvlc_media_get_tracklist(media, libvlc_track_video);
assert(tracklist != NULL);
assert(libvlc_media_tracklist_count(tracklist) == 4);
for (size_t i = 0; i < libvlc_media_tracklist_count(tracklist); ++i)
{
libvlc_media_track_t *track = libvlc_media_tracklist_at(tracklist, i);
assert(track->i_type == libvlc_track_video);
assert(track->video != NULL);
assert(track->video->i_width == 100);
assert(track->video->i_height == 50);
char buf[] = "video/4";
sprintf(buf, "video/%zu", i);
assert(strcmp(track->psz_id, buf) == 0);
assert(track->id_stable);
}
libvlc_media_tracklist_delete(tracklist);
tracklist = libvlc_media_get_tracklist(media, libvlc_track_audio);
assert(tracklist != NULL);
assert(libvlc_media_tracklist_count(tracklist) == 42);
for (size_t i = 0; i < libvlc_media_tracklist_count(tracklist); ++i)
{
libvlc_media_track_t *track = libvlc_media_tracklist_at(tracklist, i);
assert(track->i_type == libvlc_track_audio);
assert(track->audio != NULL);
assert(track->audio->i_channels == 2);
assert(track->audio->i_rate == 48000);
char buf[] = "audio/42";
sprintf(buf, "audio/%zu", i);
assert(strcmp(track->psz_id, buf) == 0);
assert(track->id_stable);
}
libvlc_media_tracklist_delete(tracklist);
tracklist = libvlc_media_get_tracklist(media, libvlc_track_text);
assert(tracklist != NULL);
assert(libvlc_media_tracklist_count(tracklist) == 0);
libvlc_media_tracklist_delete(tracklist);
libvlc_media_release (media);
}
......@@ -394,6 +463,7 @@ int main(int i_argc, char *ppsz_argv[])
libvlc_media_parse_local,
libvlc_media_parsed_status_skipped);
test_media_subitems (vlc);
test_media_tracks (vlc);
/* Testing libvlc_MetadataRequest timeout and libvlc_MetadataCancel. For
* that, we need to create a local input_item_t based on a pipe. There is
......