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)
......@@ -77,6 +77,14 @@ typedef struct VLC_VECTOR(struct spu_channel) spu_channel_vector;
typedef struct VLC_VECTOR(subpicture_t *) spu_prerender_vector;
#define SPU_CHROMALIST_COUNT 10
struct subtitle_position_cache
{
const subpicture_region_t *region;
int x, y;
bool is_active;
};
typedef struct VLC_VECTOR(struct subtitle_position_cache) subtitles_positions_vector;
struct spu_private_t {
vlc_mutex_t lock; /* lock to protect all following fields */
input_thread_t *input;
......@@ -98,12 +106,14 @@ struct spu_private_t {
int margin; /**< force position of a subpicture */
/**
* Move the secondary subtites vertically.
* Move the secondary subtitles vertically.
* Note: Primary sub margin is applied to all sub tracks and is absolute.
* Secondary sub margin is not absolute to enable overlap detection.
*/
int secondary_margin;
int secondary_alignment; /**< Force alignment for secondary subs */
subtitles_positions_vector subs_pos;
video_palette_t palette; /**< force palette of subpicture */
/* Subpiture filters */
......@@ -602,6 +612,77 @@ static void SpuAreaFitInside(spu_area_t *area, const spu_area_t *boundary)
*area = spu_area_unscaled(a, area->scale);
}
static void subtitles_positions_StartUpdate(subtitles_positions_vector *subs)
{
struct subtitle_position_cache *pos;
vlc_vector_foreach_ref(pos, subs)
{
pos->is_active = false;
}
}
static void subtitles_positions_FinishUpdate(subtitles_positions_vector *subs)
{
struct subtitle_position_cache *pos;
for (size_t i = subs->size; i != 0; i--)
{
pos = &subs->data[i - 1];
if (!pos->is_active)
vlc_vector_remove(subs, i - 1);
}
}
static struct subtitle_position_cache *subtitles_positions_FindRegion(
subtitles_positions_vector *subs,
const subpicture_t *subpic,
const subpicture_region_t *region)
{
if (!subpic->b_subtitle)
return NULL;
if (subpic->b_absolute)
return NULL;
struct subtitle_position_cache *pos;
vlc_vector_foreach_ref(pos, subs)
{
if (pos->region == region)
{
return pos;
}
}
return NULL;
}
static void subtitles_positions_AddRegion(subtitles_positions_vector *subs,
const subpicture_t *subpic,
const subpicture_region_t *region,
const spu_area_t *area)
{
assert(subpic->b_subtitle);
if (subpic->b_absolute)
return;
if (area->width <= 0 && area->height <= 0)
return;
// find existing
struct subtitle_position_cache *write =
subtitles_positions_FindRegion(subs, subpic, region);
if (write == NULL)
{
if (unlikely(!vlc_vector_insert_hole(subs, subs->size, 1)))
return;
write = &subs->data[subs->size - 1];
}
// keep the non-absolute region position that doesn't overlap
// with other regions, the output subpicture will become
// absolute and this won't change later
write->region = region;
write->is_active = true;
write->x = area->x;
write->y = area->y;
}
/**
* Place a region
*/
......@@ -866,7 +947,9 @@ spu_SelectSubpictures(spu_t *spu, vlc_tick_t system_now,
*/
static struct subpicture_region_rendered *SpuRenderRegion(spu_t *spu,
spu_area_t *dst_area,
const spu_render_entry_t *entry, subpicture_region_t *region,
subpicture_t *subpic,
enum vlc_vout_order channel_order,
subpicture_region_t *region,
const spu_scale_t scale_size, bool apply_scale,
const vlc_fourcc_t *chroma_list,
const video_format_t *fmt,
......@@ -874,7 +957,6 @@ static struct subpicture_region_rendered *SpuRenderRegion(spu_t *spu,
vlc_tick_t render_date)
{
assert(!subpicture_region_IsText( region ));
subpicture_t *subpic = entry->subpic;
spu_private_t *sys = spu->p;
if (scale_size.h == SCALE_UNIT && scale_size.w == SCALE_UNIT)
......@@ -909,13 +991,13 @@ static struct subpicture_region_rendered *SpuRenderRegion(spu_t *spu,
* We compute the position in the rendered size */
int i_align = region->i_align;
if (entry->channel_order == VLC_VOUT_ORDER_SECONDARY)
if (channel_order == VLC_VOUT_ORDER_SECONDARY)
i_align = sys->secondary_alignment >= 0 ? sys->secondary_alignment : i_align;
SpuRegionPlace(&x_offset, &y_offset,
subpic, region, i_align);
if (entry->channel_order == VLC_VOUT_ORDER_SECONDARY)
if (channel_order == VLC_VOUT_ORDER_SECONDARY)
{
int secondary_margin =
apply_scale ? spu_invscale_h(sys->secondary_margin, scale_size) : sys->secondary_margin;
......@@ -1279,6 +1361,8 @@ static vlc_render_subpicture *SpuRenderSubpictures(spu_t *spu,
spu_area_t *subtitle_area;
size_t subtitle_area_count = 0;
subtitles_positions_StartUpdate(&spu->p->subs_pos);
subtitle_area = subtitle_area_buffer;
if (subtitle_region_count > ARRAY_SIZE(subtitle_area_buffer))
subtitle_area = calloc(subtitle_region_count, sizeof(*subtitle_area));
......@@ -1350,9 +1434,20 @@ static vlc_render_subpicture *SpuRenderSubpictures(spu_t *spu,
/* Check scale validity */
assert(scale.w != 0 && scale.h != 0);
subpicture_t forced_subpic = *subpic;
struct subtitle_position_cache *cache_pos =
subtitles_positions_FindRegion(&spu->p->subs_pos, subpic, rendered_region);
if (cache_pos != NULL)
{
rendered_region->i_x = cache_pos->x;
rendered_region->i_y = cache_pos->y;
forced_subpic.b_absolute = true;
}
/* */
output_last_ptr = SpuRenderRegion(spu, &area,
entry, rendered_region, scale, !external_scale,
&forced_subpic, entry->channel_order,
rendered_region, scale, !external_scale,
chroma_list, fmt_dst,
subtitle_area, subtitle_area_count,
subpic->b_subtitle ? render_subtitle_date : system_now);
......@@ -1370,25 +1465,19 @@ static vlc_render_subpicture *SpuRenderSubpictures(spu_t *spu,
if (subpic->b_subtitle) {
if (!external_scale)
area = spu_area_unscaled(area, scale);
if (!subpic->b_absolute && area.width > 0 && area.height > 0) {
// keep the non-absolute region position that doesn't overlap
// with other regions, the output subpicture will become
// absolute and this won't change later
region->i_x = area.x;
region->i_y = area.y;
}
if (subtitle_area)
subtitle_area[subtitle_area_count++] = area;
subtitles_positions_AddRegion(&spu->p->subs_pos, subpic, region, &area);
}
}
if (subpic->b_subtitle && !vlc_spu_regions_is_empty(&subpic->regions))
subpic->b_absolute = true;
}
/* */
if (subtitle_area != subtitle_area_buffer)
free(subtitle_area);
subtitles_positions_FinishUpdate(&spu->p->subs_pos);
return output;
}
......@@ -1707,6 +1796,8 @@ static void spu_Cleanup(spu_t *spu)
for (size_t i = 0; i < sys->channels.size; ++i)
spu_channel_Clean(sys, &sys->channels.data[i]);
vlc_vector_destroy(&sys->subs_pos);
vlc_vector_destroy(&sys->channels);
vlc_vector_clear(&sys->prerender.vector);
......@@ -1772,6 +1863,7 @@ spu_t *spu_Create(vlc_object_t *object, vout_thread_t *vout)
sys->secondary_alignment = var_InheritInteger(spu,
"secondary-sub-alignment");
vlc_vector_init(&sys->subs_pos);
sys->source_chain_update = NULL;
sys->filter_chain_update = NULL;
......