From e7905be87af7414c3386e8074fa5726459ddfba0 Mon Sep 17 00:00:00 2001 From: metehan-arslan <99metehanarslan@gmail.com> Date: Thu, 25 Aug 2022 20:36:47 +0300 Subject: [PATCH 1/5] replace deprecated option --- create_main.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/create_main.sh b/create_main.sh index 3bbaf9a..5092e7e 100755 --- a/create_main.sh +++ b/create_main.sh @@ -41,7 +41,7 @@ emcc --bind -s USE_PTHREADS=1 -s TOTAL_MEMORY=2GB -s PTHREAD_POOL_SIZE=25 \ --profiling-funcs \ -s OFFSCREENCANVAS_SUPPORT=1 \ -s MODULARIZE=1 -s EXPORT_NAME="initModule" \ - -s EXTRA_EXPORTED_RUNTIME_METHODS="[allocateUTF8, writeAsciiToMemory]" \ + -s EXPORTED_RUNTIME_METHODS="[allocateUTF8, writeAsciiToMemory]" \ -s ASYNCIFY=1 -O3 \ -s EXIT_RUNTIME=1 -s ASSERTIONS=1 \ -I $PATH_VLC/include/ \ -- GitLab From 9e065eaf8e4ff6997cb104dd31e146528ba7a714 Mon Sep 17 00:00:00 2001 From: metehan-arslan <99metehanarslan@gmail.com> Date: Thu, 25 Aug 2022 20:37:15 +0300 Subject: [PATCH 2/5] add leading zero to seconds text --- lib/overlay.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/overlay.js b/lib/overlay.js index 8f51b8c..c350cf4 100644 --- a/lib/overlay.js +++ b/lib/overlay.js @@ -135,11 +135,11 @@ export function update_overlay(overlay) { let time = media_player.get_time(); let seconds = Math.trunc(time / 1000); let minutes = Math.trunc(seconds / 60); - seconds = seconds % 60; + seconds = ('00'+seconds % 60).slice(-2); let max_time = media_player.get_length(); let max_seconds = Math.trunc(max_time / 1000); let max_minutes = Math.trunc(max_seconds / 60); - max_seconds = max_seconds % 60; + max_seconds = ('00' + (max_seconds % 60)).slice(-2); ctx.textAlign = "right"; ctx.textBaseline = "middle"; -- GitLab From 7fb34334e259b64550a695edd088b7b585db2c47 Mon Sep 17 00:00:00 2001 From: metehan-arslan <99metehanarslan@gmail.com> Date: Thu, 25 Aug 2022 20:38:24 +0300 Subject: [PATCH 3/5] add favicon --- favicon.ico | Bin 0 -> 86358 bytes vlc.html | 1 + 2 files changed, 1 insertion(+) create mode 100644 favicon.ico diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a7d628836178517a887a92d8cf96b7d7e5af2d35 GIT binary patch literal 86358 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 literal 0 HcmV?d00001 diff --git a/vlc.html b/vlc.html index 4b00798..aa049c2 100644 --- a/vlc.html +++ b/vlc.html @@ -1,5 +1,6 @@ <!doctype html> <html lang="en-us"> +<link rel="vlc_favicon" href="favicon.ico"> <head> <meta charset="utf-8"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> -- GitLab From 5c34def85080bca8c2f6a0a017017130cafc42d3 Mon Sep 17 00:00:00 2001 From: metehan-arslan <99metehanarslan@gmail.com> Date: Fri, 26 Aug 2022 22:55:25 +0300 Subject: [PATCH 4/5] fix jitter in flac playback --- .../0078-fix-jitter-in-flac-playback.patch | 136 ++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 vlc_patches/aug/0078-fix-jitter-in-flac-playback.patch diff --git a/vlc_patches/aug/0078-fix-jitter-in-flac-playback.patch b/vlc_patches/aug/0078-fix-jitter-in-flac-playback.patch new file mode 100644 index 0000000..2a6255a --- /dev/null +++ b/vlc_patches/aug/0078-fix-jitter-in-flac-playback.patch @@ -0,0 +1,136 @@ +From 41b4a0210077f0e9c677b94823a5d7c070fb08ab Mon Sep 17 00:00:00 2001 +From: metehan-arslan <99metehanarslan@gmail.com> +Date: Fri, 26 Aug 2022 22:50:21 +0300 +Subject: [PATCH] fix jitter in flac playback + +--- + modules/audio_output/emscripten.cpp | 51 +++++++++++++++++++++-------- + 1 file changed, 37 insertions(+), 14 deletions(-) + +diff --git a/modules/audio_output/emscripten.cpp b/modules/audio_output/emscripten.cpp +index a7e9fb0d4d..de442e2b73 100644 +--- a/modules/audio_output/emscripten.cpp ++++ b/modules/audio_output/emscripten.cpp +@@ -40,8 +40,7 @@ + #define STORAGE_SIZE 1024 * 1024 + // Sample rate might change, and it would be good to be able to change it during playback. + #define AUDIO_WORKLET_SAMPLE_RATE 44100 +-// Don't know any way to get the browser's supported number of channels. +-#define AUDIO_WORKLET_NB_CHANNELS 2 ++ + + using namespace emscripten; + namespace { +@@ -70,11 +69,11 @@ namespace { + uintptr_t getSabPtr() const { return sab_ptr; }; + void setSabPtr(uintptr_t p_sab) { sab_ptr = p_sab; }; + +- int8_t channels; +- int8_t getChannels() const { return channels; }; ++ unsigned channels; ++ unsigned getChannels() const { return channels; }; + void setChannels(int8_t chan) { channels = chan; }; + +- AWNodeWrapper(int sample_rate) { ++ AWNodeWrapper(unsigned long sample_rate) { + // Prepare audio context options + val audio_ctx_options = val::object(); + audio_ctx_options.set("sampleRate", sample_rate); +@@ -146,7 +145,10 @@ namespace { + { + sound_buffer_t *sab; // TODO - rename to sound_buff + AWNodeWrapper *awn_inst; +- ++ ++ // let's see if it changes channels to 2 and samplerate to 44100; ++ unsigned i_channelCount = 0; ++ unsigned long i_sampleRate = 48000; + } aout_sys_t; + + EM_BOOL requestAnimationFrame_cb( double time, void *userData ) { +@@ -177,7 +179,7 @@ namespace { + void Flush( audio_output_t *aout ) + { + aout_sys_t * sys = reinterpret_cast<aout_sys_t *>(aout->sys); +- bzero(&sys->sab->storage, sizeof(sys->sab->storage)); ++ memset(&sys->sab->storage, 0, sizeof(sys->sab->storage)); + } + + int Start( audio_output_t *aout, audio_sample_format_t *restrict fmt ) +@@ -188,8 +190,8 @@ namespace { + if (( nbChannels == 0 ) || !AOUT_FMT_LINEAR(fmt)) + return VLC_EGENERIC; + fmt->i_format = VLC_CODEC_FL32; +- fmt->i_channels = AUDIO_WORKLET_NB_CHANNELS; +- fmt->i_rate = AUDIO_WORKLET_SAMPLE_RATE; ++ fmt->i_channels = sys->i_channelCount; ++ fmt->i_rate = sys->i_sampleRate; + + // resume audio context (first start, it is paused when initialized) + sys->sab->is_paused.store(1); +@@ -216,7 +218,7 @@ namespace { + + // Copy the part of the data at the buffer start + unsigned data_size_copy_start = data_size - data_size_copy_end; +- memcpy(sab_view + head, data, data_size_copy_start); ++ memcpy(sab_view + head, data + data_size_copy_end, data_size_copy_start); + head = data_size_copy_start; + } + else { +@@ -324,17 +326,38 @@ namespace { + aout->time_get = Time_Get; + aout->volume_set = Volume_Set; + aout->mute_set = Mute_Set; +- ++ ++ // Audio output is breaking when we implement i_sampleRate in here. + sys->awn_inst = new AWNodeWrapper(AUDIO_WORKLET_SAMPLE_RATE); + sys->sab = (sound_buffer_t*)malloc(sizeof(sound_buffer_t)); + + if ( unlikely(sys->sab == NULL) ) + return VLC_ENOMEM; +- bzero(sys->sab, sizeof(sound_buffer_t)); ++ memset(sys->sab, 0, sizeof(sound_buffer_t)); + sys->sab->volume = 100; + + val webaudio_context = sys->awn_inst->getCtx(); + ++ //These EM_ASM values needs to be re-written with Emval. (WiP) ++ EM_ASM( ++ let actx = new AudioContext(); ++ console.log("maxChannelCount: " + actx.destination.maxChannelCount); ++ ); ++ ++ sys->i_channelCount = EM_ASM_INT( ++ let actx = new AudioContext(); ++ console.log("channelCount: " + actx.destination.channelCount); ++ return actx.destination.maxChannelCount; ++ ); ++ msg_Info(aout, "i_channelCount: %d", sys->i_channelCount); ++ ++ sys->i_sampleRate = EM_ASM_INT( ++ let actx = new AudioContext(); ++ console.log("sampleRate: " + actx.destination.context.sampleRate ); ++ return actx.destination.context.sampleRate; ++ ); ++ msg_Info(aout, "i_sampleRate: %lu", sys->i_sampleRate); ++ + // Prepare audioWorkletProcessor blob + val document = val::global("document"); + val script = document.call<val>("createElement", std::string("SCRIPT")); +@@ -396,10 +419,10 @@ registerProcessor('worklet-processor', Processor);"; + val WorkletModuleUrl = val::global("URL").call<val>("createObjectURL", val::global("Blob").new_(ProcessorTextArray, BlobObject)); + + // Prepare audioWorkletProcessor callback +- val cb_caller = val::module_property("awn_cb_wrapper").new_(AUDIO_WORKLET_SAMPLE_RATE); ++ val cb_caller = val::module_property("awn_cb_wrapper").new_(sys->i_sampleRate); + cb_caller.set("context", val(webaudio_context)); + cb_caller.set("sab_ptr", val(reinterpret_cast<uintptr_t>(sys->sab))); +- cb_caller.set("channels", val(AUDIO_WORKLET_NB_CHANNELS)); ++ cb_caller.set("channels", val(sys->i_channelCount)); + val awn_caller = cb_caller["awn_call"]; + val awn_cb = awn_caller.call<val>("bind", cb_caller); + +-- +2.37.2 + -- GitLab From 7c1cb3ce7bcfacfde9e6d508651c4db757a728c2 Mon Sep 17 00:00:00 2001 From: Metehan Arslan <99metehanarslan@gmail.com> Date: Tue, 30 Aug 2022 17:48:25 +0000 Subject: [PATCH 5/5] play media after clicking the seekbar --- lib/overlay.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/overlay.js b/lib/overlay.js index c350cf4..b9e2b5d 100644 --- a/lib/overlay.js +++ b/lib/overlay.js @@ -210,6 +210,9 @@ export function on_overlay_click(overlay, mouse_event) { if (x > PROGRESS_BAR_X && x < PROGRESS_BAR_X + PROGRESS_BAR_WIDTH) { let progress = (x - PROGRESS_BAR_X) / PROGRESS_BAR_WIDTH; media_player.set_position(progress); + if (!media_player.is_playing()){ + media_player.toggle_play(); + } update_overlay(overlay); } -- GitLab