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 (4)
......@@ -41,8 +41,6 @@ typedef struct
{
struct vlc_vdp_device *device;
VdpVideoMixer mixer;
VdpChromaType chroma;
VdpYCbCrFormat format;
picture_pool_t *pool;
picture_t *history[MAX_PAST + 1 + MAX_FUTURE];
......@@ -107,7 +105,7 @@ static VdpStatus MixerSetupColors(filter_t *filter, const VdpProcamp *procamp,
}
/** Create VDPAU video mixer */
static VdpVideoMixer MixerCreate(filter_t *filter, bool import)
static VdpVideoMixer MixerCreate(filter_t *filter, VdpChromaType chroma)
{
vlc_vdp_mixer_t *sys = filter->p_sys;
vdp_t *vdp = sys->device->vdp;
......@@ -199,9 +197,8 @@ static VdpVideoMixer MixerCreate(filter_t *filter, bool import)
VDP_VIDEO_MIXER_PARAMETER_CHROMA_TYPE,
};
uint32_t width = filter->fmt_in.video.i_width;
uint32_t height = import ? filter->fmt_in.video.i_visible_height
: filter->fmt_in.video.i_height;
const void *values[3] = { &width, &height, &sys->chroma, };
uint32_t height = filter->fmt_in.video.i_height;
const void *values[3] = { &width, &height, &chroma, };
err = vdp_video_mixer_create(vdp, device, featc, featv,
3, parms, values, &mixer);
......@@ -333,105 +330,6 @@ static picture_t *VideoExport(filter_t *filter, picture_t *src, picture_t *dst,
return dst;
}
/** Import VLC picture into VDPAU video surface */
static picture_t *VideoImport(filter_t *filter, picture_t *src)
{
vlc_vdp_mixer_t *sys = filter->p_sys;
vdp_t *vdp = sys->device->vdp;
VdpDevice device = sys->device->device;
VdpVideoSurface surface;
VdpStatus err;
if (vdp == NULL)
goto drop;
/* Create surface (TODO: reuse?) */
err = vdp_video_surface_create(vdp, device, sys->chroma,
filter->fmt_in.video.i_width,
filter->fmt_in.video.i_visible_height,
&surface);
if (err != VDP_STATUS_OK)
{
msg_Err(filter, "video %s %s failure: %s", "surface", "creation",
vdp_get_error_string(vdp, err));
goto drop;
}
/* Put bits */
const void *planes[3];
uint32_t pitches[3];
for (int i = 0; i < src->i_planes; i++)
{
planes[i] = src->p[i].p_pixels
+ filter->fmt_in.video.i_y_offset * src->p[i].i_pitch;
pitches[i] = src->p[i].i_pitch;
}
if (src->format.i_chroma == VLC_CODEC_I420
|| src->format.i_chroma == VLC_CODEC_I422
|| src->format.i_chroma == VLC_CODEC_I444)
{
planes[1] = src->p[2].p_pixels;
planes[2] = src->p[1].p_pixels;
pitches[1] = src->p[2].i_pitch;
pitches[2] = src->p[1].i_pitch;
}
if (src->format.i_chroma == VLC_CODEC_I420
|| src->format.i_chroma == VLC_CODEC_YV12
|| src->format.i_chroma == VLC_CODEC_NV12)
{
for (int i = 1; i < src->i_planes; i++)
planes[i] = ((const uint8_t *)planes[i])
+ (filter->fmt_in.video.i_y_offset / 2) * src->p[i].i_pitch;
}
err = vdp_video_surface_put_bits_y_cb_cr(vdp, surface, sys->format,
planes, pitches);
if (err != VDP_STATUS_OK)
{
msg_Err(filter, "video %s %s failure: %s", "surface", "import",
vdp_get_error_string(vdp, err));
goto error;
}
/* Wrap surface into a picture */
video_format_t fmt = src->format;
switch (sys->chroma)
{
case VDP_CHROMA_TYPE_420:
fmt.i_chroma = VLC_CODEC_VDPAU_VIDEO_420;
break;
case VDP_CHROMA_TYPE_422:
fmt.i_chroma = VLC_CODEC_VDPAU_VIDEO_422;
break;
case VDP_CHROMA_TYPE_444:
fmt.i_chroma = VLC_CODEC_VDPAU_VIDEO_444;
break;
default:
vlc_assert_unreachable();
}
picture_t *dst = picture_NewFromFormat(&fmt);
if (unlikely(dst == NULL))
goto error;
picture_CopyProperties(dst, src);
picture_Release(src);
err = vlc_vdp_video_attach(filter->vctx_out, surface, dst);
if (unlikely(err != VDP_STATUS_OK))
{
picture_Release(dst);
dst = NULL;
}
return dst;
error:
vdp_video_surface_destroy(vdp, surface);
drop:
picture_Release(src);
return NULL;
}
static void OutputSurfaceDestroy(struct picture_context_t *ctx)
{
free(ctx);
......@@ -447,7 +345,7 @@ static picture_context_t *OutputSurfaceClone(picture_context_t *ctx)
return dts_ctx;
}
static picture_t *Render(filter_t *filter, picture_t *src, bool import)
static picture_t *Render(filter_t *filter, picture_t *src)
{
vlc_vdp_mixer_t *sys = filter->p_sys;
vdp_t *vdp = sys->device->vdp;
......@@ -614,8 +512,6 @@ static picture_t *Render(filter_t *filter, picture_t *src, bool import)
filter->fmt_in.video.i_x_offset, filter->fmt_in.video.i_y_offset,
};
if (import)
src_rect.y0 = src_rect.y1 = 0;
if (hflip)
src_rect.x0 += filter->fmt_in.video.i_visible_width;
else
......@@ -684,18 +580,6 @@ error:
goto skip;
}
static picture_t *VideoRender(filter_t *filter, picture_t *src)
{
return Render(filter, src, false);
}
static picture_t *YCbCrRender(filter_t *filter, picture_t *src)
{
src = VideoImport(filter, src);
return (src != NULL) ? Render(filter, src, true) : NULL;
}
static int OutputCheckFormat(vlc_object_t *obj, struct vlc_video_context *vctx,
const video_format_t *fmt,
VdpRGBAFormat *restrict rgb_fmt)
......@@ -761,11 +645,7 @@ static void OutputClose(filter_t *filter)
}
static const struct vlc_filter_operations filter_output_opaque_ops = {
.filter_video = VideoRender, .flush = Flush, .close = OutputClose,
};
static const struct vlc_filter_operations filter_output_ycbcr_ops = {
.filter_video = YCbCrRender, .flush = Flush, .close = OutputClose,
.filter_video = Render, .flush = Flush, .close = OutputClose,
};
static int OutputOpen(filter_t *filter)
......@@ -789,30 +669,16 @@ static int OutputOpen(filter_t *filter)
filter->p_sys = sys;
const struct vlc_filter_operations *ops = &filter_output_opaque_ops;
VdpChromaType chroma;
if (filter->fmt_in.video.i_chroma == VLC_CODEC_VDPAU_VIDEO_444)
{
sys->chroma = VDP_CHROMA_TYPE_444;
sys->format = VDP_YCBCR_FORMAT_NV12;
}
chroma = VDP_CHROMA_TYPE_444;
else
if (filter->fmt_in.video.i_chroma == VLC_CODEC_VDPAU_VIDEO_422)
{
sys->chroma = VDP_CHROMA_TYPE_422;
/* TODO: check if the drivery supports NV12 or UYVY */
sys->format = VDP_YCBCR_FORMAT_UYVY;
}
chroma = VDP_CHROMA_TYPE_422;
else
if (filter->fmt_in.video.i_chroma == VLC_CODEC_VDPAU_VIDEO_420)
{
sys->chroma = VDP_CHROMA_TYPE_420;
sys->format = VDP_YCBCR_FORMAT_NV12;
}
else
if (vlc_fourcc_to_vdp_ycc(filter->fmt_in.video.i_chroma,
&sys->chroma, &sys->format))
ops = &filter_output_ycbcr_ops;
chroma = VDP_CHROMA_TYPE_420;
else
{
vlc_decoder_device_Release(dec_device);
......@@ -837,7 +703,7 @@ static int OutputOpen(filter_t *filter)
}
/* Create the video-to-output mixer */
sys->mixer = MixerCreate(filter, ops == &filter_output_ycbcr_ops);
sys->mixer = MixerCreate(filter, chroma);
if (sys->mixer == VDP_INVALID_HANDLE)
{
picture_pool_Release(sys->pool);
......@@ -854,7 +720,7 @@ static int OutputOpen(filter_t *filter)
sys->procamp.saturation = 1.f;
sys->procamp.hue = 0.f;
filter->ops = ops;
filter->ops = &filter_output_opaque_ops;
return VLC_SUCCESS;
}
......
......@@ -296,6 +296,11 @@ static const struct vlc_display_operations ops = {
static int Open(vout_display_t *vd,
video_format_t *fmtp, vlc_video_context *context)
{
if (fmtp->i_chroma != VLC_CODEC_VDPAU_VIDEO_420
&& fmtp->i_chroma != VLC_CODEC_VDPAU_VIDEO_422
&& fmtp->i_chroma != VLC_CODEC_VDPAU_VIDEO_444)
return VLC_ENOTSUP;
vout_display_sys_t *sys = malloc(sizeof (*sys));
if (unlikely(sys == NULL))
return VLC_ENOMEM;
......@@ -330,53 +335,10 @@ static int Open(vout_display_t *vd,
/* Check source format */
video_format_t fmt;
VdpChromaType chroma;
VdpYCbCrFormat format;
VdpStatus err;
video_format_ApplyRotation(&fmt, fmtp);
if (fmt.i_chroma == VLC_CODEC_VDPAU_VIDEO_420
|| fmt.i_chroma == VLC_CODEC_VDPAU_VIDEO_422
|| fmt.i_chroma == VLC_CODEC_VDPAU_VIDEO_444)
;
else
if (vlc_fourcc_to_vdp_ycc(fmt.i_chroma, &chroma, &format))
{
uint32_t w, h;
VdpBool ok;
err = vdp_video_surface_query_capabilities(sys->vdp, sys->device,
chroma, &ok, &w, &h);
if (err != VDP_STATUS_OK)
{
msg_Err(vd, "%s capabilities query failure: %s", "video surface",
vdp_get_error_string(sys->vdp, err));
goto error;
}
if (!ok || w < fmt.i_width || h < fmt.i_height)
{
msg_Err(vd, "source video %s not supported", "chroma type");
goto error;
}
err = vdp_video_surface_query_get_put_bits_y_cb_cr_capabilities(
sys->vdp, sys->device, chroma, format, &ok);
if (err != VDP_STATUS_OK)
{
msg_Err(vd, "%s capabilities query failure: %s", "video surface",
vdp_get_error_string(sys->vdp, err));
goto error;
}
if (!ok)
{
msg_Err(vd, "source video %s not supported", "YCbCr format");
goto error;
}
}
else
goto error;
/* Check video mixer capabilities */
{
uint32_t min, max;
......