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
  • abdsaber000/vlc
  • falbrechtskirchinger/vlc
  • b.sullender/vlc
  • hulxv/vlc
  • zyad-ayad/vlc
  • shocknovaa/vlc
  • gremlinflat/vlc
  • Pratham24D/vlc
411 results
Show changes
Commits on Source (16)
Showing
with 83 additions and 38 deletions
......@@ -72,9 +72,10 @@ struct subpicture_region_t
picture_t *p_picture; /**< picture comprising this region */
bool b_absolute; /**< position is absolute in the movie */
bool b_in_window; /**< position the region in window */
int i_x; /**< position of region, relative to alignment */
int i_y; /**< position of region, relative to alignment */
int i_align; /**< alignment flags of region */
int i_align; /**< alignment flags SUBPICTURE_ALIGN_xxx */
int i_alpha; /**< transparency */
/* Parameters for text regions (p_picture to be rendered) */
......@@ -174,10 +175,14 @@ struct vlc_spu_updater_configuration
const video_format_t *video_src;
// scaled video format of the video under the SPU
const video_format_t *video_dst;
unsigned display_width;
unsigned display_height;
// source video format of the previous vlc_spu_updater_ops.update call
const video_format_t *prev_src;
// scaled video format of the previous vlc_spu_updater_ops.update call
const video_format_t *prev_dst;
// timestamp when the SPU will be displayed, between i_start and i_stop
// for subtitles
vlc_tick_t pts;
......@@ -311,7 +316,8 @@ VLC_API subpicture_t * subpicture_NewFromPicture( vlc_object_t *, picture_t *, v
* This function will update the content of a subpicture created with
* a non NULL subpicture_updater_t.
*/
VLC_API void subpicture_Update( subpicture_t *, const video_format_t *src, const video_format_t *, vlc_tick_t );
VLC_API void subpicture_Update( subpicture_t *, const video_format_t *src, const video_format_t *,
unsigned display_width, unsigned display_height, vlc_tick_t );
/**
* This function will blend a given subpicture onto a picture.
......
......@@ -1615,7 +1615,7 @@ static void subpictureUpdaterUpdate(subpicture_t *p_subpic,
if (p_dst == NULL)
break;
p_dst->b_absolute = p_src->b_absolute;
p_dst->b_absolute = true; p_dst->b_in_window = false;
p_dst->i_x = p_src->i_x;
p_dst->i_y = p_src->i_y;
// fields not modified on the source
......@@ -1872,7 +1872,6 @@ static void blurayDrawOverlay(demux_t *p_demux, const BD_OVERLAY* const eventov)
p_reg = subpicture_region_New(&fmt);
if (p_reg) {
p_reg->b_absolute = true;
p_reg->i_x = eventov->x;
p_reg->i_y = eventov->y;
/* Append it to our list. */
......@@ -1993,7 +1992,6 @@ static void blurayDrawArgbOverlay(demux_t *p_demux, const BD_ARGB_OVERLAY* const
vlc_mutex_unlock(&ov->lock);
return;
}
p_reg->b_absolute = true;
p_reg->i_x = 0;
p_reg->i_y = 0;
vlc_spu_regions_push(&ov->regions, p_reg);
......
......@@ -178,7 +178,7 @@ static void SubpictureUpdate(subpicture_t *p_subpic,
if (!region)
break;
region->b_absolute = true;
region->b_absolute = true; region->b_in_window = false;
region->i_x = image->dst_x;
region->i_y = image->dst_y;
region->i_align = SUBPICTURE_ALIGN_TOP | SUBPICTURE_ALIGN_LEFT;
......
......@@ -73,7 +73,7 @@ static void SubpictureTextUpdate(subpicture_t *subpic,
r->fmt.i_sar_den = 1;
r->p_text = text_segment_New( p_region->psz_text );
r->b_absolute = true;
r->b_absolute = true; r->b_in_window = false;
r->i_align = SUBPICTURE_ALIGN_LEFT | SUBPICTURE_ALIGN_TOP;
if (p_region->i_planewidth > 0 && p_region->i_planeheight > 0)
......
......@@ -285,7 +285,7 @@ static subpicture_region_t *ConvertRegionRGBA(AVSubtitleRect *ffregion)
if (!region)
return NULL;
region->b_absolute = true; /* We have offset and size for subtitle */
region->b_absolute = true; region->b_in_window = false; /* We have offset and size for subtitle */
region->i_x = ffregion->x;
region->i_y = ffregion->y;
region->i_align = SUBPICTURE_ALIGN_TOP | SUBPICTURE_ALIGN_LEFT;
......
......@@ -511,7 +511,7 @@ static subpicture_t *Subtitle( decoder_t *p_dec, eia608_t *h, vlc_tick_t i_pts )
/* Set first region defaults */
/* The "leavetext" alignment is a special mode where the subpicture
region itself gets aligned, but the text inside it does not */
p_spu_sys->region.b_absolute = false;
p_spu_sys->region.b_absolute = false; p_spu_sys->region.b_in_window = false;
p_spu_sys->region.align = SUBPICTURE_ALIGN_TOP|SUBPICTURE_ALIGN_LEFT;
p_spu_sys->region.inner_align = SUBPICTURE_ALIGN_BOTTOM|SUBPICTURE_ALIGN_LEFT;
p_spu_sys->region.flags = UPDT_REGION_IGNORE_BACKGROUND | UPDT_REGION_USES_GRID_COORDINATES;
......
......@@ -1050,7 +1050,7 @@ static void CEA708SpuConvert( const cea708_window_t *p_w,
(CEA708_SCREEN_ROWS * CEA708_FONT_TO_LINE_HEIGHT_RATIO);
}
p_region->flags |= UPDT_REGION_ORIGIN_X_IS_RATIO|UPDT_REGION_ORIGIN_Y_IS_RATIO;
p_region->b_absolute = false;
p_region->b_absolute = false; p_region->b_in_window = false;
if( p_w->i_firstrow <= p_w->i_lastrow )
{
......
......@@ -542,7 +542,7 @@ static subpicture_t *DecodePacket( decoder_t *p_dec, block_t *p_data )
}
vlc_spu_regions_push(&p_spu->regions, p_region);
p_region->b_absolute = true;
p_region->b_absolute = true; p_region->b_in_window = false;
p_region->i_x = p_sys->i_x_start;
p_region->i_x = p_region->i_x * 3 / 4; /* FIXME: use aspect ratio for x? */
p_region->i_y = p_sys->i_y_start;
......
......@@ -1611,7 +1611,7 @@ static subpicture_t *render( decoder_t *p_dec )
msg_Err( p_dec, "cannot allocate SPU region" );
continue;
}
p_spu_region->b_absolute = true;
p_spu_region->b_absolute = true; p_spu_region->b_in_window = false;
p_spu_region->i_x = i_base_x + p_regiondef->i_x;
p_spu_region->i_y = i_base_y + p_regiondef->i_y;
p_spu_region->i_align = p_sys->i_spu_position;
......@@ -1652,7 +1652,7 @@ static subpicture_t *render( decoder_t *p_dec )
p_spu_region->fmt.i_height = p_spu_region->fmt.i_visible_height = p_region->i_height;
p_spu_region->p_text = text_segment_New( p_object_def->psz_text );
p_spu_region->b_absolute = true;
p_spu_region->b_absolute = true; p_spu_region->b_in_window = false;
p_spu_region->i_x = i_base_x + p_regiondef->i_x + p_object_def->i_x;
p_spu_region->i_y = i_base_y + p_regiondef->i_y + p_object_def->i_y;
p_spu_region->i_align = p_sys->i_spu_position;
......
......@@ -1153,10 +1153,12 @@ static subpicture_t *SetupSimpleKateSPU( decoder_t *p_dec, subpicture_t *p_spu,
SetupText( p_dec, p_region, ev );
/* default positioning */
p_region->b_absolute = false;
p_region->b_absolute = false; p_region->b_in_window = false;
#ifdef HAVE_TIGER
if( p_sys->b_use_tiger)
p_region->b_absolute = true;
{
p_region->b_absolute = true; p_region->b_in_window = false;
}
#endif
p_region->i_align = SUBPICTURE_ALIGN_BOTTOM;
if (p_bitmap_region)
......@@ -1173,7 +1175,7 @@ static subpicture_t *SetupSimpleKateSPU( decoder_t *p_dec, subpicture_t *p_spu,
{
if (kin.has.region)
{
p_region->b_absolute = true;
p_region->b_absolute = true; p_region->b_in_window = false;
p_region->i_x = kin.region_x;
p_region->i_y = kin.region_y;
if (p_bitmap_region)
......@@ -1190,6 +1192,7 @@ static subpicture_t *SetupSimpleKateSPU( decoder_t *p_dec, subpicture_t *p_spu,
if (p_bitmap_region)
{
p_bitmap_region->b_absolute = p_region->b_absolute;
p_bitmap_region->b_in_window = p_region->b_in_window;
vlc_spu_regions_push(&p_spu->regions, p_bitmap_region);
}
vlc_spu_regions_push(&p_spu->regions, p_region);
......
......@@ -495,7 +495,7 @@ static void SubpictureUpdate( subpicture_t *p_subpic,
r = subpicture_region_New( &fmt_region );
if( !r )
break;
r->b_absolute = true;
r->b_absolute = true; r->b_in_window = false;
r->i_x = region[i].x0;
r->i_y = region[i].y0;
r->i_align = SUBPICTURE_ALIGN_TOP | SUBPICTURE_ALIGN_LEFT;
......
......@@ -195,7 +195,7 @@ static int Decode( decoder_t *p_dec, block_t *p_block )
p_spu->b_ephemer = true;
p_spu_sys->region.b_absolute = false;
p_spu_sys->region.b_absolute = false; p_spu_sys->region.b_in_window = false;
p_spu_sys->region.inner_align = SUBPICTURE_ALIGN_TOP;
p_spu_sys->p_default_style->i_style_flags = STYLE_BOLD | STYLE_BACKGROUND;
p_spu_sys->p_default_style->i_features |= STYLE_HAS_FLAGS;
......
......@@ -389,7 +389,7 @@ static subpicture_t *DecodeSubtitleMessage(decoder_t *dec,
frame_duration = VLC_TICK_FROM_MS(40);
break;
}
region->b_absolute = true;
region->b_absolute = true; region->b_in_window = false;
if (!pre_clear_display)
msg_Warn(dec, "SCTE-27 subtitles without pre_clear_display flag are not well supported");
sub->b_ephemer = true;
......
......@@ -886,7 +886,7 @@ static int Render( decoder_t *p_dec, subpicture_t *p_spu,
}
vlc_spu_regions_push(&p_spu->regions, p_region);
p_region->b_absolute = true;
p_region->b_absolute = true; p_region->b_in_window = false;
p_region->i_x = p_spu_properties->i_x;
p_region->i_y = p_spu_properties->i_y + p_spu_data->i_y_top_offset;
p_p = p_region->p_picture->p->p_pixels;
......
......@@ -344,6 +344,7 @@ static void FillSubpictureUpdater(stl_sg_t *p_group, subtext_updater_sys_t *p_sp
}
p_spu_sys->region.b_absolute = false;
p_spu_sys->region.b_in_window = false;
p_spu_sys->region.align = SUBPICTURE_ALIGN_BOTTOM;
if(p_group->i_justify == 0x01)
p_spu_sys->region.inner_align = SUBPICTURE_ALIGN_LEFT;
......
......@@ -462,6 +462,7 @@ static subpicture_t *ParseText( decoder_t *p_dec, block_t *p_block )
p_spu_sys->region.p_segments = ParseSubtitles( &i_inline_align, psz_subtitle );
free( psz_subtitle );
p_spu_sys->region.b_absolute = false;
p_spu_sys->region.b_in_window = true;
if( p_sys->i_align >= 0 ) /* bottom ; left, right or centered */
{
p_spu_sys->region.align = SUBPICTURE_ALIGN_BOTTOM | p_sys->i_align;
......
......@@ -48,7 +48,8 @@ struct substext_updater_region_t
/* store above percentile meanings as modifier flags */
int flags; /* subpicture_updater_sys_region_flags_e */
int align; /* alignment of the region itself */
bool b_absolute; /* position absolute to the video coordinates */
bool b_absolute; /**< position is absolute in the movie */
bool b_in_window; /**< position the region in whole window */
int inner_align; /* alignment of content inside the region */
text_style_t *p_region_style;
text_segment_t *p_segments;
......@@ -77,7 +78,9 @@ static inline void SubpictureUpdaterSysRegionInit(substext_updater_region_t *p_u
{
memset(p_updtregion, 0, sizeof(*p_updtregion));
p_updtregion->align = SUBPICTURE_ALIGN_BOTTOM;
p_updtregion->inner_align = 0;
p_updtregion->b_absolute = false;
p_updtregion->b_in_window = false;
p_updtregion->inner_align = 0 ; // centered
}
static inline substext_updater_region_t *SubpictureUpdaterSysRegionNew( void )
......@@ -142,6 +145,20 @@ static void SubpictureTextUpdate(subpicture_t *subpic,
{
sar.num = 4;
sar.den = 3;
}
else
{
sar.num = 1;
sar.den = 1;
}
if ( p_updtregion->b_in_window )
{
subpic->i_original_picture_width = cfg->display_width;
subpic->i_original_picture_height = cfg->display_height;
}
else if( sys->region.flags & UPDT_REGION_USES_GRID_COORDINATES )
{
subpic->i_original_picture_width = fmt_dst->i_visible_height * sar.num / sar.den;
subpic->i_original_picture_height = fmt_dst->i_visible_height;
}
......@@ -149,12 +166,18 @@ static void SubpictureTextUpdate(subpicture_t *subpic,
{
subpic->i_original_picture_width = fmt_dst->i_width * fmt_dst->i_sar_num / fmt_dst->i_sar_den;
subpic->i_original_picture_height = fmt_dst->i_height;
sar.num = 1;
sar.den = 1;
}
bool b_schedule_blink_update = false;
video_format_t render_fmt = *fmt_dst;
if (p_updtregion->b_in_window)
{
render_fmt.i_x_offset = render_fmt.i_y_offset = 0;
render_fmt.i_width = render_fmt.i_visible_width = cfg->display_width;
render_fmt.i_height = render_fmt.i_visible_height = cfg->display_height;
}
for( substext_updater_region_t *update_region = &sys->region;
update_region; update_region = update_region->p_next )
{
......@@ -167,6 +190,7 @@ static void SubpictureTextUpdate(subpicture_t *subpic,
r->p_text = text_segment_Copy( update_region->p_segments );
r->b_absolute = update_region->b_absolute;
r->b_in_window = update_region->b_in_window;
r->i_align = update_region->align;
r->text_flags |= update_region->inner_align & SUBPICTURE_ALIGN_MASK;
if (update_region->flags & UPDT_REGION_IGNORE_BACKGROUND)
......@@ -179,25 +203,25 @@ static void SubpictureTextUpdate(subpicture_t *subpic,
{
const float margin_ratio = sys->margin_ratio;
const int margin_h = margin_ratio * ( b_gridmode ? subpic->i_original_picture_width
: fmt_dst->i_visible_width );
const int margin_v = margin_ratio * fmt_dst->i_visible_height;
: render_fmt.i_visible_width );
const int margin_v = margin_ratio * render_fmt.i_visible_height;
/* subpic invisible margins sizes */
const int outerright_h = fmt_dst->i_width - (fmt_dst->i_visible_width + fmt_dst->i_x_offset);
const int outerbottom_v = fmt_dst->i_height - (fmt_dst->i_visible_height + fmt_dst->i_y_offset);
const int outerright_h = render_fmt.i_width - (render_fmt.i_visible_width + render_fmt.i_x_offset);
const int outerbottom_v = render_fmt.i_height - (render_fmt.i_visible_height + render_fmt.i_y_offset);
/* regions usable */
const int inner_w = fmt_dst->i_visible_width - margin_h * 2;
const int inner_h = fmt_dst->i_visible_height - margin_v * 2;
const int inner_w = render_fmt.i_visible_width - margin_h * 2;
const int inner_h = render_fmt.i_visible_height - margin_v * 2;
if (r->i_align & SUBPICTURE_ALIGN_LEFT)
r->i_x = margin_h + fmt_dst->i_x_offset;
r->i_x = margin_h + render_fmt.i_x_offset;
else if (r->i_align & SUBPICTURE_ALIGN_RIGHT)
r->i_x = margin_h + outerright_h;
else
r->i_x = 0;
if (r->i_align & SUBPICTURE_ALIGN_TOP )
r->i_y = margin_v + fmt_dst->i_y_offset;
r->i_y = margin_v + render_fmt.i_y_offset;
else if (r->i_align & SUBPICTURE_ALIGN_BOTTOM )
r->i_y = margin_v + outerbottom_v;
else
......@@ -225,8 +249,8 @@ static void SubpictureTextUpdate(subpicture_t *subpic,
} else {
/* FIXME it doesn't adapt on crop settings changes */
r->i_x = update_region->origin.x * fmt_dst->i_width / update_region->extent.x;
r->i_y = update_region->origin.y * fmt_dst->i_height / update_region->extent.y;
r->i_x = update_region->origin.x * render_fmt.i_width / update_region->extent.x;
r->i_y = update_region->origin.y * render_fmt.i_height / update_region->extent.y;
}
/* Add missing default style, if any, to all segments */
......@@ -318,7 +342,7 @@ static inline subpicture_t *decoder_NewSubpictureText(decoder_t *decoder)
text_style_Delete(sys->p_default_style);
free(sys);
}
sys->region.b_absolute = true;
sys->region.b_absolute = true; sys->region.b_in_window = false;
sys->i_next_update = VLC_TICK_INVALID;
return subpic;
}
......@@ -415,7 +415,7 @@ static int Decode( decoder_t *p_dec, block_t *p_block )
p_spu->i_stop = p_block->i_pts + p_block->i_length;
p_spu->b_ephemer = (p_block->i_length == 0);
p_spu_sys->region.b_absolute = false;
p_spu_sys->region.b_absolute = false; p_spu_sys->region.b_in_window = false;
p_spu_sys->region.align = SUBPICTURE_ALIGN_BOTTOM;
text_style_Merge( p_spu_sys->p_default_style, p_root_style, true );
......
......@@ -65,6 +65,7 @@ enum
ATTRIBUTE_X_PERCENT = (1 << 2),
ATTRIBUTE_Y = (1 << 3),
ATTRIBUTE_Y_PERCENT = (1 << 4),
ATTRIBUTE_REL_WINDOW = (1 << 5),
};
typedef struct
......@@ -325,8 +326,8 @@ static int ParsePositionAttributeList( char *psz_subtitle, int *i_align,
char *psz_align = GrabAttributeValue( "alignment", psz_subtitle );
char *psz_margin_x = GrabAttributeValue( "horizontal-margin", psz_subtitle );
char *psz_margin_y = GrabAttributeValue( "vertical-margin", psz_subtitle );
/* -- UNSUPPORTED
char *psz_relative = GrabAttributeValue( "relative-to", psz_subtitle );
/* -- UNSUPPORTED
char *psz_rotate_x = GrabAttributeValue( "rotate-x", psz_subtitle );
char *psz_rotate_y = GrabAttributeValue( "rotate-y", psz_subtitle );
char *psz_rotate_z = GrabAttributeValue( "rotate-z", psz_subtitle );
......@@ -380,6 +381,13 @@ static int ParsePositionAttributeList( char *psz_subtitle, int *i_align,
free( psz_margin_y );
}
if( psz_relative )
{
if( !strcasecmp( "Window", psz_relative ) )
i_mask |= ATTRIBUTE_REL_WINDOW;
free( psz_relative );
}
return i_mask;
}
......@@ -392,6 +400,10 @@ static void SetupPositions( subpicture_region_t *p_region, char *psz_subtitle )
i_mask = ParsePositionAttributeList( psz_subtitle, &i_align, &i_x, &i_y );
p_region->b_absolute = false;
if( i_mask & ATTRIBUTE_REL_WINDOW )
p_region->b_in_window = true;
else
p_region->b_in_window = false;
if( i_mask & ATTRIBUTE_ALIGNMENT )
p_region->i_align = i_align;
......
......@@ -493,7 +493,7 @@ static subpicture_t *DecodePacket( decoder_t *p_dec, block_t *p_data )
}
vlc_spu_regions_push(&p_spu->regions, p_region);
p_region->b_absolute = true;
p_region->b_absolute = true; p_region->b_in_window = false;
p_region->i_x = p_sys->i_x_start;
p_region->i_y = p_sys->i_y_start;
......