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 (3)
......@@ -283,7 +283,7 @@ void FakeESOut::createOrRecycleRealEsID( AbstractFakeESOutID *es_id_ )
Otherwise the es will select any other compatible track
and will end this in a activate/select loop when reactivating a track */
if( !b_select )
es_out_Control( real_es_out, ES_OUT_GET_ES_STATE, cand->realESID(), &b_select );
b_select = hasSelectedEs( cand );
}
else /* replace format instead of new ES */
{
......@@ -435,19 +435,25 @@ void FakeESOut::gc()
bool FakeESOut::hasSelectedEs() const
{
bool b_selected = false;
std::list<FakeESOutID *> const * lists[2] = {&declared, &fakeesidlist};
std::list<FakeESOutID *>::const_iterator it;
for(int i=0; i<2; i++)
for( it=lists[i]->begin(); it!=lists[i]->end(); ++it )
if( hasSelectedEs( *it ) )
return true;
return false;
}
bool FakeESOut::hasSelectedEs(const AbstractFakeESOutID *id) const
{
if( id->realESID() )
{
for( it=lists[i]->begin(); it!=lists[i]->end() && !b_selected; ++it )
{
FakeESOutID *esID = *it;
if( esID->realESID() )
es_out_Control( real_es_out, ES_OUT_GET_ES_STATE, esID->realESID(), &b_selected );
}
bool b_selected;
return es_out_Control( real_es_out, ES_OUT_GET_ES_STATE,
id->realESID(), &b_selected ) == VLC_SUCCESS
&& b_selected;
}
return b_selected;
return false;
}
bool FakeESOut::decodersDrained()
......
......@@ -89,6 +89,7 @@ namespace adaptive
void resetTimestamps();
size_t esCount() const;
bool hasSelectedEs() const;
bool hasSelectedEs(const AbstractFakeESOutID *) const;
bool decodersDrained();
bool restarting() const;
void setExtraInfoProvider( ExtraFMTInfoInterface * );
......
......@@ -70,7 +70,7 @@ void FakeESOutID::release()
fakeesout->recycle( this );
}
es_out_id_t * FakeESOutID::realESID()
es_out_id_t * FakeESOutID::realESID() const
{
return p_real_es_id;
}
......
......@@ -38,7 +38,7 @@ namespace adaptive
{
public:
virtual ~AbstractFakeESOutID() = default;
virtual es_out_id_t * realESID() = 0;
virtual es_out_id_t * realESID() const = 0;
virtual void create() = 0;
virtual void release() = 0;
virtual void sendData(block_t *) = 0;
......@@ -51,7 +51,7 @@ namespace adaptive
FakeESOutID( FakeESOut *, const es_format_t * );
virtual ~FakeESOutID();
void setRealESID( es_out_id_t * );
virtual es_out_id_t * realESID() override;
virtual es_out_id_t * realESID() const override;
const es_format_t *getFmt() const;
virtual void create() override;
virtual void release() override;
......
......@@ -75,7 +75,7 @@ class TestEsOutID : public AbstractFakeESOutID
public:
TestEsOutID(TestEsOut *out) { this->out = out; }
virtual ~TestEsOutID() {}
virtual es_out_id_t * realESID() override { return nullptr; }
virtual es_out_id_t * realESID() const override { return nullptr; }
virtual void create() override {}
virtual void release() override {}
virtual void sendData(block_t *b) override
......
......@@ -33,48 +33,104 @@
#include <limits>
#include <list>
#include <algorithm>
#include <cassert>
using namespace adaptive;
using OutputVal = std::pair<const AbstractFakeESOutID *, block_t *>;
const Times drainTimes(SegmentTimes(),std::numeric_limits<vlc_tick_t>::max());
#define DT(t) Times(SegmentTimes(), (t))
struct context
class DummyEsOut
{
vlc_tick_t dts;
vlc_tick_t pts;
vlc_tick_t pcr;
public:
DummyEsOut();
~DummyEsOut();
void reset();
static es_out_id_t *callback_add( es_out_t *, input_source_t *, const es_format_t * );
static int callback_send( es_out_t *, es_out_id_t *, block_t * );
static void callback_del( es_out_t *, es_out_id_t * );
static int callback_control( es_out_t *, input_source_t *, int, va_list );
static void callback_destroy( es_out_t * );
vlc_tick_t dts;
vlc_tick_t pts;
vlc_tick_t pcr;
class ES
{
public:
ES(const es_format_t *);
~ES();
es_format_t fmt;
bool b_selected;
};
std::list<ES *> eslist;
};
DummyEsOut::DummyEsOut()
{
reset();
}
DummyEsOut::~DummyEsOut()
{
}
void DummyEsOut::reset()
{
dts = VLC_TICK_INVALID;
pts = VLC_TICK_INVALID;
pcr = VLC_TICK_INVALID;
while(!eslist.empty())
{
delete eslist.front();
eslist.pop_front();
}
}
struct dropesout
{
struct context *ctx;
DummyEsOut *dummyesout;
es_out_t esout;
};
static es_out_id_t *dummy_callback_add(es_out_t *, input_source_t *, const es_format_t *)
es_out_id_t *DummyEsOut::callback_add(es_out_t *out, input_source_t *, const es_format_t *fmt)
{
return (es_out_id_t *) 0x01;
DummyEsOut *dummyesout = container_of(out, dropesout, esout)->dummyesout;
ES *es = new ES(fmt);
dummyesout->eslist.push_back(es);
return (es_out_id_t *) es;
}
static int dummy_callback_send(es_out_t *out, es_out_id_t *, block_t *b)
int DummyEsOut::callback_send(es_out_t *out, es_out_id_t *, block_t *b)
{
struct context *ctx = container_of(out, dropesout, esout)->ctx;
ctx->dts = b->i_dts;
ctx->pts = b->i_pts;
DummyEsOut *dummyesout = container_of(out, dropesout, esout)->dummyesout;
dummyesout->dts = b->i_dts;
dummyesout->pts = b->i_pts;
block_Release(b);
return VLC_SUCCESS;
}
static void dummy_callback_del(es_out_t *, es_out_id_t *)
void DummyEsOut::callback_del(es_out_t *out, es_out_id_t *id)
{
DummyEsOut *dummyesout = container_of(out, dropesout, esout)->dummyesout;
ES *es = (ES *) id;
auto it = std::find(dummyesout->eslist.begin(), dummyesout->eslist.end(), es);
assert(it != dummyesout->eslist.end());
if(it != dummyesout->eslist.end())
dummyesout->eslist.erase(it);
delete es;
}
static int dummy_callback_control(es_out_t *out, input_source_t *, int i_query, va_list args)
int DummyEsOut::callback_control(es_out_t *out, input_source_t *, int i_query, va_list args)
{
struct context *ctx = container_of(out, dropesout, esout)->ctx;
DummyEsOut *dummyesout = container_of(out, dropesout, esout)->dummyesout;
switch( i_query )
{
......@@ -83,9 +139,40 @@ static int dummy_callback_control(es_out_t *out, input_source_t *, int i_query,
{
if( i_query == ES_OUT_SET_GROUP_PCR )
(void) va_arg( args, int );
ctx->pcr = va_arg( args, vlc_tick_t );
dummyesout->pcr = va_arg( args, vlc_tick_t );
break;
}
case ES_OUT_SET_ES:
{
ES *es = (ES *) va_arg( args, es_out_id_t * );
/* emulate reselection */
for( ES *e : dummyesout->eslist )
{
if( e->fmt.i_cat == es->fmt.i_cat )
e->b_selected = (e == es);
}
return VLC_SUCCESS;
}
case ES_OUT_SET_ES_STATE:
{
/* emulate selection override */
ES *es = (ES *) va_arg( args, es_out_id_t * );
bool b = va_arg( args, int );
auto it = std::find(dummyesout->eslist.begin(), dummyesout->eslist.end(), es);
if(it == dummyesout->eslist.end())
return VLC_EGENERIC;
(*it)->b_selected = b;
return VLC_SUCCESS;
}
case ES_OUT_GET_ES_STATE:
{
ES *es = (ES *) va_arg( args, es_out_id_t * );
auto it = std::find(dummyesout->eslist.begin(), dummyesout->eslist.end(), es);
if(it == dummyesout->eslist.end())
return VLC_EGENERIC;
*va_arg( args, bool * ) = (*it)->b_selected;
return VLC_SUCCESS;
}
default:
return VLC_EGENERIC;
}
......@@ -93,21 +180,33 @@ static int dummy_callback_control(es_out_t *out, input_source_t *, int i_query,
return VLC_SUCCESS;
}
static void dummy_callback_destroy(es_out_t *)
void DummyEsOut::callback_destroy(es_out_t *)
{
}
const struct es_out_callbacks dummycbs =
{
.add = dummy_callback_add,
.send = dummy_callback_send,
.del = dummy_callback_del,
.control = dummy_callback_control,
.destroy = dummy_callback_destroy,
.add = DummyEsOut::callback_add,
.send = DummyEsOut::callback_send,
.del = DummyEsOut::callback_del,
.control = DummyEsOut::callback_control,
.destroy = DummyEsOut::callback_destroy,
.priv_control = nullptr,
};
DummyEsOut::ES::ES(const es_format_t *src)
{
b_selected = false;
es_format_Init(&fmt, src->i_cat, src->i_codec);
es_format_Copy(&fmt, src);
}
DummyEsOut::ES::~ES()
{
es_format_Clean(&fmt);
}
static void enqueue(es_out_t *out, es_out_id_t *id, vlc_tick_t dts, vlc_tick_t pts)
{
block_t *b = block_Alloc(1);
......@@ -125,7 +224,147 @@ static void enqueue(es_out_t *out, es_out_id_t *id, vlc_tick_t dts, vlc_tick_t p
#define PCR(t) es_out_SetPCR(out, t)
#define FROM_MPEGTS(x) (INT64_C(x) * 100 / 9)
static int check2(es_out_t *out, struct context *, FakeESOut *fakees)
static int check3(es_out_t *out, DummyEsOut *dummy, FakeESOut *fakees)
{
es_format_t fmt;
/* few ES reusability checks */
try
{
es_format_Init(&fmt, AUDIO_ES, VLC_CODEC_MP4A);
FakeESOutID fakeid0(fakees, &fmt);
fmt.audio.i_rate = 48000;
FakeESOutID fakeid1(fakees, &fmt);
fmt.i_original_fourcc = 0xbeef;
FakeESOutID fakeid2(fakees, &fmt);
es_format_Clean(&fmt);
es_format_Init(&fmt, VIDEO_ES, VLC_CODEC_H264);
FakeESOutID fakeid3(fakees, &fmt);
Expect(fakeid0.isCompatible(&fakeid0) == false); // aac without rate
Expect(fakeid0.isCompatible(&fakeid1) == false); // aac rate/unknown mix
Expect(fakeid1.isCompatible(&fakeid1) == true); // aac with same rate
Expect(fakeid0.isCompatible(&fakeid3) == false); // different codecs
Expect(fakeid1.isCompatible(&fakeid2) == false); // different original fourcc
Expect(fakeid2.isCompatible(&fakeid2) == true); // same original fourcc
Expect(fakeid3.isCompatible(&fakeid3) == false); // same video with extra codecs
es_format_Clean(&fmt);
} catch (...) {
return 1;
}
es_format_Init(&fmt, VIDEO_ES, VLC_CODEC_H264);
es_out_id_t *id = es_out_Add(out, &fmt);
try
{
Expect(id != nullptr);
/* single ES should be allocated */
Expect(dummy->eslist.size() == 0);
fakees->commandsQueue()->Commit();
fakees->commandsQueue()->Process(drainTimes);
Expect(dummy->eslist.size() == 1);
Expect(dummy->eslist.front()->fmt.i_codec == VLC_CODEC_H264);
dummy->eslist.front()->b_selected = true; /* fake selection */
/* subsequent ES should be allocated */
es_format_Clean(&fmt);
es_format_Init(&fmt, AUDIO_ES, VLC_CODEC_MP4A);
id = es_out_Add(out, &fmt);
fakees->commandsQueue()->Commit();
fakees->commandsQueue()->Process(drainTimes);
Expect(dummy->eslist.size() == 2);
Expect(dummy->eslist.front()->fmt.i_codec == VLC_CODEC_H264);
Expect(dummy->eslist.front()->b_selected == true);
Expect(dummy->eslist.back()->fmt.i_codec == VLC_CODEC_MP4A);
/* on restart / new segment, unused ES should be reclaimed */
fakees->recycleAll();
es_format_Clean(&fmt);
es_format_Init(&fmt, VIDEO_ES, VLC_CODEC_MPGV);
id = es_out_Add(out, &fmt);
fakees->commandsQueue()->Commit();
fakees->commandsQueue()->Process(drainTimes);
Expect(dummy->eslist.size() == 3);
fakees->gc();
Expect(dummy->eslist.size() == 1);
Expect(dummy->eslist.front()->fmt.i_codec == VLC_CODEC_MPGV);
Expect(dummy->eslist.front()->b_selected == true);
/* on restart / new segment, ES MUST be reused */
fakees->recycleAll();
Expect(dummy->eslist.size() == 1);
es_format_Clean(&fmt);
es_format_Init(&fmt, VIDEO_ES, VLC_CODEC_MPGV);
/* check ID signaling so we don't blame FakeEsOut */
{
FakeESOutID fakeid(fakees, &fmt);
Expect(fakeid.isCompatible(&fakeid));
}
id = es_out_Add(out, &fmt);
fakees->commandsQueue()->Commit();
fakees->commandsQueue()->Process(drainTimes);
Expect(dummy->eslist.size() == 1);
fakees->gc();
Expect(dummy->eslist.size() == 1);
Expect(dummy->eslist.front()->b_selected == true);
/* on restart / new segment, different codec, ES MUST NOT be reused */
fakees->recycleAll();
Expect(dummy->eslist.size() == 1);
es_format_Clean(&fmt);
es_format_Init(&fmt, VIDEO_ES, VLC_CODEC_H264);
id = es_out_Add(out, &fmt);
es_format_Clean(&fmt);
es_format_Init(&fmt, AUDIO_ES, VLC_CODEC_MP4A);
id = es_out_Add(out, &fmt);
fakees->commandsQueue()->Commit();
fakees->commandsQueue()->Process(drainTimes);
Expect(dummy->eslist.size() == 3);
fakees->gc();
Expect(dummy->eslist.size() == 2);
for( DummyEsOut::ES *e : dummy->eslist ) /* selection state must have been kept */
if( e->fmt.i_cat == VIDEO_ES )
Expect(e->b_selected == true);
/* on restart / new segment, incompatible codec parameters, ES MUST NOT be reused */
fakees->recycleAll();
Expect(dummy->eslist.size() == 2);
es_format_Clean(&fmt);
es_format_Init(&fmt, VIDEO_ES, VLC_CODEC_H264);
id = es_out_Add(out, &fmt);
/* check ID signaling so we don't blame FakeEsOut */
{
FakeESOutID fakeid(fakees, &fmt);
Expect(fakeid.isCompatible(&fakeid) == false);
}
es_format_Clean(&fmt);
es_format_Init(&fmt, AUDIO_ES, VLC_CODEC_MP4A);
id = es_out_Add(out, &fmt);
/* check ID signaling so we don't blame FakeEsOut */
{
FakeESOutID fakeid(fakees, &fmt);
Expect(fakeid.isCompatible(&fakeid) == false);
}
fakees->commandsQueue()->Commit();
fakees->commandsQueue()->Process(drainTimes);
Expect(dummy->eslist.size() == 4);
fakees->gc();
Expect(dummy->eslist.size() == 2);
for( DummyEsOut::ES *e : dummy->eslist ) /* selection state must have been kept */
if( e->fmt.i_cat == VIDEO_ES )
Expect(e->b_selected == true);
} catch (...) {
return 1;
}
es_format_Clean(&fmt);
return 0;
}
static int check2(es_out_t *out, DummyEsOut *, FakeESOut *fakees)
{
es_format_t fmt;
es_format_Init(&fmt, VIDEO_ES, VLC_CODEC_H264);
......@@ -208,7 +447,7 @@ static int check2(es_out_t *out, struct context *, FakeESOut *fakees)
return 0;
}
static int check1(es_out_t *out, struct context *ctx, FakeESOut *fakees)
static int check1(es_out_t *out, DummyEsOut *ctx, FakeESOut *fakees)
{
es_format_t fmt;
es_format_Init(&fmt, VIDEO_ES, VLC_CODEC_H264);
......@@ -216,6 +455,7 @@ static int check1(es_out_t *out, struct context *ctx, FakeESOut *fakees)
/* ensure ES is created */
const Times drainTimes(SegmentTimes(),std::numeric_limits<vlc_tick_t>::max());
fakees->commandsQueue()->Commit();
fakees->commandsQueue()->Process(drainTimes);
......@@ -328,7 +568,7 @@ static int check1(es_out_t *out, struct context *ctx, FakeESOut *fakees)
return 0;
}
static int check0(es_out_t *out, struct context *, FakeESOut *fakees)
static int check0(es_out_t *out, DummyEsOut *, FakeESOut *fakees)
{
es_format_t fmt;
es_format_Init(&fmt, VIDEO_ES, VLC_CODEC_H264);
......@@ -374,21 +614,25 @@ static int check0(es_out_t *out, struct context *, FakeESOut *fakees)
int FakeEsOut_test()
{
struct context ctx = {VLC_TICK_INVALID,VLC_TICK_INVALID,VLC_TICK_INVALID};
struct dropesout dummy = { .ctx = &ctx, .esout = { .cbs = &dummycbs } };
int(* const tests[3])(es_out_t *, struct context *, FakeESOut *)
= { check0, check1, check2 };
for(size_t i=0; i<3; i++)
DummyEsOut dummyEsOut;
struct dropesout dummy = {
.dummyesout = &dummyEsOut,
.esout = { .cbs = &dummycbs }
};
int(* const tests[4])(es_out_t *, DummyEsOut *, FakeESOut *)
= { check0, check1, check2, check3 };
for(size_t i=0; i<4; i++)
{
CommandsFactory *factory = new CommandsFactory();
CommandsQueue *queue = new CommandsQueue();
FakeESOut *fakees = new FakeESOut(&dummy.esout, queue, factory);
es_out_t *out = *fakees;
int ret = tests[i](out, &ctx, fakees);
int ret = tests[i](out, &dummyEsOut, fakees);
delete fakees;
if (ret)
return ret;
dummyEsOut.reset();
}
return 0;
......