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
  • hmaarrfk/vlc
412 results
Show changes
Commits on Source (4)
Showing with 180 additions and 0 deletions
......@@ -2040,6 +2040,35 @@ LIBVLC_API int libvlc_video_update_viewpoint( libvlc_media_player_t *p_mi,
const libvlc_video_viewpoint_t *p_viewpoint,
bool b_absolute);
/**
* Video stereo modes
*/
typedef enum libvlc_video_stereo_mode_t {
libvlc_VideoStereoAuto = 0,
libvlc_VideoStereoStereo,
libvlc_VideoStereoLeftEye,
libvlc_VideoStereoRightEye,
libvlc_VideoStereoSideBySide,
} libvlc_video_stereo_mode_t;
/**
* Get current video stereo mode.
*
* \param p_mi the media player
* \return the video stereo mode.
*/
LIBVLC_API libvlc_video_stereo_mode_t libvlc_video_get_video_stereo_mode(
libvlc_media_player_t *p_mi );
/**
* Set new video stereo mode.
*
* \param p_mi the media player
* \param i_mode new video stereo mode
*/
LIBVLC_API void libvlc_video_set_video_stereo_mode( libvlc_media_player_t *p_mi,
const libvlc_video_stereo_mode_t i_mode );
/**
* Get the current subtitle delay. Positive values means subtitles are being
* displayed later, negative values earlier.
......
......@@ -84,6 +84,18 @@ enum vlc_vout_order
VLC_VOUT_ORDER_SECONDARY,
};
/**
* Stereoscopic display mode.
*/
typedef enum vlc_stereoscopic_mode_t
{
VIDEO_STEREO_OUTPUT_AUTO = 0,
VIDEO_STEREO_OUTPUT_STEREO,
VIDEO_STEREO_OUTPUT_LEFT_ONLY,
VIDEO_STEREO_OUTPUT_RIGHT_ONLY,
VIDEO_STEREO_OUTPUT_SIDE_BY_SIDE,
} vlc_stereoscopic_mode_t;
/*****************************************************************************
* Prototypes
*****************************************************************************/
......
......@@ -124,6 +124,7 @@ typedef struct vout_display_cfg {
/** Initial viewpoint when projection != PROJECTION_MODE_RECTANGULAR */
vlc_viewpoint_t viewpoint;
vlc_stereoscopic_mode_t stereo_mode; /**< Stereoscopic/3D mode used by the display */
} vout_display_cfg_t;
/**
......@@ -316,6 +317,16 @@ struct vlc_display_operations
*/
void (*set_icc_profile)(vout_display_t *, const vlc_icc_profile_t *prof);
/**
* Notifies the new Stereoscopic 3D mode in \ref vout_display_cfg_t changed.
*
* May be NULL.
*
* \retval VLC_SUCCESS if the display handled the change
* \retval VLC_EGENERIC if the display handled the change was not handled
*/
int (*set_stereo)(vout_display_t *, vlc_stereoscopic_mode_t);
/**
* Notifies a change in the input format.
*
......
......@@ -248,6 +248,7 @@ libvlc_video_get_spu_delay
libvlc_video_get_spu_text_scale
libvlc_video_get_teletext
libvlc_video_get_teletext_transparency
libvlc_video_get_video_stereo_mode
libvlc_video_set_adjust_float
libvlc_video_set_adjust_int
libvlc_video_set_aspect_ratio
......@@ -274,6 +275,7 @@ libvlc_video_set_spu_delay
libvlc_video_set_spu_text_scale
libvlc_video_set_teletext
libvlc_video_set_teletext_transparency
libvlc_video_set_video_stereo_mode
libvlc_video_take_snapshot
libvlc_video_new_viewpoint
libvlc_video_update_viewpoint
......
......@@ -696,6 +696,7 @@ libvlc_media_player_new( libvlc_instance_t *instance )
var_Create (mp, "deinterlace", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
var_Create (mp, "deinterlace-mode", VLC_VAR_STRING | VLC_VAR_DOINHERIT);
var_Create (mp, "projection-mode", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
var_Create (mp, "video-stereo-mode", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
var_Create (mp, "vbi-page", VLC_VAR_INTEGER);
var_SetInteger (mp, "vbi-page", 100);
......
......@@ -308,6 +308,35 @@ int libvlc_video_update_viewpoint( libvlc_media_player_t *p_mi,
return 0;
}
libvlc_video_stereo_mode_t libvlc_video_get_video_stereo_mode(libvlc_media_player_t *p_mi)
{
static_assert( libvlc_VideoStereoAuto == VIDEO_STEREO_OUTPUT_AUTO &&
libvlc_VideoStereoStereo == VIDEO_STEREO_OUTPUT_STEREO &&
libvlc_VideoStereoLeftEye == VIDEO_STEREO_OUTPUT_LEFT_ONLY &&
libvlc_VideoStereoRightEye == VIDEO_STEREO_OUTPUT_RIGHT_ONLY &&
libvlc_VideoStereoSideBySide == VIDEO_STEREO_OUTPUT_SIDE_BY_SIDE,
"stereo mode mismatch" );
return var_GetInteger(p_mi, "video-stereo-mode");
}
void libvlc_video_set_video_stereo_mode(libvlc_media_player_t *p_mi,
const libvlc_video_stereo_mode_t i_mode)
{
/* This will work even if the video is not currently active */
var_SetInteger(p_mi, "video-stereo-mode", i_mode);
/* Apply to current video outputs (if any) */
size_t n;
vout_thread_t **pp_vouts = GetVouts (p_mi, &n);
for (size_t i = 0; i < n; i++)
{
var_SetInteger (pp_vouts[i], "video-stereo-mode", i_mode);
vout_Release(pp_vouts[i]);
}
free (pp_vouts);
}
int64_t libvlc_video_get_spu_delay( libvlc_media_player_t *p_mi )
{
vlc_player_t *player = p_mi->player;
......
......@@ -455,6 +455,9 @@ void VLCMenuBar::VideoMenu( qt_intf_t *p_intf, QMenu *current )
{
current->addMenu(new CheckableListMenu(qtr( "Video &Track" ), THEMIM->getVideoTracks(), QActionGroup::ExclusionPolicy::None, current));
current->addSeparator();
current->addMenu( new CheckableListMenu(qtr( "&3D Output" ), THEMIM->getVideoStereoMode(), QActionGroup::ExclusionPolicy::Exclusive, current) );
current->addSeparator();
/* Surface modifiers */
current->addAction(new BooleanPropertyAction(qtr( "&Fullscreen"), THEMIM, "fullscreen", current));
......
......@@ -221,6 +221,7 @@ void PlayerControllerPrivate::UpdateVouts(vout_thread_t **vouts, size_t i_vouts,
if (m_hasVideo)
main_vout = vouts[0];
m_videoStereoMode.resetObject( main_vout );
m_zoom.resetObject( main_vout );
m_aspectRatio.resetObject( main_vout );
m_crop.resetObject( main_vout );
......@@ -1114,6 +1115,7 @@ PlayerControllerPrivate::PlayerControllerPrivate(PlayerController *playercontrol
, m_titleList(m_player)
, m_chapterList(m_player)
, m_programList(m_player)
, m_videoStereoMode((vout_thread_t*)nullptr, "video-stereo-mode")
, m_zoom((vout_thread_t*)nullptr, "zoom")
, m_aspectRatio((vout_thread_t*)nullptr, "aspect-ratio")
, m_crop((vout_thread_t*)nullptr, "crop")
......@@ -2070,6 +2072,7 @@ QABSTRACTLIST_GETTER( TitleListModel, getTitles, m_titleList)
QABSTRACTLIST_GETTER( ChapterListModel,getChapters, m_chapterList)
QABSTRACTLIST_GETTER( AudioDeviceModel, getAudioDevices, m_audioDeviceList)
QABSTRACTLIST_GETTER( ProgramListModel, getPrograms, m_programList)
QABSTRACTLIST_GETTER( VLCVarChoiceModel, getVideoStereoMode, m_videoStereoMode)
QABSTRACTLIST_GETTER( VLCVarChoiceModel, getZoom, m_zoom)
QABSTRACTLIST_GETTER( VLCVarChoiceModel, getAspectRatio, m_aspectRatio)
QABSTRACTLIST_GETTER( VLCVarChoiceModel, getCrop, m_crop)
......
......@@ -168,6 +168,7 @@ public:
//vout properties
Q_PROPERTY(bool hasVideoOutput READ hasVideoOutput NOTIFY hasVideoOutputChanged FINAL)
Q_PROPERTY(VLCVarChoiceModel* videoStereoMode READ getVideoStereoMode CONSTANT FINAL)
Q_PROPERTY(VLCVarChoiceModel* zoom READ getZoom CONSTANT FINAL)
Q_PROPERTY(VLCVarChoiceModel* aspectRatio READ getAspectRatio CONSTANT FINAL)
Q_PROPERTY(VLCVarChoiceModel* crop READ getCrop CONSTANT FINAL)
......@@ -350,6 +351,7 @@ public slots:
//vout properties
bool hasVideoOutput() const;
VLCVarChoiceModel* getVideoStereoMode();
VLCVarChoiceModel* getZoom();
VLCVarChoiceModel* getAspectRatio();
VLCVarChoiceModel* getCrop();
......
......@@ -144,6 +144,7 @@ public:
bool m_teletextTransparent = false;
//vout properties
VLCVarChoiceModel m_videoStereoMode;
VLCVarChoiceModel m_zoom;
VLCVarChoiceModel m_aspectRatio;
VLCVarChoiceModel m_crop;
......
......@@ -390,6 +390,19 @@ static const char * const ppsz_deinterlace_mode_text[] = {
#define DEINTERLACE_FILTER_TEXT N_("Deinterlace filter")
#define DEINTERLACE_FILTER_LONGTEXT N_("Deinterlace module to use.")
#define VIDEO_STEREO_FORMAT_TEXT N_("Video Stereo 3D mode")
#define VIDEO_STEREO_FORMAT_TEXT_LONGTEXT N_("Set the Video Stereo 3D mode.")
static const int video_stereo_formats[] = {
VIDEO_STEREO_OUTPUT_AUTO, VIDEO_STEREO_OUTPUT_STEREO,
VIDEO_STEREO_OUTPUT_LEFT_ONLY, VIDEO_STEREO_OUTPUT_RIGHT_ONLY,
VIDEO_STEREO_OUTPUT_SIDE_BY_SIDE,
};
static const char *const video_stereo_formats_text[] = {
N_("Auto"), N_("Stereo"), N_("Left Only"), N_("Right Only"),
N_("Side-by-Side"),
};
static const int pi_pos_values[] = { 0, 1, 2, 4, 8, 5, 6, 9, 10 };
static const char *const ppsz_pos_descriptions[] =
{ N_("Center"), N_("Left"), N_("Right"), N_("Top"), N_("Bottom"),
......@@ -1678,6 +1691,10 @@ vlc_module_begin ()
add_bool( "video-title-show", true, VIDEO_TITLE_SHOW_TEXT,
VIDEO_TITLE_SHOW_LONGTEXT )
change_safe()
add_integer ("video-stereo-mode", VIDEO_STEREO_OUTPUT_AUTO, VIDEO_STEREO_FORMAT_TEXT,
VIDEO_STEREO_FORMAT_TEXT_LONGTEXT)
change_safe()
change_integer_list (video_stereo_formats, video_stereo_formats_text)
add_integer( "video-title-timeout", 5000, VIDEO_TITLE_TIMEOUT_TEXT,
VIDEO_TITLE_TIMEOUT_LONGTEXT )
change_safe()
......
......@@ -770,6 +770,24 @@ void vout_SetDisplayProjection(vout_display_t *vd,
vout_display_ChangeProjection(vd, projection);
}
void vout_SetDisplayStereo(vout_display_t *vd, vlc_stereoscopic_mode_t mode)
{
vout_display_priv_t *osys = container_of(vd, vout_display_priv_t, display);
if (osys->cfg.stereo_mode != mode) {
osys->cfg.stereo_mode = mode;
int err;
if (vd->ops->set_stereo)
err = vd->ops->set_stereo(vd, mode);
else
err = VLC_ENOTSUP; // not handled, we need to do it in the core
if (err != VLC_SUCCESS)
{
msg_Err(vd, "Failed to change multiview display mode");
}
}
}
vout_display_t *vout_display_New(vlc_object_t *parent,
const video_format_t *source,
vlc_video_context *vctx,
......@@ -799,6 +817,8 @@ vout_display_t *vout_display_New(vlc_object_t *parent,
osys->src_vctx = vctx ? vlc_video_context_Hold( vctx ) : NULL;
osys->cfg.stereo_mode = cfg->stereo_mode;
/* */
vout_display_t *vd = &osys->display;
vd->source = &osys->source;
......
......@@ -722,6 +722,18 @@ void vout_ChangeProjection(vout_thread_t *vout,
vlc_queuedmutex_unlock(&sys->display_lock);
}
void vout_ControlChangeStereo(vout_thread_t *vout, vlc_stereoscopic_mode_t mode)
{
vout_thread_sys_t *sys = VOUT_THREAD_TO_SYS(vout);
assert(!sys->dummy);
vlc_queuedmutex_lock(&sys->display_lock);
sys->display_cfg.stereo_mode = mode;
if (sys->display != NULL)
vout_SetDisplayStereo(sys->display, mode);
vlc_queuedmutex_unlock(&sys->display_lock);
}
/* */
static void VoutGetDisplayCfg(vout_thread_sys_t *p_vout, const video_format_t *fmt, vout_display_cfg_t *cfg)
{
......@@ -760,6 +772,7 @@ static void VoutGetDisplayCfg(vout_thread_sys_t *p_vout, const video_format_t *f
cfg->display.align.vertical = VLC_VIDEO_ALIGN_TOP;
else if (align_mask & VOUT_ALIGN_BOTTOM)
cfg->display.align.vertical = VLC_VIDEO_ALIGN_BOTTOM;
cfg->stereo_mode = var_GetInteger(vout, "video-stereo-mode");
}
/* */
......
......@@ -160,6 +160,7 @@ void vout_ControlChangeSubSources(vout_thread_t *, const char *);
void vout_ControlChangeSubFilters(vout_thread_t *, const char *);
void vout_ChangeSpuChannelMargin(vout_thread_t *, enum vlc_vout_order order, int);
void vout_ChangeViewpoint( vout_thread_t *, const vlc_viewpoint_t *);
void vout_ControlChangeStereo(vout_thread_t *vout, vlc_stereoscopic_mode_t);
void vout_ChangeIccProfile(vout_thread_t *, vlc_icc_profile_t *);
void vout_ChangeProjection(vout_thread_t *, video_projection_mode_t projection);
void vout_ToggleProjection(vout_thread_t *, bool enabled);
......
......@@ -82,6 +82,8 @@ static int SecondarySubMarginCallback( vlc_object_t *, char const *,
vlc_value_t, vlc_value_t, void * );
static int ViewpointCallback( vlc_object_t *, char const *,
vlc_value_t, vlc_value_t, void * );
static int Stereo3DCallback( vlc_object_t *, char const *,
vlc_value_t, vlc_value_t, void * );
static int OverrideProjectionCallback( vlc_object_t *, char const *,
vlc_value_t, vlc_value_t, void * );
......@@ -149,6 +151,18 @@ static const struct
{ VLC_VIDEO_FIT_HEIGHT, N_("Window Height") },
};
static const struct
{
int i_value;
char psz_label[13];
} p_3D_output_format_values[] = {
{ VIDEO_STEREO_OUTPUT_AUTO, N_("Auto") },
{ VIDEO_STEREO_OUTPUT_STEREO, N_("Stereo") },
{ VIDEO_STEREO_OUTPUT_LEFT_ONLY, N_("Left Only") },
{ VIDEO_STEREO_OUTPUT_RIGHT_ONLY, N_("Right Only") },
{ VIDEO_STEREO_OUTPUT_SIDE_BY_SIDE, N_("Side-by-Side") },
};
static void AddCustomRatios( vout_thread_t *p_vout, const char *psz_var,
char *psz_list )
{
......@@ -217,6 +231,18 @@ void vout_CreateVars( vout_thread_t *p_vout )
vlc_gettext( p_zoom_values[i].psz_label ) );
}
var_Create( p_vout, "video-stereo-mode", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
var_Change( p_vout, "video-stereo-mode", VLC_VAR_SETTEXT, _("video-stereo-output"), NULL );
for( size_t i = 0; i < ARRAY_SIZE(p_3D_output_format_values); i++ )
{
val.i_int = p_3D_output_format_values[i].i_value;
var_Change( p_vout, "video-stereo-mode", VLC_VAR_ADDCHOICE, val,
vlc_gettext( p_3D_output_format_values[i].psz_label ) );
}
var_AddCallback( p_vout, "video-stereo-mode", Stereo3DCallback, NULL );
/* Crop offset vars */
var_Create( p_vout, "crop-left", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
var_Create( p_vout, "crop-top", VLC_VAR_INTEGER | VLC_VAR_ISCOMMAND );
......@@ -683,6 +709,15 @@ static int ZoomCallback( vlc_object_t *obj, char const *name,
return VLC_SUCCESS;
}
static int Stereo3DCallback( vlc_object_t *obj, char const *name,
vlc_value_t prev, vlc_value_t cur, void *data )
{
vout_thread_t *p_vout = (vout_thread_t *)obj;
(void) name; (void) prev; (void) data;
vout_ControlChangeStereo( p_vout, cur.i_int );
return VLC_SUCCESS;
}
static int AboveCallback( vlc_object_t *obj, char const *name,
vlc_value_t prev, vlc_value_t cur, void *data )
{
......
......@@ -43,6 +43,7 @@ int vout_SetDisplayFormat(vout_display_t *, const video_format_t *fmt,
* profile and always updating the display state to a consistent value */
void vout_SetDisplayIccProfile(vout_display_t *, const vlc_icc_profile_t *);
void vout_SetDisplayProjection(vout_display_t *, video_projection_mode_t);
void vout_SetDisplayStereo(vout_display_t *, vlc_stereoscopic_mode_t);
#endif /* LIBVLC_VOUT_WRAPPER_H */