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 (6)
......@@ -408,15 +408,8 @@ Pause (audio_output_t *p_aout, bool pause, vlc_tick_t date)
static int
MuteSet(audio_output_t *p_aout, bool mute)
{
aout_sys_t * p_sys = p_aout->sys;
p_sys->b_muted = mute;
if (p_sys->au_unit != NULL)
{
Pause(p_aout, mute, 0);
if (mute)
ca_Flush(p_aout);
}
ca_MuteSet(p_aout, mute);
aout_MuteReport(p_aout, mute);
return VLC_SUCCESS;
}
......
......@@ -118,8 +118,14 @@ typedef struct
* thread (start, stop, close) needs no protection. */
vlc_mutex_t selected_device_lock;
/* Synchronizes access to au_unit and f_volume. This is needed by the
* VolumeSet callback, that can be called from any threads. The au_unit
* variable is written in the start and stop callbacks from the aout
* thread. Streams callbacks (play, pause, flush...) doesn't need this lock
* to access au_unit since they are called from the aout thread. */
vlc_mutex_t volume_lock;
float f_volume;
bool b_mute;
bool b_ignore_streams_changed_callback;
} aout_sys_t;
......@@ -897,27 +903,25 @@ SwitchAudioDevice(audio_output_t *p_aout, const char *name)
}
static int
VolumeSet(audio_output_t * p_aout, float volume)
VolumeSetLocked(audio_output_t * p_aout, float volume)
{
aout_sys_t *p_sys = p_aout->sys;
OSStatus err = noErr;
OSStatus err;
if (p_sys->b_digital)
p_sys->f_volume = volume;
if (p_sys->au_unit == NULL)
return VLC_EGENERIC;
p_sys->f_volume = volume;
aout_VolumeReport(p_aout, volume);
/* Set volume for output unit */
if (!p_sys->b_mute)
{
err = AudioUnitSetParameter(p_sys->au_unit,
kHALOutputParam_Volume,
kAudioUnitScope_Global,
0,
volume * volume * volume,
0);
}
err = AudioUnitSetParameter(p_sys->au_unit,
kHALOutputParam_Volume,
kAudioUnitScope_Global,
0,
volume * volume * volume,
0);
if (var_InheritBool(p_aout, "volume-save"))
config_PutInt("auhal-volume", lroundf(volume * AOUT_VOLUME_DEFAULT));
......@@ -926,26 +930,23 @@ VolumeSet(audio_output_t * p_aout, float volume)
}
static int
MuteSet(audio_output_t * p_aout, bool mute)
VolumeSet(audio_output_t * p_aout, float volume)
{
aout_sys_t *p_sys = p_aout->sys;
if (p_sys->b_digital)
return VLC_EGENERIC;
vlc_mutex_lock(&p_sys->volume_lock);
int ret = VolumeSetLocked(p_aout, volume);
vlc_mutex_unlock(&p_sys->volume_lock);
return ret;
}
p_sys->b_mute = mute;
static int
MuteSet(audio_output_t * p_aout, bool mute)
{
ca_MuteSet(p_aout, mute);
aout_MuteReport(p_aout, mute);
float volume = .0;
if (!mute)
volume = p_sys->f_volume;
OSStatus err =
AudioUnitSetParameter(p_sys->au_unit, kHALOutputParam_Volume,
kAudioUnitScope_Global, 0,
volume * volume * volume, 0);
return (err == noErr) ? VLC_SUCCESS : VLC_EGENERIC;
return VLC_SUCCESS;
}
#pragma mark -
......@@ -975,7 +976,7 @@ RenderCallbackSPDIF(AudioDeviceID inDevice, const AudioTimeStamp * inNow,
uint64_t i_host_time = (inOutputTime->mFlags & kAudioTimeStampHostTimeValid)
? inOutputTime->mHostTime : 0;
ca_Render(p_aout, 0, i_host_time, p_output, i_size);
ca_Render(p_aout, 0, i_host_time, p_output, i_size, NULL);
return noErr;
}
......@@ -1120,8 +1121,7 @@ StartAnalog(audio_output_t *p_aout, audio_sample_format_t *fmt)
}
/* Set volume for output unit */
VolumeSet(p_aout, p_sys->f_volume);
MuteSet(p_aout, p_sys->b_mute);
VolumeSetLocked(p_aout, p_sys->f_volume);
free(layout);
......@@ -1131,6 +1131,7 @@ StartAnalog(audio_output_t *p_aout, audio_sample_format_t *fmt)
return VLC_SUCCESS;
error:
AudioComponentInstanceDispose(p_sys->au_unit);
p_sys->au_unit = NULL;
free(layout);
return VLC_EGENERIC;
}
......@@ -1414,9 +1415,14 @@ Stop(audio_output_t *p_aout)
if (p_sys->au_unit)
{
vlc_mutex_lock(&p_sys->volume_lock);
AudioOutputUnitStop(p_sys->au_unit);
au_Uninitialize(p_aout, p_sys->au_unit);
AudioComponentInstanceDispose(p_sys->au_unit);
p_sys->au_unit = NULL;
vlc_mutex_unlock(&p_sys->volume_lock);
}
else
{
......@@ -1504,8 +1510,6 @@ Start(audio_output_t *p_aout, audio_sample_format_t *restrict fmt)
return VLC_EGENERIC;
p_sys = p_aout->sys;
p_sys->b_digital = false;
p_sys->au_unit = NULL;
p_sys->i_stream_index = -1;
p_sys->b_revert = false;
p_sys->b_changed_mixing = false;
......@@ -1614,7 +1618,11 @@ Start(audio_output_t *p_aout, audio_sample_format_t *restrict fmt)
}
else
{
if (StartAnalog(p_aout, fmt) == VLC_SUCCESS)
vlc_mutex_lock(&p_sys->volume_lock);
int ret = StartAnalog(p_aout, fmt);
vlc_mutex_unlock(&p_sys->volume_lock);
if (ret == VLC_SUCCESS)
{
msg_Dbg(p_aout, "analog output successfully opened");
fmt->channel_type = AUDIO_CHANNEL_TYPE_BITMAP;
......@@ -1699,7 +1707,9 @@ static int Open(vlc_object_t *obj)
vlc_mutex_init(&p_sys->device_list_lock);
vlc_mutex_init(&p_sys->selected_device_lock);
vlc_mutex_init(&p_sys->volume_lock);
p_sys->b_digital = false;
p_sys->au_unit = NULL;
p_sys->b_ignore_streams_changed_callback = false;
p_sys->b_selected_dev_is_default = false;
memset(&p_sys->sfmt_revert, 0, sizeof(p_sys->sfmt_revert));
......@@ -1764,8 +1774,7 @@ static int Open(vlc_object_t *obj)
p_sys->f_volume = var_InheritInteger(p_aout, "auhal-volume")
/ (float)AOUT_VOLUME_DEFAULT;
aout_VolumeReport(p_aout, p_sys->f_volume);
p_sys->b_mute = var_InheritBool(p_aout, "mute");
aout_MuteReport(p_aout, p_sys->b_mute);
MuteSet(p_aout, var_InheritBool(p_aout, "mute"));
return VLC_SUCCESS;
}
......@@ -140,7 +140,7 @@ ca_Open(audio_output_t *p_aout)
/* Called from render callbacks. No lock, wait, and IO here */
void
ca_Render(audio_output_t *p_aout, uint32_t i_frames, uint64_t i_host_time,
uint8_t *p_output, size_t i_requested)
uint8_t *p_output, size_t i_requested, bool *is_silence)
{
struct aout_sys_common *p_sys = (struct aout_sys_common *) p_aout->sys;
......@@ -203,7 +203,10 @@ ca_Render(audio_output_t *p_aout, uint32_t i_frames, uint64_t i_host_time,
while (p_block != NULL && i_requested != 0)
{
size_t i_tocopy = __MIN(i_requested, p_block->i_buffer);
memcpy(p_output, p_block->p_buffer, i_tocopy);
if (unlikely(p_sys->b_muted))
memset(p_output, 0, i_tocopy);
else
memcpy(p_output, p_block->p_buffer, i_tocopy);
i_requested -= i_tocopy;
i_copied += i_tocopy;
p_output += i_tocopy;
......@@ -235,11 +238,15 @@ ca_Render(audio_output_t *p_aout, uint32_t i_frames, uint64_t i_host_time,
memset(p_output, 0, i_requested);
}
if (is_silence != NULL)
*is_silence = p_sys->b_muted;
lock_unlock(p_sys);
return;
drop:
memset(p_output, 0, i_requested);
if (is_silence != NULL)
*is_silence = true;
lock_unlock(p_sys);
}
......@@ -313,6 +320,16 @@ ca_Pause(audio_output_t * p_aout, bool pause, vlc_tick_t date)
lock_unlock(p_sys);
}
void
ca_MuteSet(audio_output_t * p_aout, bool muted)
{
struct aout_sys_common *p_sys = (struct aout_sys_common *) p_aout->sys;
lock_lock(p_sys);
p_sys->b_muted = muted;
lock_unlock(p_sys);
}
void
ca_Play(audio_output_t * p_aout, block_t * p_block, vlc_tick_t date)
{
......@@ -415,6 +432,7 @@ ca_Initialize(audio_output_t *p_aout, const audio_sample_format_t *fmt,
p_sys->i_underrun_size = 0;
p_sys->b_paused = false;
p_sys->b_muted = false;
p_sys->i_render_host_time = p_sys->i_first_render_host_time = 0;
p_sys->i_render_frames = 0;
......@@ -533,8 +551,11 @@ RenderCallback(void *p_data, AudioUnitRenderActionFlags *ioActionFlags,
uint64_t i_host_time = (inTimeStamp->mFlags & kAudioTimeStampHostTimeValid)
? inTimeStamp->mHostTime : 0;
bool is_silence;
ca_Render(p_data, inNumberFrames, i_host_time, ioData->mBuffers[0].mData,
ioData->mBuffers[0].mDataByteSize);
ioData->mBuffers[0].mDataByteSize, &is_silence);
if (is_silence)
*ioActionFlags |= kAudioUnitRenderAction_OutputIsSilence;
return noErr;
}
......
......@@ -53,6 +53,7 @@ struct aout_sys_common
size_t i_underrun_size;
bool b_paused;
bool b_muted;
bool b_do_flush;
size_t i_out_max_size;
......@@ -87,7 +88,7 @@ struct aout_sys_common
int ca_Open(audio_output_t *p_aout);
void ca_Render(audio_output_t *p_aout, uint32_t i_nb_samples, uint64_t i_host_time,
uint8_t *p_output, size_t i_requested);
uint8_t *p_output, size_t i_requested, bool *is_silence);
int ca_TimeGet(audio_output_t *p_aout, vlc_tick_t *delay);
......@@ -95,6 +96,8 @@ void ca_Flush(audio_output_t *p_aout);
void ca_Pause(audio_output_t * p_aout, bool pause, vlc_tick_t date);
void ca_MuteSet(audio_output_t * p_aout, bool mute);
void ca_Play(audio_output_t * p_aout, block_t * p_block, vlc_tick_t date);
int ca_Initialize(audio_output_t *p_aout, const audio_sample_format_t *fmt,
......@@ -114,3 +117,5 @@ int au_Initialize(audio_output_t *p_aout, AudioUnit au,
bool *warn_configuration);
void au_Uninitialize(audio_output_t *p_aout, AudioUnit au);
void au_VolumeSet(audio_output_t *p_aout);