From f21922d970888f09cb6fb84a275f0d68db9674d6 Mon Sep 17 00:00:00 2001 From: Andrew Eikum Date: Tue, 28 Jul 2020 08:20:33 -0500 Subject: [PATCH] media-converter: Add media-converter gstreamer plugin --- build/makefile_base.mak | 32 +- dist.LICENSE | 110 +++ media-converter/Cargo.toml | 41 ++ media-converter/Makefile | 38 ++ media-converter/README | 12 + media-converter/blank.ogv | Bin 0 -> 353411 bytes media-converter/blank.ptna | Bin 0 -> 30 bytes media-converter/build.rs | 5 + media-converter/make_blank_ptna.c | 271 ++++++++ media-converter/src/audioconv.rs | 882 +++++++++++++++++++++++++ media-converter/src/audioconvbin.rs | 218 ++++++ media-converter/src/fossilize.rs | 427 ++++++++++++ media-converter/src/lib.rs | 161 +++++ media-converter/src/murmur3_x64_128.rs | 232 +++++++ media-converter/src/murmur3_x86_128.rs | 216 ++++++ media-converter/src/videoconv.rs | 709 ++++++++++++++++++++ proton | 18 + user_settings.sample.py | 5 + vagrant-user-setup.sh | 24 + 19 files changed, 3395 insertions(+), 6 deletions(-) create mode 100644 media-converter/Cargo.toml create mode 100644 media-converter/Makefile create mode 100644 media-converter/README create mode 100644 media-converter/blank.ogv create mode 100644 media-converter/blank.ptna create mode 100644 media-converter/build.rs create mode 100644 media-converter/make_blank_ptna.c create mode 100644 media-converter/src/audioconv.rs create mode 100644 media-converter/src/audioconvbin.rs create mode 100644 media-converter/src/fossilize.rs create mode 100644 media-converter/src/lib.rs create mode 100644 media-converter/src/murmur3_x64_128.rs create mode 100644 media-converter/src/murmur3_x86_128.rs create mode 100644 media-converter/src/videoconv.rs diff --git a/build/makefile_base.mak b/build/makefile_base.mak index 52d43aa2..f2637ad9 100644 --- a/build/makefile_base.mak +++ b/build/makefile_base.mak @@ -160,6 +160,7 @@ endif OPTIMIZE_FLAGS := -O2 -march=nocona $(call cc-option,$(CC),-mtune=core-avx2,) -mfpmath=sse SANITY_FLAGS := -fwrapv -fno-strict-aliasing COMMON_FLAGS := $(OPTIMIZE_FLAGS) $(SANITY_FLAGS) +CARGO_BUILD_ARG := --release # Use $(call QUOTE,$(VAR)) to flatten a list to a single element (for feeding to a shell) @@ -255,6 +256,10 @@ VKD3D := $(SRCDIR)/vkd3d-proton VKD3D_OBJ32 := ./obj-vkd3d32 VKD3D_OBJ64 := ./obj-vkd3d64 +MEDIACONV := $(SRCDIR)/media-converter +MEDIACONV_OBJ32 := ./obj-media-converter32 +MEDIACONV_OBJ64 := ./obj-media-converter64 + FONTS := $(SRCDIR)/fonts FONTS_OBJ := ./obj-fonts @@ -271,6 +276,7 @@ OBJ_DIRS := $(TOOLS_DIR32) $(TOOLS_DIR64) \ $(VRCLIENT_OBJ32) $(VRCLIENT_OBJ64) \ $(DXVK_OBJ32) $(DXVK_OBJ64) \ $(WINEWIDL_OBJ64) \ + $(MEDIACONV_OBJ32) $(MEDIACONV_OBJ64) \ $(VKD3D_OBJ32) $(VKD3D_OBJ64) $(OBJ_DIRS): @@ -425,7 +431,7 @@ $(DIST_FONTS): fonts ALL_TARGETS += dist GOAL_TARGETS += dist -dist: $(DIST_TARGETS) wine gst_good vrclient lsteamclient steam dxvk vkd3d-proton | $(DST_DIR) +dist: $(DIST_TARGETS) wine gst_good vrclient lsteamclient steam dxvk vkd3d-proton mediaconv | $(DST_DIR) echo `date '+%s'` `GIT_DIR=$(abspath $(SRCDIR)/.git) git describe --tags` > $(DIST_VERSION) cp $(DIST_VERSION) $(DST_BASE)/ rm -rf $(abspath $(DIST_PREFIX)) @@ -731,7 +737,6 @@ GST_GOOD_MESON_ARGS := \ -Dauparse=disabled \ -Dcairo=disabled \ -Dcutter=disabled \ - -Ddebugutils=disabled \ -Ddtmf=disabled \ -Deffectv=disabled \ -Dequalizer=disabled \ @@ -1069,12 +1074,11 @@ $(WINE_CONFIGURE_FILES64): $(MAKEFILE_DEP) | faudio64 gst_base64 $(WINE_OBJ64) --enable-win64 \ --disable-tests \ --prefix=$(abspath $(DST_DIR)) \ + LD_LIBRARY_PATH=$(abspath $(TOOLS_DIR64))/lib \ STRIP=$(STRIP_QUOTED) \ CFLAGS="-I$(abspath $(TOOLS_DIR64))/include -g $(COMMON_FLAGS)" \ - CXXFLAGS="-I$(abspath $(TOOLS_DIR64))/include -g $(COMMON_FLAGS) -std=c++17" \ LDFLAGS=-L$(abspath $(TOOLS_DIR64))/lib \ PKG_CONFIG_PATH=$(abspath $(TOOLS_DIR64))/lib/pkgconfig \ - LD_LIBRARY_PATH=$(abspath $(TOOLS_DIR64))/lib \ CC=$(CC_QUOTED) \ CXX=$(CXX_QUOTED) \ CROSSDEBUG=split-dwarf @@ -1087,12 +1091,11 @@ $(WINE_CONFIGURE_FILES32): $(MAKEFILE_DEP) | faudio32 gst_base32 $(WINE_OBJ32) --without-curses \ --disable-tests \ --prefix=$(abspath $(WINE_DST32)) \ + LD_LIBRARY_PATH=$(abspath $(TOOLS_DIR32))/lib \ STRIP=$(STRIP_QUOTED) \ CFLAGS="-I$(abspath $(TOOLS_DIR32))/include -g $(COMMON_FLAGS)" \ - CXXFLAGS="-I$(abspath $(TOOLS_DIR32))/include -g $(COMMON_FLAGS) -std=c++17" \ LDFLAGS=-L$(abspath $(TOOLS_DIR32))/lib \ PKG_CONFIG_PATH=$(abspath $(TOOLS_DIR32))/lib/pkgconfig \ - LD_LIBRARY_PATH=$(abspath $(TOOLS_DIR32))/lib \ CC=$(CC_QUOTED) \ CXX=$(CXX_QUOTED) \ PKG_CONFIG="$(PKG_CONFIG32)" \ @@ -1383,6 +1386,23 @@ vkd3d-proton: vkd3d32 vkd3d64 # build_vrclient64_tests # build_vrclient32_tests +mediaconv32: SHELL = $(CONTAINER_SHELL32) +mediaconv32: $(MAKEFILE_DEP) gstreamer32 | $(MEDIACONV_OBJ32) + cd $(abspath $(MEDIACONV)) && \ + PKG_CONFIG_ALLOW_CROSS=1 \ + PKG_CONFIG_PATH=$(abspath $(TOOLS_DIR32))/lib/pkgconfig \ + cargo build --target i686-unknown-linux-gnu --target-dir $(abspath $(MEDIACONV_OBJ32)) $(CARGO_BUILD_ARG) + cp -a $(abspath $(MEDIACONV_OBJ32))/i686-unknown-linux-gnu/release/libprotonmediaconverter.so $(abspath $(DST_DIR))/lib/gstreamer-1.0/ + +mediaconv64: SHELL = $(CONTAINER_SHELL64) +mediaconv64: $(MAKEFILE_DEP) gstreamer64 | $(MEDIACONV_OBJ64) + cd $(abspath $(MEDIACONV)) && \ + PKG_CONFIG_PATH=$(abspath $(TOOLS_DIR64))/lib/pkgconfig \ + cargo build --target x86_64-unknown-linux-gnu --target-dir $(abspath $(MEDIACONV_OBJ64)) $(CARGO_BUILD_ARG) + cp -a $(abspath $(MEDIACONV_OBJ64))/x86_64-unknown-linux-gnu/release/libprotonmediaconverter.so $(abspath $(DST_DIR))/lib64/gstreamer-1.0/ + +mediaconv: mediaconv32 mediaconv64 + ALL_TARGETS += fonts GOAL_TARGETS += fonts diff --git a/dist.LICENSE b/dist.LICENSE index 12b71f08..017bc505 100644 --- a/dist.LICENSE +++ b/dist.LICENSE @@ -243,6 +243,116 @@ Visit orc at ---- ---- ---- ---- +This software contains the following Rust libraries under the MIT license: + + gstreamer-rs + + array-init + Copyright (c) 2010 The Rust Project Developers + + autocfg + Copyright (c) 2018 Josh Stone + + bitflags + num-integer + num-rational + num-traits + Copyright (c) 2014 The Rust Project Developers + + cfg-if + pkg-config + proc-macro2 + toml + Copyright (c) 2014 Alex Crichton + + chrono + Copyright (c) 2014 Kang Seonghoon + + crc32fast + Copyright (c) 2018 Sam Rijs, Alex Crichton and contributors + + futures-channel + futures-core + futures-executor + futures-macro + futures-task + futures-util + Copyright (c) 2016 Alex Crichton + Copyright (c) 2017 The Tokio Authors + + glib + Copyright (c) 2013-2015 The Gtk-rs Project Developers + + heck + unicode-segmentation + unicode-xid + Copyright (c) 2015 The Rust Project Developers + + libc + Copyright (c) 2014-2020 The Rust Project Developers + + muldiv + Copyright (c) 2017 Sebastian Dröge + + murmur3 + Copyright (c) 2016 Stu Small + + pin-utils + Copyright (c) 2018 The pin-utils authors + + pretty-hex + Copyright (c) 2018 Andrei Volnin + + proc-macro-error + Copyright (c) 2019-2020 CreepySkeleton + + proc-macro-hack + Copyright (c) 2018 David Tolnay + + quote + Copyright (c) 2016 The Rust Project Developers + + slab + Copyright (c) 2019 Carl Lerche + + time + Copyright (c) 2019 Jacob Pratt + + version_check + Copyright (c) 2017-2018 Sergio Benitez + + anyhow + either + itertools + once_cell + paste + pin-project + proc-macro-crate + serde + syn + syn-mid + thiserror + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + +---- ---- ---- ---- + Parts of this software are based on the OpenVR SDK, which is Copyright (c) 2015, Valve Corporation diff --git a/media-converter/Cargo.toml b/media-converter/Cargo.toml new file mode 100644 index 00000000..8a379868 --- /dev/null +++ b/media-converter/Cargo.toml @@ -0,0 +1,41 @@ +[package] +name = "proton-media-converter" +version = "1.0.0" +authors = ["Andrew Eikum "] +repository = "https://github.com/ValveSoftware/Proton/" +license = "MIT/Apache-2.0" +edition = "2018" +description = "Proton media converter" + +[dependencies] +glib = "0.10.1" +gstreamer = { git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs", tag = "0.16.2" } +gstreamer-base = { git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs", tag = "0.16.2" } +gstreamer-video = { git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs", tag = "0.16.2" } +gstreamer-audio = { git = "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs", tag = "0.16.2" } +once_cell = "1.0" +crc32fast = "1.2" + +[lib] +name = "protonmediaconverter" +crate-type = ["cdylib"] +path = "src/lib.rs" + +[build-dependencies] +gst-plugin-version-helper = { git = "https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs", tag = "0.6.0" } + +[profile.release] +lto = true +opt-level = 3 +debug = false +panic = 'unwind' + +[profile.dev] +opt-level = 1 + +#if you need local modifications to gstreamer-rs you can point to it here +#[patch.'https://gitlab.freedesktop.org/gstreamer/gstreamer-rs'] +#gstreamer = { path = "../gstreamer-rs/gstreamer" } +#gstreamer-base = { path = "../gstreamer-rs/gstreamer-base" } +#gstreamer-video = { path = "../gstreamer-rs/gstreamer-video" } +#gstreamer-audio = { path = "../gstreamer-rs/gstreamer-audio" } diff --git a/media-converter/Makefile b/media-converter/Makefile new file mode 100644 index 00000000..e94f3fe2 --- /dev/null +++ b/media-converter/Makefile @@ -0,0 +1,38 @@ +SONAME := libprotonmediaconverter.so + +TRIPLE64 := x86_64-unknown-linux-gnu +TRIPLE32 := i686-unknown-linux-gnu + +DESTDIR ?= dist/ +DIST_GST_DIR64 := $(DESTDIR)/lib64/gstreamer-1.0/ +DIST_GST_DIR32 := $(DESTDIR)/lib/gstreamer-1.0/ + +ifeq ($(DEBUG),) + CARGO_RELEASE_ARG := --release + TARGET_BUILD_TYPE := release +else + CARGO_RELEASE_ARG := + TARGET_BUILD_TYPE := debug +endif + +all: install + +build: blank.ogv blank.ptna + cargo build --target $(TRIPLE64) $(CARGO_RELEASE_ARG) + PKG_CONFIG_ALLOW_CROSS=1 cargo build --target $(TRIPLE32) $(CARGO_RELEASE_ARG) + +install: build + install -d "$(DIST_GST_DIR64)" + install -m 755 target/$(TRIPLE64)/$(TARGET_BUILD_TYPE)/$(SONAME) "$(DIST_GST_DIR64)" + install -d "$(DIST_GST_DIR32)" + install -m 755 target/$(TRIPLE32)/$(TARGET_BUILD_TYPE)/$(SONAME) "$(DIST_GST_DIR32)" + +blank.ogv: + #120 frames @ 30 FPS == 4 seconds + gst-launch-1.0 videotestsrc num-buffers=120 pattern=smpte ! theoraenc ! oggmux ! filesink location=blank.ogv + +make_blank_ptna: make_blank_ptna.c + gcc -Wall -O2 $(shell pkg-config --cflags opus) -o $@ $< -lm $(shell pkg-config --libs opus) + +blank.ptna: make_blank_ptna + ./make_blank_ptna $@ diff --git a/media-converter/README b/media-converter/README new file mode 100644 index 00000000..b87a25fb --- /dev/null +++ b/media-converter/README @@ -0,0 +1,12 @@ +This module is a gstreamer plugin which provides the ability to replace media +data encoded in certain formats with media encoded in another format. There +are two main components, `videoconv` for converting video data provided to +Quartz and Media Foundation, and `audioconv` for converting audio data +provided to XAudio2. + +The broad idea is to hash the incoming data and replace it with data looked up +from a cache. If there is a cache miss, then the data is recorded to disk and +instead replaced by "blank" media. The conversion should be transparent to the +application (Wine, FAudio) so no changes are required to the application. + +See the accompanying source files for more information. diff --git a/media-converter/blank.ogv b/media-converter/blank.ogv new file mode 100644 index 0000000000000000000000000000000000000000..79aff93b1d05f93a02bf1cfe98728288a8dd5b1d GIT binary patch literal 353411 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 T4+XwPMGFgjllV~l?Z5vIQz~sh literal 0 HcmV?d00001 diff --git a/media-converter/blank.ptna b/media-converter/blank.ptna new file mode 100644 index 0000000000000000000000000000000000000000..44af13434c8a7951baab959f92972e633023492e GIT binary patch literal 30 hcmWe;U=Z*xC@uC#O-x~AWMF96%>V+-K>XqVKLB7y2WkKS literal 0 HcmV?d00001 diff --git a/media-converter/build.rs b/media-converter/build.rs new file mode 100644 index 00000000..0d1ddb61 --- /dev/null +++ b/media-converter/build.rs @@ -0,0 +1,5 @@ +extern crate gst_plugin_version_helper; + +fn main() { + gst_plugin_version_helper::get_info() +} diff --git a/media-converter/make_blank_ptna.c b/media-converter/make_blank_ptna.c new file mode 100644 index 00000000..ace3de7f --- /dev/null +++ b/media-converter/make_blank_ptna.c @@ -0,0 +1,271 @@ +/* + * Copyright (c) 2020, Valve Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its contributors + * may be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* Dumps a "blank" Proton Audio sample. For documentation of the Proton Audio + * format, see audioconv.rs. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define ARRAY_SIZE(x) (sizeof(x) / sizeof(*x)) + +/* indexes into frame_sizes[] */ +#define FRAME_2p5MS 0 +#define FRAME_SMALLEST FRAME_2p5MS +#define FRAME_5MS 1 +#define FRAME_10MS 2 +#define FRAME_20MS 3 +#define FRAME_40MS 4 +#define FRAME_60MS 5 +#define FRAME_LARGEST FRAME_60MS + +/* sample properties */ +static const int SAMPLERATE = 48000; +static const int CHANNELS = 1; +static const int SAMPLE_LENGTH = FRAME_10MS; /* must match value in audioconv.rs */ +static const float AUDIBLE_HZ = 400.f; /* freq for the --audible switch */ + +static const int frame_sizes[] = { + SAMPLERATE * 2.5 / 1000, + SAMPLERATE * 5 / 1000, + SAMPLERATE * 10 / 1000, + SAMPLERATE * 20 / 1000, + SAMPLERATE * 40 / 1000, + SAMPLERATE * 60 / 1000, +}; + +static float theta = 0.f; + +static const uint32_t FLAG_HEADER = 0x10000000; +static const uint32_t AUDIOCONV_PADDING_LENGTH_SHIFT = 12; + +static int complete_write(const int file, const void *buf, const size_t len) +{ + size_t written = 0; + ssize_t ret; + while(written < len){ + ret = write(file, ((const char *)buf) + written, len - written); + if(ret < 0){ + if(errno != EINTR && errno != EAGAIN) + return 0; + }else + written += ret; + } + return written == len; +} + +static int dump_hz(float hz, int samples, OpusEncoder *encoder, int outfile) +{ + int i = 0, j, c, frame_size, tot = 0, padding; + opus_int32 written; + uint32_t pkt_header; + float val, *vals; + unsigned char packet[4000 /* suggested by opus_encoder(3) */ ]; + + fprintf(stdout, "dumping %u samples at %f hz\n", samples, hz); + + vals = malloc(sizeof(float) * CHANNELS * frame_sizes[FRAME_LARGEST]); + + while(i < samples){ + + /* find the largest packet we can write with the samples remaining */ + frame_size = -1; + for(j = ARRAY_SIZE(frame_sizes) - 1; j >= 0; --j){ + if(samples - i >= frame_sizes[j]){ + frame_size = frame_sizes[j]; + break; + } + } + + if(frame_size < 0){ + /* couldn't fill a whole packet, so write a partial */ + frame_size = frame_sizes[FRAME_SMALLEST]; + padding = frame_size - (samples - i); + }else + padding = 0; + + for(j = 0; j < frame_size - padding; ++j){ + val = sinf(theta); + for(c = 0; c < CHANNELS; ++c) + vals[j * CHANNELS + c] = val; + theta += hz * 2.f * M_PI / (float)SAMPLERATE; + while(theta >= 2.f * M_PI) + theta -= 2.f * M_PI; + } + + if(padding) + memset(vals + (frame_size - padding) * CHANNELS, 0, sizeof(float) * padding * CHANNELS); + + written = opus_encode_float(encoder, vals, frame_size, packet, sizeof(packet)); + if(written < 0){ + fprintf(stderr, "fatal: opus_encode failed!!!\n"); + free(vals); + return 0; + } + + pkt_header = written | (padding << AUDIOCONV_PADDING_LENGTH_SHIFT); + + fprintf(stdout, "encoded %u samples (%u are padding) to %u bytes\n", frame_size, padding, written); + if(!complete_write(outfile, &pkt_header, sizeof(pkt_header))){ + fprintf(stderr, "fatal: error writing packet header!!!\n"); + free(vals); + return 0; + } + if(!complete_write(outfile, packet, written)){ + fprintf(stderr, "fatal: error writing packet contents!!!\n"); + free(vals); + return 0; + } + tot += written + sizeof(written); + + i += frame_size; + } + + fprintf(stdout, "done dumping, %u bytes\n", tot); + + free(vals); + + return 1; +} + +/* OGG's opus header (from RFC 7845 Section 5.1) */ +struct __attribute__((__packed__)) opus_header { + uint64_t magic; + uint8_t version; + uint8_t channels; + uint16_t preskip; + uint32_t input_samplerate; + uint16_t output_gain; + uint8_t mapping_family; +}; + +static int dump_header(int outfile) +{ + struct opus_header header; + uint32_t sz = sizeof(header) | FLAG_HEADER; + + static const char magic[] = "OpusHead"; + + memcpy(&header.magic, magic, sizeof(magic)); + header.version = 1; + header.channels = CHANNELS; + header.preskip = 0; + header.input_samplerate = SAMPLERATE; + header.output_gain = 0; + header.mapping_family = 0; /* FIXME: we need to support mc */ + + if(!complete_write(outfile, &sz, sizeof(sz))){ + fprintf(stderr, "fatal: error writing opus header header!!!\n"); + return 0; + } + + if(!complete_write(outfile, &header, sizeof(header))){ + fprintf(stderr, "fatal: error writing opus header!!!\n"); + return 0; + } + + return 1; +} + +void usage(const char *name) +{ + fprintf(stderr, "usage:\n"); + fprintf(stderr, "\t%s [--help|-h] [--audible] \n", name); + fprintf(stderr, "\n"); + fprintf(stderr, "\t--audible\tGenerate an audible sound clip instead of silence.\n"); + fprintf(stderr, "\t--help -h\tPrint this help message.\n\n"); +} + +int main(int argc, char **argv) +{ + int err, outfile, i, audible = 0; + OpusEncoder *encoder; + const char *outfile_name = NULL; + + for(i = 1; i < argc; ++i){ + if(!strcmp(argv[i], "--help") || !strcmp(argv[i], "-h")){ + usage(argv[0]); + return 0; + }else if(!strcmp(argv[i], "--audible")){ + audible = 1; + }else if(outfile_name){ + fprintf(stderr, "error: too many arguments.\n\n"); + usage(argv[0]); + return 1; + }else{ + outfile_name = argv[i]; + } + } + + if(!outfile_name){ + fprintf(stderr, "error: missing filename.\n\n"); + usage(argv[0]); + return 1; + } + + encoder = opus_encoder_create(SAMPLERATE, CHANNELS, OPUS_APPLICATION_AUDIO, &err); + if(!encoder){ + fprintf(stderr, "couldn't create opus encoder, err: 0x%x\n", err); + return 1; + } + + outfile = open(outfile_name, O_CREAT | O_WRONLY | O_TRUNC, 0644); + if(outfile < 0){ + fprintf(stderr, "couldn't open file \"%s\": %s\n", outfile_name, strerror(errno)); + opus_encoder_destroy(encoder); + return 1; + } + + if(!dump_header(outfile)){ + close(outfile); + unlink(outfile_name); + opus_encoder_destroy(encoder); + return 1; + } + + if(!dump_hz(audible ? AUDIBLE_HZ : 0.f, frame_sizes[SAMPLE_LENGTH], encoder, outfile)){ + close(outfile); + unlink(outfile_name); + opus_encoder_destroy(encoder); + return 1; + } + + close(outfile); + opus_encoder_destroy(encoder); + + return 0; +} diff --git a/media-converter/src/audioconv.rs b/media-converter/src/audioconv.rs new file mode 100644 index 00000000..e845eb2b --- /dev/null +++ b/media-converter/src/audioconv.rs @@ -0,0 +1,882 @@ +/* + * Copyright (c) 2020 Valve Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its contributors + * may be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +use glib; +use glib::subclass; +use glib::subclass::prelude::*; + +use crate::format_hash; +use crate::HASH_SEED; + +use gst; +use gst::prelude::*; +use gst::subclass::prelude::*; +use gst::EventView; +use gst::QueryView; +use gst_audio; + +use std::sync::Mutex; +use std::io; +use std::io::Read; +use std::fs; +use std::fs::OpenOptions; + +#[cfg(target_arch = "x86")] +use crate::murmur3_x86_128::murmur3_x86_128_full as murmur3_128_full; +#[cfg(target_arch = "x86")] +use crate::murmur3_x86_128::murmur3_x86_128_state as murmur3_128_state; + +#[cfg(target_arch = "x86_64")] +use crate::murmur3_x64_128::murmur3_x64_128_full as murmur3_128_full; +#[cfg(target_arch = "x86_64")] +use crate::murmur3_x64_128::murmur3_x64_128_state as murmur3_128_state; + +use crate::fossilize; +use crate::copy_into_array; +use crate::BufferedReader; + +use once_cell::sync::Lazy; + +/* Algorithm + * --------- + * + * The application feeds encoded audio into XAudio2 in chunks. Since we don't have access to all + * chunks in a stream on initialization (as we do with the video converter), we continuously hash + * the stream as it is sent to us. Each "chunk" is identified as the hash of the entire stream up + * to that chunk. + * + * Since chunks are small (~2 kilobytes), this leads to a significant possibility of two different + * streams having identical intro chunks (imagine two streams that start with several seconds of + * silence). This means we need a tree of chunks. Suppose two incoming streams with chunks that + * hash as shown (i.e. identical intro chunks that diverge later): + * + * Stream 1: [AA BB CC DD] + * + * Stream 2: [AA BB YY ZZ] + * + * We record a tree and the transcoder will walk it depth-first in order to reconstruct each unique + * stream: + * + * AA => aa.ptna + * AA+BB => bb.ptna + * AA+BB+CC => cc.ptna + * AA+BB+CC+DD => dd.ptna + * AA+BB+YY => yy.ptna + * AA+BB+YY+ZZ => zz.ptna + * + * Upon playback, we chain each transcoded stream chunk together as the packets come in: + * + * AA -> start stream with aa.ptna + * BB -> play bb.ptna + * CC -> play cc.ptna + * DD -> play dd.ptna + * + * or: + * + * AA -> start stream with aa.ptna + * BB -> play bb.ptna + * YY -> play yy.ptna + * ZZ -> play zz.ptna + * + * or: + * + * AA -> start stream with aa.ptna + * NN -> not recognized, instead play blank.ptna and mark this stream as needs-transcoding + * OO -> play blank.ptna + * PP -> play blank.ptna + * When the Stream is destroyed, we'll record AA+NN+OO+PP into the needs-transcode database + * for the transcoder to convert later. + * + * + * Physical Format + * --------------- + * + * All stored values are little-endian. + * + * Transcoded audio is stored in the "transcoded" Fossilize database under the + * AUDIOCONV_FOZ_TAG_PTNADATA tag. Each chunk is stored in one entry with as many of the following + * "Proton Audio" (ptna) packets as are required to store the entire transcoded chunk: + * + * uint32_t packet_header: Information about the upcoming packet, see bitmask: + * MSB [FFFF PPPP PPPP PPPP PPPP LLLL LLLL LLLL] LSB + * L: Number of _bytes_ in this packet following this header. + * P: Number of _samples_ at the end of this packet which are padding and should be skipped. + * F: Flag bits: + * 0x1: This packet is an Opus header + * 0x2, 0x4, 0x8: Reserved for future use. + * + * If the Opus header flag is set: + * Following packet is an Opus identification header, as defined in RFC 7845 "Ogg + * Encapsulation for the Opus Audio Codec" Section 5.1. + * + * + * If the header flag is not set: + * Following packet is raw Opus data to be sent to an Opus decoder. + * + * + * If we encounter a stream which needs transcoding, we record the buffers and metadata in + * a Fossilize database. The database has three tag types: + * + * AUDIOCONV_FOZ_TAG_STREAM: This identifies each unique stream of buffers. For example: + * [hash(AA+BB+CC+DD)] -> [AA, BB, CC, DD] + * [hash(AA+BB+XX+YY)] -> [AA, BB, XX, YY] + * + * AUDIOCONV_FOZ_TAG_AUDIODATA: This contans the actual encoded audio data. For example: + * [AA] -> [AA's buffer data] + * [BB] -> [BB's buffer data] + * + * AUDIOCONV_FOZ_TAG_CODECINFO: This contans the codec data required to decode the buffer. Only + * the "head" of each stream is recorded. For example: + * [AA] -> [ + * uint32_t wmaversion (from WAVEFORMATEX.wFormatTag) + * uint32_t bitrate (from WAVEFORMATEX.nAvgBytesPerSec) + * uint32_t channels (WAVEFORMATEX.nChannels) + * uint32_t rate (WAVEFORMATEX.nSamplesPerSec) + * uint32_t block_align (WAVEFORMATEX.nBlockAlign) + * uint32_t depth (WAVEFORMATEX.wBitsPerSample) + * char[remainder of entry] codec_data (codec data which follows WAVEFORMATEX) + * ] + * + */ + +const AUDIOCONV_ENCODED_LENGTH_MASK: u32 = 0x00000fff; /* 4kB fits in here */ +const AUDIOCONV_PADDING_LENGTH_MASK: u32 = 0x0ffff000; /* 120ms of samples at 48kHz fits in here */ +const AUDIOCONV_PADDING_LENGTH_SHIFT: u32 = 12; +const AUDIOCONV_FLAG_MASK: u32 = 0xf0000000; +const AUDIOCONV_FLAG_HEADER: u32 = 0x10000000; /* this chunk is the Opus header */ +const _AUDIOCONV_FLAG_RESERVED1: u32 = 0x20000000; /* not yet used */ +const _AUDIOCONV_FLAG_RESERVED2: u32 = 0x40000000; /* not yet used */ +const _AUDIOCONV_FLAG_V2: u32 = 0x80000000; /* indicates a "version 2" header, process somehow differently (TBD) */ + +/* properties of the "blank" audio file */ +const BLANK_AUDIO_FILE_LENGTH_MS: f32 = 10.0; +const BLANK_AUDIO_FILE_RATE: f32 = 48000.0; + +static CAT: Lazy = Lazy::new(|| { + gst::DebugCategory::new( + "protonaudioconverter", + gst::DebugColorFlags::empty(), + Some("Proton audio converter")) +}); + +static DUMP_FOZDB: Lazy>> = Lazy::new(|| { + let dump_file_path = match std::env::var("MEDIACONV_AUDIO_DUMP_FILE") { + Err(_) => { return Mutex::new(None); }, + Ok(c) => c, + }; + + let dump_file_path = std::path::Path::new(&dump_file_path); + + if fs::create_dir_all(&dump_file_path.parent().unwrap()).is_err() { + return Mutex::new(None); + } + + match fossilize::StreamArchive::new(&dump_file_path, OpenOptions::new().write(true).read(true).create(true), AUDIOCONV_FOZ_NUM_TAGS) { + Ok(newdb) => Mutex::new(Some(newdb)), + Err(_) => Mutex::new(None), + } +}); + +#[derive(Clone)] +struct NeedTranscodeHead { + wmaversion: i32, + bitrate: i32, + channels: i32, + rate: i32, + block_align: i32, + depth: i32, + codec_data: Vec +} + +impl NeedTranscodeHead { + fn new_from_caps(caps: &gst::CapsRef) -> Result { + let s = caps.get_structure(0).ok_or(gst_loggable_error!(CAT, "Caps have no WMA data!"))?; + + let wmaversion = s.get_some::("wmaversion").map_err(|_| gst_loggable_error!(CAT, "Caps have no wmaversion field"))?; + let bitrate = s.get_some::("bitrate").map_err(|_| gst_loggable_error!(CAT, "Caps have no bitrate field"))?; + let channels = s.get_some::("channels").map_err(|_| gst_loggable_error!(CAT, "Caps have no channels field"))?; + let rate = s.get_some::("rate").map_err(|_| gst_loggable_error!(CAT, "Caps have no rate field"))?; + let block_align = s.get_some::("block_align").map_err(|_| gst_loggable_error!(CAT, "Caps have no block_align field"))?; + let depth = s.get_some::("depth").map_err(|_| gst_loggable_error!(CAT, "Caps have no depth field"))?; + let codec_data_buf = s.get::("codec_data") + .map_err(|_| gst_loggable_error!(CAT, "Caps have no codec_data field"))? + .ok_or(gst_loggable_error!(CAT, "Caps have NULL codec_data field"))?; + + let mapped = codec_data_buf.into_mapped_buffer_readable().unwrap(); + let mut codec_data = Vec::new(); + codec_data.extend_from_slice(mapped.as_slice()); + + Ok(NeedTranscodeHead { + wmaversion, + bitrate, + channels, + rate, + block_align, + depth, + codec_data, + }) + } + + fn serialize(&self) -> Vec { + let mut ret = Vec::new(); + ret.extend_from_slice(&self.wmaversion.to_le_bytes()); + ret.extend_from_slice(&self.bitrate.to_le_bytes()); + ret.extend_from_slice(&self.channels.to_le_bytes()); + ret.extend_from_slice(&self.rate.to_le_bytes()); + ret.extend_from_slice(&self.block_align.to_le_bytes()); + ret.extend_from_slice(&self.depth.to_le_bytes()); + ret.extend(self.codec_data.iter()); + ret + } +} + +const AUDIOCONV_FOZ_TAG_STREAM: u32 = 0; +const AUDIOCONV_FOZ_TAG_CODECINFO: u32 = 1; +const AUDIOCONV_FOZ_TAG_AUDIODATA: u32 = 2; +const AUDIOCONV_FOZ_TAG_PTNADATA: u32 = 3; +const AUDIOCONV_FOZ_NUM_TAGS: usize = 4; + +/* represents a Stream, a sequence of buffers */ +struct StreamState { + hash_state: murmur3_128_state, + cur_hash: u128, + buffers: Vec<(u128, gst::MappedBuffer)>, + loop_buffers: Vec<(u128, gst::MappedBuffer)>, + codec_info: Option, + needs_dump: bool, +} + +enum LoopState { + NoLoop, + Looping, + LoopEnded, +} + +impl StreamState { + fn new() -> Self { + Self { + hash_state: murmur3_128_state::new(HASH_SEED), + buffers: Vec::<(u128, gst::MappedBuffer)>::new(), + loop_buffers: Vec::<(u128, gst::MappedBuffer)>::new(), + cur_hash: 0, + codec_info: None, + needs_dump: false, + } + } + + fn record_buffer(&mut self, buf_hash: u128, loop_hash: u128, buffer: gst::MappedBuffer, codec_info: Option<&NeedTranscodeHead>) -> io::Result { + if self.codec_info.is_none() { + if let Some(codec_info) = codec_info { + self.codec_info = Some(codec_info.clone()); + } + } + + if self.loop_buffers.len() < self.buffers.len() && + self.buffers[self.loop_buffers.len()].0 == loop_hash { + + self.loop_buffers.push((buf_hash /* not loop_hash! */, buffer)); + + if self.loop_buffers.len() == self.buffers.len() { + /* full loop, just drop them */ + self.loop_buffers.clear(); + return Ok(LoopState::LoopEnded); + } + + Ok(LoopState::Looping) + }else{ + if self.loop_buffers.len() > 0 { + /* partial loop, track them and then continue */ + self.buffers.append(&mut self.loop_buffers); + } + + self.buffers.push((buf_hash, buffer)); + + self.cur_hash = murmur3_128_full(&mut (&buf_hash.to_le_bytes() as &[u8]), &mut self.hash_state)?; + Ok(LoopState::NoLoop) + } + } + + fn write_to_foz(&self) -> Result<(), gst::LoggableError> { + if self.needs_dump && self.buffers.len() > 0 { + let mut db = (*DUMP_FOZDB).lock().unwrap(); + let db = match &mut *db { + Some(d) => d, + None => { return Err(gst_loggable_error!(CAT, "Failed to open fossilize db!")) }, + }; + + let mut found = db.has_entry(AUDIOCONV_FOZ_TAG_STREAM, self.cur_hash); + + if !found { + /* are there any recorded streams of which this stream is a subset? */ + let stream_ids = db.iter_tag(AUDIOCONV_FOZ_TAG_STREAM).cloned().collect::>(); + + found = stream_ids.iter().find(|stream_id| { + let mut offs = 0; + + for cur_buf_id in self.buffers.iter() { + let mut buf = [0u8; 16]; + + let res = db.read_entry(AUDIOCONV_FOZ_TAG_STREAM, **stream_id, offs, &mut buf, fossilize::CRCCheck::WithCRC); + + let buffer_id = match res { + Err(_) => { return false; } + Ok(s) => { + if s != std::mem::size_of::() { + return false; + } + u128::from_le_bytes(buf) + } + }; + + if buffer_id != (*cur_buf_id).0 { + return false; + } + + offs += 16; + } + + gst_trace!(CAT, "stream id {} is a subset of {}, so not recording stream", self.cur_hash, **stream_id); + return true; + }).is_some(); + } + + if !found { + gst_trace!(CAT, "recording stream id {}", self.cur_hash); + db.write_entry(AUDIOCONV_FOZ_TAG_CODECINFO, + self.buffers[0].0, + &mut self.codec_info.as_ref().unwrap().serialize().as_slice(), + fossilize::CRCCheck::WithCRC) + .map_err(|e| gst_loggable_error!(CAT, "Unable to write stream header: {:?}", e))?; + + db.write_entry(AUDIOCONV_FOZ_TAG_STREAM, + self.cur_hash, + &mut StreamStateSerializer::new(self), + fossilize::CRCCheck::WithCRC) + .map_err(|e| gst_loggable_error!(CAT, "Unable to write stream: {:?}", e))?; + + for buffer in self.buffers.iter() { + db.write_entry(AUDIOCONV_FOZ_TAG_AUDIODATA, + buffer.0, + &mut buffer.1.as_slice(), + fossilize::CRCCheck::WithCRC) + .map_err(|e| gst_loggable_error!(CAT, "Unable to write audio data: {:?}", e))?; + } + } + } + Ok(()) + } + + fn reset(&mut self) { + self.hash_state.reset(); + self.buffers.clear(); + self.loop_buffers.clear(); + self.cur_hash = 0; + self.codec_info = None; + self.needs_dump = false; + } +} + +struct StreamStateSerializer<'a> { + stream_state: &'a StreamState, + cur_idx: usize, +} + +impl<'a> StreamStateSerializer<'a> { + fn new(stream_state: &'a StreamState) -> Self { + StreamStateSerializer { + stream_state, + cur_idx: 0 + } + } +} + +impl<'a> Read for StreamStateSerializer<'a> { + fn read(&mut self, out: &mut [u8]) -> io::Result { + if self.cur_idx >= self.stream_state.buffers.len() { + return Ok(0); + } + + out[0..std::mem::size_of::()].copy_from_slice(&self.stream_state.buffers[self.cur_idx].0.to_le_bytes()); + self.cur_idx += 1; + + Ok(std::mem::size_of::()) + } +} + +fn hash_data(dat: &[u8], len: usize, hash_state: &mut murmur3_128_state) -> io::Result { + murmur3_128_full(&mut BufferedReader::new(dat, len), hash_state) +} + +struct AudioConvState { + sent_header: bool, + + codec_data: Option, + + hash_state: murmur3_128_state, + loop_hash_state: murmur3_128_state, + + stream_state: StreamState, + + read_fozdb: Option, +} + +impl AudioConvState { + fn new() -> Result { + + let read_fozdb_path = std::env::var("MEDIACONV_AUDIO_TRANSCODED_FILE").map_err(|_| { + gst_loggable_error!(CAT, "MEDIACONV_AUDIO_TRANSCODED_FILE is not set!") + })?; + + let read_fozdb = match fossilize::StreamArchive::new(&read_fozdb_path, OpenOptions::new().read(true), AUDIOCONV_FOZ_NUM_TAGS) { + Ok(s) => Some(s), + Err(_) => None, + }; + + Ok(AudioConvState { + sent_header: false, + + codec_data: None, + + hash_state: murmur3_128_state::new(HASH_SEED), + loop_hash_state: murmur3_128_state::new(HASH_SEED), + + stream_state: StreamState::new(), + + read_fozdb, + }) + } + + fn reset(&mut self) { + if let Err(e) = self.stream_state.write_to_foz() { + e.log(); + } + + self.stream_state.reset(); + + self.hash_state.reset(); + self.loop_hash_state.reset(); + } + + fn open_transcode_file(&mut self, buffer: gst::Buffer) -> io::Result<(Box<[u8]>, f32)> { + let mapped = buffer.into_mapped_buffer_readable().unwrap(); + let buf_len = mapped.get_size(); + + let hash = hash_data(mapped.as_slice(), buf_len, &mut self.hash_state) + .map_err(|e|{ gst_warning!(CAT, "Hashing buffer failed! {}", e); io::ErrorKind::Other })?; + let loop_hash = hash_data(mapped.as_slice(), buf_len, &mut self.loop_hash_state) + .map_err(|e|{ gst_warning!(CAT, "Hashing buffer failed! {}", e); io::ErrorKind::Other })?; + + let try_loop = match self.stream_state.record_buffer(hash, loop_hash, mapped, Some(self.codec_data.as_ref().unwrap()))? { + LoopState::NoLoop => { self.loop_hash_state.reset(); false }, + LoopState::Looping => { true }, + LoopState::LoopEnded => { self.loop_hash_state.reset(); true }, + }; + + if try_loop { + gst_log!(CAT, "Buffer hash: {} (loop: {})", format_hash(hash), format_hash(loop_hash)); + }else{ + gst_log!(CAT, "Buffer hash: {}", format_hash(hash)); + } + + /* try to read transcoded data */ + if let Some(read_fozdb) = &mut self.read_fozdb { + if let Ok(transcoded_size) = read_fozdb.entry_size(AUDIOCONV_FOZ_TAG_PTNADATA, hash) { + /* success */ + let mut buf = vec![0u8; transcoded_size].into_boxed_slice(); + if let Ok(_) = read_fozdb.read_entry(AUDIOCONV_FOZ_TAG_PTNADATA, hash, 0, &mut buf, fossilize::CRCCheck::WithoutCRC) { + return Ok((buf, 0.0)); + } + } + if try_loop { + if let Ok(transcoded_size) = read_fozdb.entry_size(AUDIOCONV_FOZ_TAG_PTNADATA, loop_hash) { + /* success */ + let mut buf = vec![0u8; transcoded_size].into_boxed_slice(); + if let Ok(_) = read_fozdb.read_entry(AUDIOCONV_FOZ_TAG_PTNADATA, loop_hash, 0, &mut buf, fossilize::CRCCheck::WithoutCRC) { + return Ok((buf, 0.0)); + } + } + } + } + + /* if we can't, return the blank file */ + self.stream_state.needs_dump = true; + + let buf = Box::new(include_bytes!("../blank.ptna").clone()); + + /* calculate average expected length of this buffer */ + let codec_data = self.codec_data.as_ref().unwrap(); + + let mut repeat_count = if codec_data.bitrate > 0 { + let buffer_time_ms = (buf_len * 8 /* to bits */ * 1000 /* to ms */) as f32 + / (codec_data.bitrate as f32); + + /* repeat the known-length blank file enough times to fill the expected length */ + buffer_time_ms / BLANK_AUDIO_FILE_LENGTH_MS + } else { + /* invalid bitrate, so just play the file once */ + 0.0 + }; + + /* scale to output rate */ + repeat_count *= codec_data.rate as f32 / BLANK_AUDIO_FILE_RATE; + + Ok((buf, repeat_count)) + } +} + +struct AudioConv { + state: Mutex>, + sinkpad: gst::Pad, + srcpad: gst::Pad, +} + +impl ObjectSubclass for AudioConv { + const NAME: &'static str = "ProtonAudioConverter"; + type ParentType = gst::Element; + type Instance = gst::subclass::ElementInstanceStruct; + type Class = subclass::simple::ClassStruct; + + glib_object_subclass!(); + + fn with_class(klass: &subclass::simple::ClassStruct) -> Self { + let templ = klass.get_pad_template("sink").unwrap(); + let sinkpad = gst::Pad::builder_with_template(&templ, Some("sink")) + .chain_function(|pad, parent, buffer| { + AudioConv::catch_panic_pad_function( + parent, + || Err(gst::FlowError::Error), + |audioconv, element| audioconv.chain(pad, element, buffer) + ) + }) + .event_function(|pad, parent, event| { + AudioConv::catch_panic_pad_function( + parent, + || false, + |audioconv, element| audioconv.sink_event(pad, element, event) + ) + }).build(); + + let templ = klass.get_pad_template("src").unwrap(); + let srcpad = gst::Pad::builder_with_template(&templ, Some("src")) + .query_function(|pad, parent, query| { + AudioConv::catch_panic_pad_function( + parent, + || false, + |audioconv, element| audioconv.src_query(pad, element, query) + ) + }) + .activatemode_function(|pad, parent, mode, active| { + AudioConv::catch_panic_pad_function( + parent, + || Err(gst_loggable_error!(CAT, "Panic activating srcpad with mode")), + |audioconv, element| audioconv.src_activatemode(pad, element, mode, active) + ) + }).build(); + + AudioConv { + state: Mutex::new(None), + sinkpad, + srcpad, + } + } + + fn class_init(klass: &mut subclass::simple::ClassStruct) { + + klass.set_metadata( + "Proton audio converter", + "Codec/Parser", + "Converts audio for Proton", + "Andrew Eikum "); + + let mut caps = gst::Caps::new_empty(); + { + let caps = caps.get_mut().unwrap(); + caps.append(gst::Caps::builder("audio/x-wma").build()); + } + let sink_pad_template = gst::PadTemplate::new( + "sink", + gst::PadDirection::Sink, + gst::PadPresence::Always, + &caps).unwrap(); + klass.add_pad_template(sink_pad_template); + + let caps = gst::Caps::builder("audio/x-opus").build(); + let src_pad_template = gst::PadTemplate::new( + "src", + gst::PadDirection::Src, + gst::PadPresence::Always, + &caps).unwrap(); + klass.add_pad_template(src_pad_template); + } +} + +impl ObjectImpl for AudioConv { + glib_object_impl!(); + + fn constructed(&self, obj: &glib::Object) { + self.parent_constructed(obj); + + let element = obj.downcast_ref::().unwrap(); + element.add_pad(&self.sinkpad).unwrap(); + element.add_pad(&self.srcpad).unwrap(); + } +} + +impl ElementImpl for AudioConv { + fn change_state( + &self, + element: &gst::Element, + transition: gst::StateChange + ) -> Result { + + gst_log!(CAT, obj: element, "State transition: {:?}", transition); + + match transition { + gst::StateChange::NullToReady => { + /* do runtime setup */ + + { + /* open fozdb here; this is the right place to fail and opening may be + * expensive */ + let db = (*DUMP_FOZDB).lock().unwrap(); + if (*db).is_none() { + gst_error!(CAT, "Failed to open fossilize db!"); + return Err(gst::StateChangeError); + } + } + + let new_state = AudioConvState::new().map_err(|err| { + err.log(); + return gst::StateChangeError; + })?; + + let mut state = self.state.lock().unwrap(); + assert!((*state).is_none()); + *state = Some(new_state); + }, + + gst::StateChange::ReadyToNull => { + /* do runtime teardown */ + + let old_state = self.state.lock().unwrap().take(); // dispose of state + if let Some(old_state) = old_state { + if old_state.stream_state.write_to_foz().is_err() { + gst_warning!(CAT, "Error writing out stream data!"); + } + } + }, + + _ => (), + }; + + self.parent_change_state(element, transition) + + /* XXX on ReadyToNull, sodium drops state _again_ here... why? */ + } +} + +impl AudioConv { + + fn chain( + &self, + _pad: &gst::Pad, + _element: &gst::Element, + buffer: gst::Buffer + ) -> Result { + gst_log!(CAT, "Handling buffer {:?}", buffer); + + let mut state = self.state.lock().unwrap(); + let mut state = match &mut *state { + Some(s) => s, + None => { return Err(gst::FlowError::Error); }, + }; + + let (ptnadata, mut repeat_count) = state.open_transcode_file(buffer).map_err(|_| { + gst_error!(CAT, "ERROR! Failed to read transcoded audio! Things will go badly..."); gst::FlowError::Error + })?; + + let mut offs: usize = 0; + loop { + + if offs >= ptnadata.len() { + if repeat_count > 0.0 { + /* TODO: we're sending the whole partial packet. we could set padding instead */ + repeat_count -= 1.0; + offs = 0; + continue; + } else { + break; + } + } + + if offs + 4 >= ptnadata.len() { + gst_warning!(CAT, "Short read on ptna header?"); + break; + } + + let packet_hdr = u32::from_le_bytes(copy_into_array(&ptnadata[offs..offs + 4])); + offs += 4; + + let (flags, padding_len, encoded_len) = + ((packet_hdr & AUDIOCONV_FLAG_MASK), + (packet_hdr & AUDIOCONV_PADDING_LENGTH_MASK) >> AUDIOCONV_PADDING_LENGTH_SHIFT, + (packet_hdr & AUDIOCONV_ENCODED_LENGTH_MASK) as usize); + + if offs + encoded_len > ptnadata.len() { + gst_warning!(CAT, "Short read on ptna data?"); + break; + } + + let pkt_is_header = (flags & AUDIOCONV_FLAG_HEADER) != 0; + + if pkt_is_header && state.sent_header { + /* only send one header */ + offs += encoded_len; + continue; + } + + /* TODO: can we use a gstbuffer cache here? */ + let mut buffer = gst::Buffer::with_size(encoded_len as usize).unwrap(); + + if !pkt_is_header && padding_len > 0 { + gst_audio::AudioClippingMeta::add(buffer.get_mut().unwrap(), gst::format::Default(Some(0)), gst::format::Default(Some(padding_len as u64))); + } + + let mut writable = buffer.into_mapped_buffer_writable().unwrap(); + + writable.as_mut_slice().copy_from_slice(&ptnadata[offs..offs + encoded_len]); + + gst_log!(CAT, "pushing one packet of len {}", encoded_len); + self.srcpad.push(writable.into_buffer())?; + + if pkt_is_header { + state.sent_header = true; + } + + offs += encoded_len; + } + + Ok(gst::FlowSuccess::Ok) + } + + fn sink_event( + &self, + pad: &gst::Pad, + element: &gst::Element, + event: gst::Event + ) -> bool { + gst_log!(CAT, obj:pad, "Got an event {:?}", event); + match event.view() { + EventView::Caps(event_caps) => { + + let mut state = self.state.lock().unwrap(); + if let Some(state) = &mut *state { + let head = match NeedTranscodeHead::new_from_caps(&event_caps.get_caps()){ + Ok(h) => h, + Err(e) => { + gst_error!(CAT, "Invalid WMA caps!"); + e.log(); + return false; + }, + }; + state.codec_data = Some(head); + }; + drop(state); + + let mut caps = gst::Caps::new_empty(); + { + let caps = caps.get_mut().unwrap(); + let s = gst::Structure::builder("audio/x-opus") + .field("channel-mapping-family", &0i32) + .build(); + caps.append_structure(s); + } + + self.srcpad.push_event(gst::event::Caps::new(&caps)) + }, + EventView::FlushStop(_) => { + let mut state = self.state.lock().unwrap(); + if let Some(state) = &mut *state { + state.reset(); + }; + drop(state); + + pad.event_default(Some(element), event) + }, + _ => pad.event_default(Some(element), event) + } + } + + fn src_query( + &self, + pad: &gst::Pad, + element: &gst::Element, + query: &mut gst::QueryRef) -> bool + { + gst_log!(CAT, obj: pad, "got query: {:?}", query); + match query.view_mut() { + QueryView::Scheduling(mut q) => { + let mut peer_query = gst::query::Scheduling::new(); + let res = self.sinkpad.peer_query(&mut peer_query); + if ! res { + return res; + } + + let (flags, min, max, align) = peer_query.get_result(); + + q.set(flags, min, max, align); + true + }, + _ => pad.query_default(Some(element), query) + } + } + + fn src_activatemode( + &self, + _pad: &gst::Pad, + _element: &gst::Element, + mode: gst::PadMode, + active: bool + ) -> Result<(), gst::LoggableError> { + self.sinkpad + .activate_mode(mode, active)?; + + Ok(()) + } + +} + +pub fn register(plugin: &gst::Plugin) -> Result<(), glib::BoolError> { + gst::Element::register( + Some(plugin), + "protonaudioconverter", + gst::Rank::Marginal, + AudioConv::get_type()) +} diff --git a/media-converter/src/audioconvbin.rs b/media-converter/src/audioconvbin.rs new file mode 100644 index 00000000..b7aa1851 --- /dev/null +++ b/media-converter/src/audioconvbin.rs @@ -0,0 +1,218 @@ +/* + * Copyright (c) 2020 Valve Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its contributors + * may be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +use glib; +use glib::subclass; +use glib::subclass::prelude::*; + +use gst; +use gst::prelude::*; +use gst::subclass::prelude::*; +use gst::EventView; + +use once_cell::sync::Lazy; + +/* Opus is a great fit for our usecase except for one problem: it only supports a few samplerates. + * Notably it doesn't support 44100 Hz, which is a very frequently used samplerate. This bin + * provides a capssetter element which will override the rate we get from Opus with the rate the + * application requested. Similarly, on the transcoder side, we just encode the audio as if it were + * at 48 kHz, even if it is actually at 44.1 kHz. + * + * The downside to this is a small decrease in audio quality. If Opus is most responsive between 20 + * Hz and 20 kHz, then when 44.1 audio is converted to 48, we'll gain noise between 18-20 Hz + * (although WMA probably already filtered that out) and start to lose audio above 18,375 kHz. This + * is at the very edge of human hearing, so we're unlikely to lose any noticeable quality. + * + * Resampling is an option, but has some problems. It's significantly more complicated, and more + * CPU-intensive. Also, XAudio2 buffers can be started and ended at arbitrary points, so if we + * start moving audio data from one buffer into another due to resampling, it may result in audible + * artifacts. I think just encoding at the wrong rate is the best compromise. If the application + * actually cared about audio quality, they probably would not have used WMA in the first place. + */ + +static CAT: Lazy = Lazy::new(|| { + gst::DebugCategory::new( + "protonaudioconverterbin", + gst::DebugColorFlags::empty(), + Some("Proton audio converter bin")) +}); + +struct AudioConvBin { + audioconv: gst::Element, + opusdec: gst::Element, + capssetter: gst::Element, + srcpad: gst::GhostPad, + sinkpad: gst::GhostPad, +} + +impl ObjectSubclass for AudioConvBin { + const NAME: &'static str = "ProtonAudioConverterBin"; + + type ParentType = gst::Bin; + type Instance = gst::subclass::ElementInstanceStruct; + type Class = subclass::simple::ClassStruct; + + glib_object_subclass!(); + + fn with_class(klass: &subclass::simple::ClassStruct) -> Self { + + let templ = klass.get_pad_template("src").unwrap(); + let srcpad = gst::GhostPad::builder_with_template(&templ, Some("src")).build(); + + let templ = klass.get_pad_template("sink").unwrap(); + let sinkpad = gst::GhostPad::builder_with_template(&templ, Some("sink")) + .event_function(|pad, parent, event| { + AudioConvBin::catch_panic_pad_function( + parent, + || false, + |audioconvbin, element| audioconvbin.sink_event(pad, element, event) + ) + }).build(); + + let audioconv = gst::ElementFactory::make("protonaudioconverter", None).unwrap(); + let opusdec = gst::ElementFactory::make("opusdec", None).unwrap(); + let capssetter = gst::ElementFactory::make("capssetter", None).unwrap(); + + AudioConvBin { + audioconv, + opusdec, + capssetter, + srcpad, + sinkpad, + } + } + + fn class_init(klass: &mut subclass::simple::ClassStruct) { + klass.set_metadata("Proton audio converter with rate fixup", + "Codec/Parser", + "Converts audio for Proton, fixing up samplerates", + "Andrew Eikum "); + + let mut caps = gst::Caps::new_empty(); + { + let caps = caps.get_mut().unwrap(); + caps.append(gst::Caps::builder("audio/x-wma").build()); + } + let sink_pad_template = gst::PadTemplate::new( + "sink", + gst::PadDirection::Sink, + gst::PadPresence::Always, + &caps).unwrap(); + klass.add_pad_template(sink_pad_template); + + let caps = gst::Caps::builder("audio/x-raw").build(); + let src_pad_template = gst::PadTemplate::new( + "src", + gst::PadDirection::Src, + gst::PadPresence::Always, + &caps).unwrap(); + klass.add_pad_template(src_pad_template); + } +} + +impl ObjectImpl for AudioConvBin { + glib_object_impl!(); + + fn constructed(&self, obj: &glib::Object) { + self.parent_constructed(obj); + + let bin = obj.downcast_ref::().unwrap(); + + bin.add(&self.audioconv).unwrap(); + bin.add(&self.opusdec).unwrap(); + bin.add(&self.capssetter).unwrap(); + + self.audioconv.link(&self.opusdec).unwrap(); + self.opusdec.link(&self.capssetter).unwrap(); + + self.sinkpad + .set_target(Some(&self.audioconv.get_static_pad("sink").unwrap())) + .unwrap(); + self.srcpad + .set_target(Some(&self.capssetter.get_static_pad("src").unwrap())) + .unwrap(); + + bin.add_pad(&self.sinkpad).unwrap(); + bin.add_pad(&self.srcpad).unwrap(); + } +} + +impl BinImpl for AudioConvBin { } + +impl ElementImpl for AudioConvBin { } + +impl AudioConvBin { + fn sink_event( + &self, + pad: &gst::GhostPad, + element: &gst::Element, + event: gst::Event + ) -> bool { + match event.view() { + EventView::Caps(event_caps) => { + /* set up capssetter with this rate */ + if let Some(s) = event_caps.get_caps().get_structure(0) { + + if let Ok(override_rate) = s.get_some::("rate") { + + let mut rate_caps = gst::Caps::new_empty(); + { + let rate_caps = rate_caps.get_mut().unwrap(); + let s = gst::Structure::builder("audio/x-raw") + .field("rate", &override_rate) + .build(); + rate_caps.append_structure(s); + } + self.capssetter.set_property("caps", + &rate_caps).unwrap(); + }else{ + gst_warning!(CAT, "event has no rate"); + } + } else { + gst_warning!(CAT, "event has no structure"); + } + + /* forward on to the real pad */ + self.audioconv.get_static_pad("sink").unwrap() + .send_event(event) + }, + _ => pad.event_default(Some(element), event) + } + } +} + +pub fn register(plugin: &gst::Plugin) -> Result<(), glib::BoolError> { + gst::Element::register( + Some(plugin), + "protonaudioconverterbin", + gst::Rank::Marginal + 1, + AudioConvBin::get_type() + ) +} diff --git a/media-converter/src/fossilize.rs b/media-converter/src/fossilize.rs new file mode 100644 index 00000000..511f4602 --- /dev/null +++ b/media-converter/src/fossilize.rs @@ -0,0 +1,427 @@ +/* + * Copyright (c) 2020 Valve Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its contributors + * may be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Based on "Fossilize," which is + * Copyright (c) 2018-2019 Hans-Kristian Arntzen + * https://github.com/ValveSoftware/Fossilize/ + */ + +/* This is a read/write implementation of the Fossilize database format. + * + * https://github.com/ValveSoftware/Fossilize/ + * + * That C++ implementation is specific to Vulkan, while this one tries to be generic to store any + * type of data. + * + * FIXME: It should probably live in that repo or in a separate project. + */ + +use std::fs; +use std::io; +use std::io::Read; +use std::io::Write; +use std::io::Seek; +use std::fs::OpenOptions; +use std::convert::From; +use std::collections::HashMap; +use crc32fast; + +use crate::*; + +/* Fossilize StreamArchive database format version 6: + * + * The file consists of a header, followed by an unlimited series of "entries". + * + * All multi-byte entities are little-endian. + * + * The file header is as follows: + * + * Field Type Description + * ----- ---- ----------- + * magic_number uint8_t[12] Constant value: "\x81""FOSSILIZEDB" + * version uint32_t StreamArchive version: 6 + * + * + * Each entry follows this format: + * + * Field Type Description + * ----- ---- ----------- + * name unsigned char[40] Application-defined entry identifier, stored in hexadecimal big-endian + * ASCII. Usually N-char tag followed by (40 - N)-char hash. + * stored_size uint32_t Size of the payload as stored in this file. + * flags uint32_t Flags for this entry (e.g. compression). See below. + * crc32 uint32_t CRC32 of the payload as stored in this file. + * payload_size uint32_t Size of this payload after decompression. + * payload uint8_t[stored_size] Entry data. + * + * The flags field may contain: + * 0x1: No compression. + * 0x2: Deflate compression. + */ + +const FOSSILIZE_MAGIC: [u8; 12] = [0x81, 0x46, 0x4f, 0x53, 0x53, 0x49, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x42]; +const FOSSILIZE_MIN_COMPAT_VERSION: u8 = 5; +const FOSSILIZE_VERSION: u8 = 6; +const MAGIC_LEN_BYTES: usize = 12 + 4; + +const FOSSILIZE_COMPRESSION_NONE: u32 = 1; +const _FOSSILIZE_COMPRESSION_DEFLATE: u32 = 2; + +#[derive(Debug)] +pub enum Error { + NotImplemented, + IOError(io::Error), + CorruptDatabase, + DataTooLarge, + InvalidTag, + EntryNotFound, + FailedChecksum, +} + +impl From for Error { + fn from(e: io::Error) -> Error { + Error::IOError(e) + } +} + +type FossilizeHash = u128; +const _FOSSILIZEHASH_ASCII_LEN: usize = (128 / 8) * 2; + +trait ToAscii { + fn to_ascii_bytes(&self) -> Vec; + + fn from_ascii_bytes(b: &[u8]) -> Result + where Self: std::marker::Sized; +} + +impl ToAscii for FossilizeHash { + fn to_ascii_bytes(&self) -> Vec { + format_hash(*self).into_bytes() + } + + fn from_ascii_bytes(b: &[u8]) -> Result { + let s = String::from_utf8(b.to_vec()) + .map_err(|_| Error::CorruptDatabase)?; + Self::from_str_radix(&s, 16) + .map_err(|_| Error::CorruptDatabase) + } +} + +type FossilizeTag = u32; +const FOSSILIZETAG_ASCII_LEN: usize = (32 / 8) * 2; + +impl ToAscii for FossilizeTag { + fn to_ascii_bytes(&self) -> Vec { + format!("{:08x}", *self).into_bytes() + } + + fn from_ascii_bytes(b: &[u8]) -> Result { + let s = String::from_utf8(b.to_vec()) + .map_err(|_| Error::CorruptDatabase)?; + Self::from_str_radix(&s, 16) + .map_err(|_| Error::CorruptDatabase) + } +} + +const PAYLOAD_NAME_LEN_BYTES: usize = 40; + +struct PayloadInfo { + size: u32, + compression: u32, + crc: u32, + full_size: u32, +} + +const PAYLOAD_HEADER_LEN_BYTES: usize = 4 * 4; + +impl PayloadInfo { + + fn new_from_slice(dat: &[u8]) -> Self { + Self { + size: u32::from_le_bytes(copy_into_array(&dat[0..4])), + compression: u32::from_le_bytes(copy_into_array(&dat[4..8])), + crc: u32::from_le_bytes(copy_into_array(&dat[8..12])), + full_size: u32::from_le_bytes(copy_into_array(&dat[12..16])), + } + } + + fn to_slice(&self) -> [u8; PAYLOAD_HEADER_LEN_BYTES] { + let mut ret = [0u8; PAYLOAD_HEADER_LEN_BYTES]; + ret[0..4].copy_from_slice(&self.size.to_le_bytes()); + ret[4..8].copy_from_slice(&self.compression.to_le_bytes()); + ret[8..12].copy_from_slice(&self.crc.to_le_bytes()); + ret[12..16].copy_from_slice(&self.full_size.to_le_bytes()); + ret + } +} + +pub struct PayloadEntry { + offset: u64, + payload_info: PayloadInfo, +} + +impl PayloadEntry { + fn new_from_slice(offset: u64, dat: &[u8]) -> Self { + Self { + offset, + payload_info: PayloadInfo::new_from_slice(dat), + } + } +} + +pub struct StreamArchive { + file: fs::File, + + seen_blobs: Vec>, + + write_pos: u64, +} + +pub enum CRCCheck { + WithoutCRC, + WithCRC, +} + +impl StreamArchive { + + pub fn new>(filename: P, fileopts: &OpenOptions, num_tags: usize) -> Result { + + let file = fileopts.open(filename)?; + + let mut seen_blobs = Vec::new(); + for _ in 0..num_tags { + seen_blobs.push(HashMap::new()); + } + + let mut ret = Self { + file, + seen_blobs, + write_pos: 0, + }; + + ret.prepare()?; + + Ok(ret) + } + + pub fn prepare(&mut self) -> Result<(), Error> { + self.write_pos = self.file.seek(io::SeekFrom::Start(0))?; + + if self.file.metadata().unwrap().len() > 0 { + let mut magic_and_version = [0 as u8; MAGIC_LEN_BYTES]; + self.file.read_exact(&mut magic_and_version)?; + + let version = magic_and_version[15]; + + if magic_and_version[0..12] != FOSSILIZE_MAGIC || + version < FOSSILIZE_MIN_COMPAT_VERSION || + version > FOSSILIZE_VERSION { + return Err(Error::CorruptDatabase); + } + loop { + let mut name_and_header = [0u8; PAYLOAD_NAME_LEN_BYTES + PAYLOAD_HEADER_LEN_BYTES]; + let res = self.file.read_exact(&mut name_and_header); + + if let Err(fail) = res { + if fail.kind() == io::ErrorKind::UnexpectedEof { + break; + } + return Err(Error::IOError(fail)); + } + + let name = &name_and_header[0..PAYLOAD_NAME_LEN_BYTES]; + + let tag: usize = FossilizeTag::from_ascii_bytes(&name[0..FOSSILIZETAG_ASCII_LEN])? as usize; + let hash = FossilizeHash::from_ascii_bytes(&name[FOSSILIZETAG_ASCII_LEN..])?; + + let payload_entry = PayloadEntry::new_from_slice( + self.file.seek(io::SeekFrom::Current(0))?, + &name_and_header[PAYLOAD_NAME_LEN_BYTES..] + ); + + let res = self.file.seek(io::SeekFrom::Current(payload_entry.payload_info.size as i64)); + match res { + Ok(p) => { + self.write_pos = p; + self.seen_blobs[tag].insert(hash, payload_entry); + }, + + Err(e) => { + /* truncated chunk is not fatal */ + if e.kind() != io::ErrorKind::UnexpectedEof { + return Err(Error::IOError(e)); + } + }, + } + } + } else { + /* new file, write foz header */ + self.file.write_all(&FOSSILIZE_MAGIC)?; + self.file.write_all(&[0u8, 0u8, 0u8, FOSSILIZE_VERSION])?; + + self.write_pos = MAGIC_LEN_BYTES as u64; + } + + Ok(()) + } + + pub fn has_entry(&self, tag: FossilizeTag, hash: FossilizeHash) -> bool { + self.seen_blobs[tag as usize].contains_key(&hash) + } + + pub fn iter_tag(&self, tag: FossilizeTag) -> std::collections::hash_map::Keys { + self.seen_blobs[tag as usize].keys() + } + + pub fn entry_size(&self, tag: FossilizeTag, hash: FossilizeHash) -> Result { + match self.seen_blobs[tag as usize].get(&hash) { + None => Err(Error::EntryNotFound), + Some(e) => Ok(e.payload_info.full_size as usize), + } + } + + pub fn read_entry(&mut self, tag: FossilizeTag, hash: FossilizeHash, offset: u64, buf: &mut [u8], crc_opt: CRCCheck) -> Result { + if tag as usize >= self.seen_blobs.len() { + return Err(Error::InvalidTag); + } + + let entry = &self.seen_blobs[tag as usize].get(&hash); + + let entry = match entry { + None => { return Err(Error::EntryNotFound); } + Some(e) => e, + }; + + if entry.payload_info.compression != FOSSILIZE_COMPRESSION_NONE { + return Err(Error::NotImplemented); + } + + if offset >= entry.payload_info.full_size as u64 { + return Ok(0); + } + + self.file.seek(io::SeekFrom::Start(entry.offset + offset))?; + + let to_copy = std::cmp::min(entry.payload_info.full_size as usize - offset as usize, buf.len()); + + self.file.read_exact(&mut buf[0..to_copy]) + .map_err(|e| Error::IOError(e))?; + + if entry.payload_info.crc != 0 { + if let CRCCheck::WithCRC = crc_opt { + let mut crc_hasher = crc32fast::Hasher::new(); + crc_hasher.update(&buf[0..to_copy]); + let got_crc = crc_hasher.finalize(); + if got_crc != entry.payload_info.crc { + return Err(Error::FailedChecksum); + } + } + } + + Ok(to_copy) + } + + pub fn write_entry(&mut self, tag: FossilizeTag, hash: FossilizeHash, data: &mut dyn Read, crc_opt: CRCCheck) -> Result<(), Error> { + if self.has_entry(tag, hash) { + return Ok(()); + } + + self.file.seek(io::SeekFrom::Start(self.write_pos))?; + + /* write entry name */ + let mut name = [0u8; PAYLOAD_NAME_LEN_BYTES]; + + name[0..FOSSILIZETAG_ASCII_LEN].copy_from_slice(&tag.to_ascii_bytes()); + + name[FOSSILIZETAG_ASCII_LEN..].copy_from_slice(&hash.to_ascii_bytes()); + + self.file.write_all(&name)?; + + /* allocate payload info space */ + let payload_info_pos = self.file.seek(io::SeekFrom::Current(0))?; + + let payload_info = PayloadInfo { + size: u32::max_value(), /* will be filled later */ + compression: FOSSILIZE_COMPRESSION_NONE, + crc: 0, /* will be filled later */ + full_size: u32::max_value(), /* will be filled later */ + }; + + self.file.write_all(&payload_info.to_slice())?; + + /* write data */ + let mut payload_entry = PayloadEntry { + offset: self.file.seek(io::SeekFrom::Current(0))?, + payload_info, + }; + + const BUFFER_COPY_BYTES: usize = 8 * 1024 * 1024; /* tuneable */ + let mut buf = box_array![0u8; BUFFER_COPY_BYTES]; + let mut size: usize = 0; + let mut crc_hasher = crc32fast::Hasher::new(); + loop { + let readed = data.read(&mut *buf)?; + if readed == 0 { + break; + } + + if size + readed > u32::max_value() as usize { + /* Fossilize format only supports 4 GiB entries */ + return Err(Error::DataTooLarge); + } + + size += readed; + + self.file.write_all(&buf[0..readed])?; + + if let CRCCheck::WithCRC = crc_opt { + crc_hasher.update(&buf[0..readed]); + } + } + + self.write_pos = self.file.seek(io::SeekFrom::Current(0))?; + + /* seek back and fill in the size */ + self.file.seek(io::SeekFrom::Start(payload_info_pos))?; + + payload_entry.payload_info.size = size as u32; + payload_entry.payload_info.full_size = size as u32; + + if let CRCCheck::WithCRC = crc_opt { + payload_entry.payload_info.crc = crc_hasher.finalize(); + } + + self.file.write_all(&payload_entry.payload_info.to_slice())?; + + /* success. record entry and exit */ + self.seen_blobs[tag as usize].insert(hash, payload_entry); + + Ok(()) + } +} diff --git a/media-converter/src/lib.rs b/media-converter/src/lib.rs new file mode 100644 index 00000000..e06eb587 --- /dev/null +++ b/media-converter/src/lib.rs @@ -0,0 +1,161 @@ +/* + * Copyright (c) 2020 Valve Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its contributors + * may be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#[macro_use] +extern crate glib; +#[macro_use] +extern crate gstreamer as gst; +extern crate gstreamer_base as gst_base; +extern crate gstreamer_video as gst_video; +extern crate gstreamer_audio as gst_audio; +extern crate once_cell; + +use std::io; +use std::io::Read; + +#[cfg(target_arch = "x86")] +mod murmur3_x86_128; +#[cfg(target_arch = "x86_64")] +mod murmur3_x64_128; + +mod videoconv; +mod audioconv; +mod audioconvbin; +mod fossilize; + +// copy_into_array: +// +// Copyright (c) 2020 Stu Small +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software +// and associated documentation files (the "Software"), to deal in the Software without +// restriction, including without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or +// substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +fn copy_into_array(slice: &[T]) -> A +where + A: Default + AsMut<[T]>, + T: Copy, +{ + let mut a = A::default(); + >::as_mut(&mut a).copy_from_slice(slice); + a +} + +/* rust has a hard time with large heap allocations. below macro works around that. + * + * by @simias from https://github.com/rust-lang/rust/issues/53827 */ +#[macro_export] +macro_rules! box_array { + ($val:expr ; $len:expr) => {{ + // Use a generic function so that the pointer cast remains type-safe + fn vec_to_boxed_array(vec: Vec) -> Box<[T; $len]> { + let boxed_slice = vec.into_boxed_slice(); + + let ptr = ::std::boxed::Box::into_raw(boxed_slice) as *mut [T; $len]; + + unsafe { Box::from_raw(ptr) } + } + + vec_to_boxed_array(vec![$val; $len]) + }}; +} + +/* you MUST use this to consistently format the hash bytes into a string */ +fn format_hash(hash: u128) -> String { + return format!("{:032x}", hash); +} + +/* changing this will invalidate the cache. you MUST clear it. */ +const HASH_SEED: u32 = 0x4AA61F63; + +pub struct BufferedReader<'a> { + dat: &'a [u8], + len: usize, + ofs: usize, +} + +impl<'a> BufferedReader<'a> { + fn new(dat: &'a [u8], len: usize) -> Self { + BufferedReader { + dat, + len, + ofs: 0, + } + } +} + +impl<'a> Read for BufferedReader<'a> { + fn read(&mut self, out: &mut [u8]) -> io::Result { + let to_copy = std::cmp::min(self.len - self.ofs, out.len()); + + if to_copy == 0 { + return Ok(0); + } + + if to_copy == out.len() { + out.copy_from_slice(&self.dat[self.ofs..(self.ofs + to_copy)]); + }else{ + out[0..to_copy].copy_from_slice(&self.dat[self.ofs..(self.ofs + to_copy)]); + } + + self.ofs += to_copy; + + Ok(to_copy) + } +} + +fn plugin_init(plugin: &gst::Plugin) -> Result<(), glib::BoolError> { + videoconv::register(plugin)?; + audioconvbin::register(plugin)?; + audioconv::register(plugin)?; + Ok(()) +} + +gst_plugin_define!( + protonmediaconverter, + env!("CARGO_PKG_DESCRIPTION"), + plugin_init, + concat!(env!("CARGO_PKG_VERSION"), "-", env!("COMMIT_ID")), + "MIT/X11", + env!("CARGO_PKG_NAME"), + env!("CARGO_PKG_NAME"), + env!("CARGO_PKG_REPOSITORY"), + env!("BUILD_REL_DATE") +); diff --git a/media-converter/src/murmur3_x64_128.rs b/media-converter/src/murmur3_x64_128.rs new file mode 100644 index 00000000..c1846385 --- /dev/null +++ b/media-converter/src/murmur3_x64_128.rs @@ -0,0 +1,232 @@ +// Copyright (c) 2020 Stu Small +// +// Modified to return its internal state for continuous hashing: +// Copyright (c) 2020 Andrew Eikum for CodeWeavers +// +// Licensed under the Apache License, Version 2.0 +// or the MIT +// license , at your +// option. All files in the project carrying such notice may not be copied, +// modified, or distributed except according to those terms. + +use std::io::{Read, Result}; +use std::ops::Shl; + +use crate::copy_into_array; + +#[allow(non_camel_case_types)] +pub struct murmur3_x64_128_state { + seed: u32, + h1: u64, + h2: u64, + processed: usize, +} + +impl murmur3_x64_128_state { + pub fn new(seed: u32) -> Self { + murmur3_x64_128_state { + seed, + h1: seed as u64, + h2: seed as u64, + processed: 0, + } + } + + #[allow(dead_code)] + pub fn reset(&mut self) { + self.h1 = self.seed as u64; + self.h2 = self.seed as u64; + self.processed = 0; + } +} + +/// Use the x64 variant of the 128 bit murmur3 to hash some [Read] implementation. +/// +/// # Example +/// ``` +/// use std::io::Cursor; +/// use murmur3::murmur3_x64_128; +/// let hash_result = murmur3_x64_128(&mut Cursor::new("hello world"), 0); +/// ``` +pub fn murmur3_x64_128(source: &mut T, seed: u32) -> Result { + let mut state = murmur3_x64_128_state::new(seed); + murmur3_x64_128_full(source, &mut state) +} + +pub fn murmur3_x64_128_full(source: &mut T, state: &mut murmur3_x64_128_state) -> Result { + const C1: u64 = 0x87c3_7b91_1142_53d5; + const C2: u64 = 0x4cf5_ad43_2745_937f; + const C3: u64 = 0x52dc_e729; + const C4: u64 = 0x3849_5ab5; + const R1: u32 = 27; + const R2: u32 = 31; + const R3: u32 = 33; + const M: u64 = 5; + let mut h1: u64 = state.h1; + let mut h2: u64 = state.h2; + let mut buf = [0; 16]; + let mut processed: usize = state.processed; + loop { + let read = source.read(&mut buf[..])?; + processed += read; + if read == 16 { + let k1 = u64::from_le_bytes(copy_into_array(&buf[0..8])); + let k2 = u64::from_le_bytes(copy_into_array(&buf[8..])); + h1 ^= k1.wrapping_mul(C1).rotate_left(R2).wrapping_mul(C2); + h1 = h1 + .rotate_left(R1) + .wrapping_add(h2) + .wrapping_mul(M) + .wrapping_add(C3); + h2 ^= k2.wrapping_mul(C2).rotate_left(R3).wrapping_mul(C1); + h2 = h2 + .rotate_left(R2) + .wrapping_add(h1) + .wrapping_mul(M) + .wrapping_add(C4); + } else if read == 0 { + state.h1 = h1; + state.h2 = h2; + state.processed = processed; + h1 ^= processed as u64; + h2 ^= processed as u64; + h1 = h1.wrapping_add(h2); + h2 = h2.wrapping_add(h1); + h1 = fmix64(h1); + h2 = fmix64(h2); + h1 = h1.wrapping_add(h2); + h2 = h2.wrapping_add(h1); + let x = ((h2 as u128) << 64) | (h1 as u128); + return Ok(x); + } else { + let mut k1 = 0; + let mut k2 = 0; + if read >= 15 { + k2 ^= (buf[14] as u64).shl(48); + } + if read >= 14 { + k2 ^= (buf[13] as u64).shl(40); + } + if read >= 13 { + k2 ^= (buf[12] as u64).shl(32); + } + if read >= 12 { + k2 ^= (buf[11] as u64).shl(24); + } + if read >= 11 { + k2 ^= (buf[10] as u64).shl(16); + } + if read >= 10 { + k2 ^= (buf[9] as u64).shl(8); + } + if read >= 9 { + k2 ^= buf[8] as u64; + k2 = k2.wrapping_mul(C2).rotate_left(33).wrapping_mul(C1); + h2 ^= k2; + } + if read >= 8 { + k1 ^= (buf[7] as u64).shl(56); + } + if read >= 7 { + k1 ^= (buf[6] as u64).shl(48); + } + if read >= 6 { + k1 ^= (buf[5] as u64).shl(40); + } + if read >= 5 { + k1 ^= (buf[4] as u64).shl(32); + } + if read >= 4 { + k1 ^= (buf[3] as u64).shl(24); + } + if read >= 3 { + k1 ^= (buf[2] as u64).shl(16); + } + if read >= 2 { + k1 ^= (buf[1] as u64).shl(8); + } + if read >= 1 { + k1 ^= buf[0] as u64; + } + k1 = k1.wrapping_mul(C1); + k1 = k1.rotate_left(31); + k1 = k1.wrapping_mul(C2); + h1 ^= k1; + } + } +} + +fn fmix64(k: u64) -> u64 { + const C1: u64 = 0xff51_afd7_ed55_8ccd; + const C2: u64 = 0xc4ce_b9fe_1a85_ec53; + const R: u32 = 33; + let mut tmp = k; + tmp ^= tmp >> R; + tmp = tmp.wrapping_mul(C1); + tmp ^= tmp >> R; + tmp = tmp.wrapping_mul(C2); + tmp ^= tmp >> R; + tmp +} + +#[cfg(test)] +mod tests { + use super::*; + use std::cmp::min; + use std::io; + use std::io::Read; + + const TEST_SEED: u32 = 0x00000000; + + const CONST_DATA: [u8; 64] = + [ 0u8, 1u8, 2u8, 3u8, 4u8, 5u8, 6u8, 7u8, + 10u8, 11u8, 12u8, 13u8, 14u8, 15u8, 16u8, 17u8, + 20u8, 21u8, 22u8, 23u8, 24u8, 25u8, 26u8, 27u8, + 30u8, 31u8, 32u8, 33u8, 34u8, 35u8, 36u8, 37u8, + 40u8, 41u8, 42u8, 43u8, 44u8, 45u8, 46u8, 47u8, + 50u8, 51u8, 52u8, 53u8, 54u8, 55u8, 56u8, 57u8, + 60u8, 61u8, 62u8, 63u8, 64u8, 65u8, 66u8, 67u8, + 70u8, 71u8, 72u8, 73u8, 74u8, 75u8, 76u8, 77u8 ]; + + struct TestReader<'a> { + data: &'a [u8], + ofs: usize, + } + + impl<'a> TestReader<'a> { + fn new(data: &'a [u8]) -> Self { + TestReader { + data, + ofs: 0, + } + } + } + + impl<'a> Read for TestReader<'a> { + fn read(&mut self, out: &mut [u8]) -> io::Result { + let to_copy = min(out.len(), self.data.len() - self.ofs); + + if to_copy > 0 { + out[0..to_copy].copy_from_slice(&self.data[self.ofs..(self.ofs + to_copy)]); + self.ofs += to_copy; + } + + Ok(to_copy) + } + } + + #[test] + fn test_full_hash() { + /* test with the full buffer */ + let full_hash = murmur3_x64_128(&mut TestReader::new(&CONST_DATA), TEST_SEED).unwrap(); + assert_eq!(full_hash, 0xeb91a9599de8337d969b1e101c4ee3bc); + + /* accumulate hash across 16-byte chunks (short reads change hash due to 0-padding) */ + let mut hash_state = murmur3_x64_128_state::new(TEST_SEED); + murmur3_x64_128_full(&mut TestReader::new(&CONST_DATA[0..16]), &mut hash_state).unwrap(); + murmur3_x64_128_full(&mut TestReader::new(&CONST_DATA[16..32]), &mut hash_state).unwrap(); + murmur3_x64_128_full(&mut TestReader::new(&CONST_DATA[32..48]), &mut hash_state).unwrap(); + let hash = murmur3_x64_128_full(&mut TestReader::new(&CONST_DATA[48..64]), &mut hash_state).unwrap(); + assert_eq!(hash, full_hash); + } +} diff --git a/media-converter/src/murmur3_x86_128.rs b/media-converter/src/murmur3_x86_128.rs new file mode 100644 index 00000000..d20ae158 --- /dev/null +++ b/media-converter/src/murmur3_x86_128.rs @@ -0,0 +1,216 @@ +// Copyright (c) 2020 Stu Small +// +// Modified to return its internal state for continuous hashing: +// Copyright (c) 2020 Andrew Eikum for CodeWeavers +// +// Licensed under the Apache License, Version 2.0 +// or the MIT +// license , at your +// option. All files in the project carrying such notice may not be copied, +// modified, or distributed except according to those terms. + +use std::io::{Read, Result}; +use std::ops::Shl; + +use crate::copy_into_array; + +#[allow(non_camel_case_types)] +pub struct murmur3_x86_128_state { + seed: u32, + h1: u32, + h2: u32, + h3: u32, + h4: u32, + processed: usize, +} + +impl murmur3_x86_128_state { + pub fn new(seed: u32) -> Self { + murmur3_x86_128_state { + seed, + h1: seed, + h2: seed, + h3: seed, + h4: seed, + processed: 0, + } + } + + #[allow(dead_code)] + pub fn reset(&mut self) { + self.h1 = self.seed; + self.h2 = self.seed; + self.h3 = self.seed; + self.h4 = self.seed; + self.processed = 0; + } +} + +/// Use the x86 variant of the 128 bit murmur3 to hash some [Read] implementation. +/// +/// # Example +/// ``` +/// use std::io::Cursor; +/// use murmur3::murmur3_x86_128; +/// let hash_result = murmur3_x86_128(&mut Cursor::new("hello world"), 0); +/// ``` +pub fn murmur3_x86_128(source: &mut T, seed: u32) -> Result { + let mut state = murmur3_x86_128_state::new(seed); + murmur3_x86_128_full(source, &mut state) +} + +pub fn murmur3_x86_128_full(source: &mut T, state: &mut murmur3_x86_128_state) -> Result { + const C1: u32 = 0x239b_961b; + const C2: u32 = 0xab0e_9789; + const C3: u32 = 0x38b3_4ae5; + const C4: u32 = 0xa1e3_8b93; + const C5: u32 = 0x561c_cd1b; + const C6: u32 = 0x0bca_a747; + const C7: u32 = 0x96cd_1c35; + const C8: u32 = 0x32ac_3b17; + const M: u32 = 5; + + let mut h1: u32 = state.h1; + let mut h2: u32 = state.h2; + let mut h3: u32 = state.h3; + let mut h4: u32 = state.h4; + + let mut buf = [0; 16]; + let mut processed: usize = state.processed; + loop { + let read = source.read(&mut buf[..])?; + processed += read; + if read == 16 { + let k1 = u32::from_le_bytes(copy_into_array(&buf[0..4])); + let k2 = u32::from_le_bytes(copy_into_array(&buf[4..8])); + let k3 = u32::from_le_bytes(copy_into_array(&buf[8..12])); + let k4 = u32::from_le_bytes(copy_into_array(&buf[12..16])); + h1 ^= k1.wrapping_mul(C1).rotate_left(15).wrapping_mul(C2); + h1 = h1 + .rotate_left(19) + .wrapping_add(h2) + .wrapping_mul(M) + .wrapping_add(C5); + h2 ^= k2.wrapping_mul(C2).rotate_left(16).wrapping_mul(C3); + h2 = h2 + .rotate_left(17) + .wrapping_add(h3) + .wrapping_mul(M) + .wrapping_add(C6); + h3 ^= k3.wrapping_mul(C3).rotate_left(17).wrapping_mul(C4); + h3 = h3 + .rotate_left(15) + .wrapping_add(h4) + .wrapping_mul(M) + .wrapping_add(C7); + h4 ^= k4.wrapping_mul(C4).rotate_left(18).wrapping_mul(C1); + h4 = h4 + .rotate_left(13) + .wrapping_add(h1) + .wrapping_mul(M) + .wrapping_add(C8); + } else if read == 0 { + state.h1 = h1; + state.h2 = h2; + state.h3 = h3; + state.h4 = h4; + state.processed = processed; + h1 ^= processed as u32; + h2 ^= processed as u32; + h3 ^= processed as u32; + h4 ^= processed as u32; + h1 = h1.wrapping_add(h2); + h1 = h1.wrapping_add(h3); + h1 = h1.wrapping_add(h4); + h2 = h2.wrapping_add(h1); + h3 = h3.wrapping_add(h1); + h4 = h4.wrapping_add(h1); + h1 = fmix32(h1); + h2 = fmix32(h2); + h3 = fmix32(h3); + h4 = fmix32(h4); + h1 = h1.wrapping_add(h2); + h1 = h1.wrapping_add(h3); + h1 = h1.wrapping_add(h4); + h2 = h2.wrapping_add(h1); + h3 = h3.wrapping_add(h1); + h4 = h4.wrapping_add(h1); + let x = ((h4 as u128) << 96) | ((h3 as u128) << 64) | ((h2 as u128) << 32) | h1 as u128; + return Ok(x); + } else { + let mut k1 = 0; + let mut k2 = 0; + let mut k3 = 0; + let mut k4 = 0; + if read >= 15 { + k4 ^= (buf[14] as u32).shl(16); + } + if read >= 14 { + k4 ^= (buf[13] as u32).shl(8); + } + if read >= 13 { + k4 ^= buf[12] as u32; + k4 = k4.wrapping_mul(C4).rotate_left(18).wrapping_mul(C1); + h4 ^= k4; + } + if read >= 12 { + k3 ^= (buf[11] as u32).shl(24); + } + if read >= 11 { + k3 ^= (buf[10] as u32).shl(16); + } + if read >= 10 { + k3 ^= (buf[9] as u32).shl(8); + } + if read >= 9 { + k3 ^= buf[8] as u32; + k3 = k3.wrapping_mul(C3).rotate_left(17).wrapping_mul(C4); + h3 ^= k3; + } + if read >= 8 { + k2 ^= (buf[7] as u32).shl(24); + } + if read >= 7 { + k2 ^= (buf[6] as u32).shl(16); + } + if read >= 6 { + k2 ^= (buf[5] as u32).shl(8); + } + if read >= 5 { + k2 ^= buf[4] as u32; + k2 = k2.wrapping_mul(C2).rotate_left(16).wrapping_mul(C3); + h2 ^= k2; + } + if read >= 4 { + k1 ^= (buf[3] as u32).shl(24); + } + if read >= 3 { + k1 ^= (buf[2] as u32).shl(16); + } + if read >= 2 { + k1 ^= (buf[1] as u32).shl(8); + } + if read >= 1 { + k1 ^= buf[0] as u32; + } + k1 = k1.wrapping_mul(C1); + k1 = k1.rotate_left(15); + k1 = k1.wrapping_mul(C2); + h1 ^= k1; + } + } +} + +fn fmix32(k: u32) -> u32 { + const C1: u32 = 0x85eb_ca6b; + const C2: u32 = 0xc2b2_ae35; + const R1: u32 = 16; + const R2: u32 = 13; + let mut tmp = k; + tmp ^= tmp >> R1; + tmp = tmp.wrapping_mul(C1); + tmp ^= tmp >> R2; + tmp = tmp.wrapping_mul(C2); + tmp ^= tmp >> R1; + tmp +} diff --git a/media-converter/src/videoconv.rs b/media-converter/src/videoconv.rs new file mode 100644 index 00000000..ad0137f6 --- /dev/null +++ b/media-converter/src/videoconv.rs @@ -0,0 +1,709 @@ +/* + * Copyright (c) 2020 Valve Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its contributors + * may be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +use glib; +use glib::subclass; +use glib::subclass::prelude::*; + +use crate::format_hash; +use crate::HASH_SEED; +use crate::box_array; +use crate::BufferedReader; + +use gst; +use gst::prelude::*; +use gst::subclass::prelude::*; +use gst::EventView; +use gst::QueryView; + +use std::sync::Mutex; +use std::fs; +use std::io; +use std::io::Read; +use std::fs::OpenOptions; + +#[cfg(target_arch = "x86")] +use crate::murmur3_x86_128::murmur3_x86_128 as murmur3_128; +#[cfg(target_arch = "x86_64")] +use crate::murmur3_x64_128::murmur3_x64_128 as murmur3_128; + +use crate::fossilize; + +use once_cell::sync::Lazy; + +/* Algorithm + * --------- + * + * Nicely, both Quartz and Media Foundation allow us random access to the entire data stream. So we + * can easily hash the entire incoming stream and substitute it with our Ogg Theora video. If there + * is a cache miss, then we dump the entire incoming stream. In case of a cache hit, we dump + * nothing. + * + * Incoming video data is stored in the video.foz Fossilize database. + * + * Transcoded video data is stored in the transcoded_video.foz Fossilize database. + * + * + * Hashing algorithm + * ----------------- + * + * We use murmur3 hash with the seed given below. We use the x32 variant for 32-bit programs, and + * the x64 variant for 64-bit programs. + * + * For speed when hashing, we specify a stride which will skip over chunks of the input. However, + * we will always hash the first "stride" number of bytes, to try to avoid collisions on smaller + * files with size between chunk and stride. + * + * For example, the 'H's below are hashed, the 'x's are skipped: + * + * let chunk = 4; + * let stride = chunk * 3; + * H = hashed, x = skipped + * [HHHH HHHH HHHH HHHH xxxx xxxx HHHH xxxx xxxx HHHH xxxx] < data stream + * ^^^^ ^^^^ ^^^^ stride prefix, hashed + * ^^^^ chunk + * ^^^^ ^^^^ ^^^^ stride + * ^^^^ chunk + * ^^^^ ^^^^ ^^^^ stride + * ^^^^ chunk + * ^^^^ ^^^^ stride + */ + +/* changing any of these will invalidate the cache. you MUST clear it. */ +const HASH_CHUNK_SIZE: usize = 8 * 1024 /* to kiB */ * 1024 /* to MiB */; +const HASH_STRIDE: usize = 6 * HASH_CHUNK_SIZE; + +static CAT: Lazy = Lazy::new(|| { + gst::DebugCategory::new( + "protonvideoconverter", + gst::DebugColorFlags::empty(), + Some("Proton video converter")) +}); + +const VIDEOCONV_FOZ_TAG_VIDEODATA: u32 = 0; +const VIDEOCONV_FOZ_TAG_OGVDATA: u32 = 1; +const VIDEOCONV_FOZ_TAG_STREAM: u32 = 2; +const VIDEOCONV_FOZ_NUM_TAGS: usize = 3; + +static DUMP_FOZDB: Lazy>> = Lazy::new(|| { + let dump_file_path = match std::env::var("MEDIACONV_VIDEO_DUMP_FILE") { + Err(_) => { return Mutex::new(None); }, + Ok(c) => c, + }; + + let dump_file_path = std::path::Path::new(&dump_file_path); + + if fs::create_dir_all(&dump_file_path.parent().unwrap()).is_err() { + return Mutex::new(None); + } + + match fossilize::StreamArchive::new(&dump_file_path, OpenOptions::new().write(true).read(true).create(true), VIDEOCONV_FOZ_NUM_TAGS) { + Ok(newdb) => Mutex::new(Some(newdb)), + Err(_) => Mutex::new(None), + } +}); + +struct PadReader<'a> { + pad: &'a gst::Pad, + offs: usize, + chunk: Box<[u8; HASH_CHUNK_SIZE]>, + chunk_offs: usize, + chunk_end: usize, + stride: usize, /* set to usize::max_value() to skip no bytes */ +} + +impl<'a> PadReader<'a> { + + fn new_with_stride(pad: &'a gst::Pad, stride: usize) -> Self { + PadReader { + pad, + offs: 0, + chunk: box_array![0u8; HASH_CHUNK_SIZE], + chunk_offs: 0, + chunk_end: 0, + stride + } + } + + fn new(pad: &'a gst::Pad) -> Self { + Self::new_with_stride(pad, usize::max_value()) + } +} + +impl<'a> Read for PadReader<'a> { + fn read(&mut self, out: &mut [u8]) -> io::Result { + if self.chunk_offs >= self.chunk_end { + self.chunk_offs = 0; + self.chunk_end = 0; + + let buf = self.pad.pull_range(self.offs as u64, HASH_CHUNK_SIZE as u32); + + match buf { + Err(err) => { + /* on Eos, keep going; we'll return later */ + if err != gst::FlowError::Eos { + return Err(io::Error::new(io::ErrorKind::Other, "upstream pull_range failed" /* TODO can we print our gst err here? */)); + } + }, + Ok(buf) => { + let to_copy; + + if self.offs + buf.get_size() < self.stride { + to_copy = buf.get_size(); + self.offs += to_copy; + }else if self.offs < self.stride { + to_copy = self.stride - self.offs; + self.offs = self.stride; + }else{ + to_copy = buf.get_size(); + self.offs += self.stride; + }; + + if out.len() >= to_copy { + /* copy directly into out buffer and return */ + return Ok( + match buf.copy_to_slice(0, &mut out[0..to_copy]) { + Err(c) => c, + Ok(_) => to_copy, + }); + } else { + self.chunk_end = match buf.copy_to_slice(0, &mut (*self.chunk)[0..to_copy]) { + Err(c) => c, + Ok(_) => to_copy, + }; + } + } + } + } + + if self.chunk_offs >= self.chunk_end { + return Ok(0); + } + + let to_copy = std::cmp::min(self.chunk_end - self.chunk_offs, out.len()); + + if to_copy == 0 { + return Ok(0); + } + + if to_copy == out.len() { + out.copy_from_slice(&self.chunk[self.chunk_offs..(self.chunk_offs + to_copy)]); + }else{ + /* FIXME: there's probably some cool functional way to do this */ + for i in 0..to_copy { + out[i] = self.chunk[self.chunk_offs + i]; + } + } + + self.chunk_offs += to_copy; + + Ok(to_copy) + } +} + +struct VideoConvState { + transcode_hash: Option, + + read_fozdb: Option, + + upstream_duration: Option, + our_duration: Option, +} + +impl VideoConvState { + fn new() -> Result { + + let read_fozdb_path = std::env::var("MEDIACONV_VIDEO_TRANSCODED_FILE").map_err(|_| { + gst_loggable_error!(CAT, "MEDIACONV_VIDEO_TRANSCODED_FILE is not set!") + })?; + + let read_fozdb = match fossilize::StreamArchive::new(&read_fozdb_path, OpenOptions::new().read(true), VIDEOCONV_FOZ_NUM_TAGS) { + Ok(s) => Some(s), + Err(_) => None, + }; + + Ok(VideoConvState { + transcode_hash: None, + + read_fozdb, + + upstream_duration: None, + our_duration: None, + }) + } + + /* true if the file is transcoded; false if not */ + fn begin_transcode(&mut self, hash: u128) -> bool { + if let Some(read_fozdb) = &mut self.read_fozdb { + if let Ok(transcoded_size) = read_fozdb.entry_size(VIDEOCONV_FOZ_TAG_OGVDATA, hash) { + self.transcode_hash = Some(hash); + self.our_duration = Some(transcoded_size as u64); + return true; + } + } + + gst_log!(CAT, "No transcoded video for {}. Substituting a blank video.", format_hash(hash)); + + self.transcode_hash = None; + self.our_duration = Some(include_bytes!("../blank.ogv").len() as u64); + + false + } + + fn fill_buffer(&mut self, offs: usize, out: &mut [u8]) -> Result { + match self.transcode_hash { + Some(hash) => { + let read_fozdb = self.read_fozdb.as_mut().unwrap(); + read_fozdb.read_entry(VIDEOCONV_FOZ_TAG_OGVDATA, hash, offs as u64, out, fossilize::CRCCheck::WithoutCRC) + .map_err(|e| gst_loggable_error!(CAT, "Error reading ogvdata: {:?}", e)) + }, + + None => { + let blank = include_bytes!("../blank.ogv"); + + let remaining = blank.len() - offs; + + if out.len() <= remaining { + out.copy_from_slice(&blank[offs..(offs + out.len())]); + Ok(out.len()) + }else{ + /* FIXME: there's probably some cool functional way to do this */ + for i in 0..remaining { + out[i] = blank[offs + i]; + } + Ok(remaining) + } + }, + } + } +} + +struct VideoConv { + state: Mutex>, + sinkpad: gst::Pad, + srcpad: gst::Pad, +} + +impl ObjectSubclass for VideoConv { + const NAME: &'static str = "ProtonVideoConverter"; + type ParentType = gst::Element; + type Instance = gst::subclass::ElementInstanceStruct; + type Class = subclass::simple::ClassStruct; + + glib_object_subclass!(); + + fn with_class(klass: &subclass::simple::ClassStruct) -> Self { + let templ = klass.get_pad_template("sink").unwrap(); + let sinkpad = gst::Pad::builder_with_template(&templ, Some("sink")) + .event_function(|pad, parent, event| { + VideoConv::catch_panic_pad_function( + parent, + || false, + |videoconv, element| videoconv.sink_event(pad, element, event) + ) + }).build(); + + let templ = klass.get_pad_template("src").unwrap(); + let srcpad = gst::Pad::builder_with_template(&templ, Some("src")) + .getrange_function(|pad, parent, offset, in_buf, size| { + VideoConv::catch_panic_pad_function( + parent, + || Err(gst::FlowError::Error), + |videoconv, element| videoconv.get_range(pad, element, offset, in_buf, size) + ) + }) + .query_function(|pad, parent, query| { + VideoConv::catch_panic_pad_function( + parent, + || false, + |videoconv, element| videoconv.src_query(pad, element, query) + ) + }) + .activatemode_function(|pad, parent, mode, active| { + VideoConv::catch_panic_pad_function( + parent, + || Err(gst_loggable_error!(CAT, "Panic activating srcpad with mode")), + |videoconv, element| videoconv.src_activatemode(pad, element, mode, active) + ) + }).build(); + + VideoConv { + state: Mutex::new(None), + sinkpad, + srcpad, + } + } + + fn class_init(klass: &mut subclass::simple::ClassStruct) { + + klass.set_metadata( + "Proton video converter", + "Codec/Parser", + "Converts video for Proton", + "Andrew Eikum "); + + let mut caps = gst::Caps::new_empty(); + { + let caps = caps.get_mut().unwrap(); + caps.append(gst::Caps::builder("video/x-ms-asf").build()); + caps.append(gst::Caps::builder("video/x-msvideo").build()); + caps.append(gst::Caps::builder("video/mpeg").build()); + } + let sink_pad_template = gst::PadTemplate::new( + "sink", + gst::PadDirection::Sink, + gst::PadPresence::Always, + &caps).unwrap(); + klass.add_pad_template(sink_pad_template); + + let caps = gst::Caps::builder("application/ogg").build(); + let src_pad_template = gst::PadTemplate::new( + "src", + gst::PadDirection::Src, + gst::PadPresence::Always, + &caps).unwrap(); + klass.add_pad_template(src_pad_template); + } +} + +impl ObjectImpl for VideoConv { + glib_object_impl!(); + + fn constructed(&self, obj: &glib::Object) { + self.parent_constructed(obj); + + let element = obj.downcast_ref::().unwrap(); + element.add_pad(&self.sinkpad).unwrap(); + element.add_pad(&self.srcpad).unwrap(); + } +} + +impl ElementImpl for VideoConv { + fn change_state( + &self, + element: &gst::Element, + transition: gst::StateChange + ) -> Result { + + gst_log!(CAT, obj: element, "State transition: {:?}", transition); + + match transition { + gst::StateChange::NullToReady => { + /* do runtime setup */ + + let new_state = VideoConvState::new().map_err(|err| { + err.log(); + return gst::StateChangeError; + })?; + + let mut state = self.state.lock().unwrap(); + assert!((*state).is_none()); + *state = Some(new_state); + }, + + gst::StateChange::ReadyToNull => { + /* do runtime teardown */ + + let _ = self.state.lock().unwrap().take(); // dispose of state + }, + + _ => (), + }; + + self.parent_change_state(element, transition) + + /* XXX on ReadyToNull, sodium drops state _again_ here... why? */ + } +} + +struct StreamSerializer<'a> { + stream: &'a Vec, + cur_idx: usize, +} + +impl<'a> StreamSerializer<'a> { + fn new(stream: &'a Vec) -> Self { + StreamSerializer { + stream, + cur_idx: 0, + } + } +} + +impl <'a> Read for StreamSerializer<'a> { + fn read(&mut self, out: &mut [u8]) -> io::Result { + if self.cur_idx >= self.stream.len() { + return Ok(0) + } + + out[0..std::mem::size_of::()].copy_from_slice(&self.stream[self.cur_idx].to_le_bytes()); + self.cur_idx += 1; + + Ok(std::mem::size_of::()) + } +} + +impl VideoConv { + fn get_range( + &self, + _pad: &gst::Pad, + _element: &gst::Element, + offset: u64, + in_buf: Option<&mut gst::BufferRef>, + requested_size: u32, + ) -> Result { + + let mut state = self.state.lock().unwrap(); + + let state = match &mut *state { + Some(s) => s, + None => { return Err(gst::FlowError::Error); } + }; + + let ups_offset = self.duration_ours_to_upstream(&state, offset).unwrap(); + let ups_requested_size = self.duration_ours_to_upstream(&state, requested_size as u64).unwrap() as u32; + + /* read and ignore upstream bytes */ + self.sinkpad.pull_range(ups_offset, ups_requested_size)?; + + match in_buf { + Some(buf) => { + let readed; + + { + let mut map = buf.map_writable().unwrap(); + readed = state.fill_buffer(offset as usize, map.as_mut()) + .map_err(|e| { e.log(); gst::FlowError::Error })?; + } + + if readed > 0 || buf.get_size() == 0 { + buf.set_size(readed); + return Ok(gst::PadGetRangeSuccess::FilledBuffer); + } + + Err(gst::FlowError::Eos) + }, + + None => { + /* XXX: can we use a buffer cache here? */ + let b = gst::Buffer::with_size(requested_size as usize) + .map_err(|_| gst::FlowError::Error)?; + + let mut map = b.into_mapped_buffer_writable().unwrap(); + + let readed = state.fill_buffer(offset as usize, map.as_mut()) + .map_err(|e| { e.log(); gst::FlowError::Error })?; + + let mut b = map.into_buffer(); + + if readed > 0 || b.get_size() == 0 { + b.get_mut().unwrap().set_size(readed); + return Ok(gst::PadGetRangeSuccess::NewBuffer(b)); + } + + Err(gst::FlowError::Eos) + } + } + } + + fn sink_event( + &self, + pad: &gst::Pad, + element: &gst::Element, + event: gst::Event + ) -> bool { + gst_log!(CAT, obj:pad, "Got an event {:?}", event); + match event.view() { + EventView::Caps(_) => { + let caps = gst::Caps::builder("application/ogg").build(); + self.srcpad.push_event(gst::event::Caps::new(&caps)) + } + _ => pad.event_default(Some(element), event) + } + } + + fn query_upstream_duration(&self, state: &mut VideoConvState) { + let mut query = gst::query::Duration::new(gst::Format::Bytes); + + if self.sinkpad.peer_query(&mut query) { + /* XXX: what? */ + let res = query.get_result(); + drop(res); + state.upstream_duration = match query.get_result() { + gst::format::GenericFormattedValue::Bytes(b) => + *b, + _ => None, + } + }else{ + gst_warning!(CAT, "upstream duration query failure"); + } + } + + fn duration_ours_to_upstream(&self, state: &VideoConvState, pos: u64) -> Option { + if let Some(our) = state.our_duration { + if let Some(upstream) = state.upstream_duration { + return Some(pos * upstream / our); + } + } + None + } + + fn src_query( + &self, + pad: &gst::Pad, + element: &gst::Element, + query: &mut gst::QueryRef) -> bool + { + gst_log!(CAT, obj: pad, "got query: {:?}", query); + match query.view_mut() { + QueryView::Scheduling(mut q) => { + let mut peer_query = gst::query::Scheduling::new(); + let res = self.sinkpad.peer_query(&mut peer_query); + if ! res { + return res; + } + + let (flags, min, max, align) = peer_query.get_result(); + + q.set(flags, min, max, align); + q.add_scheduling_modes(&[gst::PadMode::Pull]); + true + }, + QueryView::Duration(ref mut q) => { + + let mut state = self.state.lock().unwrap(); + + let mut state = match &mut *state { + Some(s) => s, + None => { return false; } + }; + + if let None = state.upstream_duration { + self.query_upstream_duration(&mut state); + } + + if let Some(sz) = state.our_duration { + if q.get_format() == gst::Format::Bytes { + q.set(gst::format::Bytes::from(sz)); + return true + } + } + + false + } + _ => pad.query_default(Some(element), query) + } + } + + fn hash_upstream_data(&self) -> io::Result { + murmur3_128(&mut PadReader::new_with_stride(&self.sinkpad, HASH_STRIDE), HASH_SEED) + } + + fn dump_upstream_data(&self, hash: u128) -> io::Result<()> { + let mut db = (*DUMP_FOZDB).lock().unwrap(); + let db = match &mut *db { + Some(d) => d, + None => { gst_error!(CAT, "Unable to open fozdb!"); return Err(io::Error::new(io::ErrorKind::Other, "unable to open fozdb")); }, + }; + + let mut chunks = Vec::::new(); + + let mut reader = PadReader::new(&self.sinkpad); + + let mut buf = box_array![0u8; HASH_CHUNK_SIZE]; + loop { + let readed = reader.read(&mut *buf)?; + if readed == 0 { + break; + } + + let chunk_hash = murmur3_128(&mut BufferedReader::new(&*buf, readed), HASH_SEED)?; + chunks.push(chunk_hash); + + db.write_entry(VIDEOCONV_FOZ_TAG_VIDEODATA, chunk_hash, &mut BufferedReader::new(&*buf, readed), fossilize::CRCCheck::WithCRC) + .map_err(|e| { gst_warning!(CAT, "Error writing video data to fozdb: {:?}", e); io::Error::new(io::ErrorKind::Other, "error writing video data to fozdb") } )?; + } + + db.write_entry(VIDEOCONV_FOZ_TAG_STREAM, hash, &mut StreamSerializer::new(&chunks), fossilize::CRCCheck::WithCRC) + .map_err(|e| { gst_warning!(CAT, "Error writing stream data to fozdb: {:?}", e); io::Error::new(io::ErrorKind::Other, "error writing stream data to fozdb") } )?; + + Ok(()) + } + + fn init_transcode( + &self, + state: &mut VideoConvState + ) -> Result<(), gst::LoggableError> { + + let hash = self.hash_upstream_data(); + + if let Ok(hash) = hash { + if !state.begin_transcode(hash) { + self.dump_upstream_data(hash).map_err(|_| gst_loggable_error!(CAT, "Dumping file to disk failed"))?; + } + } + + Ok(()) + } + + fn src_activatemode( + &self, + _pad: &gst::Pad, + _element: &gst::Element, + mode: gst::PadMode, + active: bool + ) -> Result<(), gst::LoggableError> { + self.sinkpad + .activate_mode(mode, active)?; + + if mode == gst::PadMode::Pull { + let mut state = self.state.lock().unwrap(); + + let mut state = match &mut *state { + Some(s) => s, + None => { return Err(gst_loggable_error!(CAT, "VideoConv not yet in READY state?")); } + }; + + /* once we're initted in pull mode, we can start transcoding */ + self.init_transcode(&mut state)?; + } + + Ok(()) + } + +} + +pub fn register(plugin: &gst::Plugin) -> Result<(), glib::BoolError> { + gst::Element::register( + Some(plugin), + "protonvideoconverter", + gst::Rank::Marginal, + VideoConv::get_type()) +} diff --git a/proton b/proton index e7435650..32203a1a 100755 --- a/proton +++ b/proton @@ -441,6 +441,12 @@ class Session: self.env["GST_PLUGIN_SYSTEM_PATH_1_0"] = g_proton.lib64_dir + "gstreamer-1.0" + ":" + g_proton.lib_dir + "gstreamer-1.0" self.env["WINE_GST_REGISTRY_DIR"] = g_compatdata.path("gstreamer-1.0/") + if "STEAM_COMPAT_MEDIA_PATH" in os.environ: + self.env["MEDIACONV_AUDIO_DUMP_FILE"] = os.environ["STEAM_COMPAT_MEDIA_PATH"] + "/audio.foz" + self.env["MEDIACONV_AUDIO_TRANSCODED_FILE"] = os.environ["STEAM_COMPAT_MEDIA_PATH"] + "/transcoded_audio.foz" + self.env["MEDIACONV_VIDEO_DUMP_FILE"] = os.environ["STEAM_COMPAT_MEDIA_PATH"] + "/video.foz" + self.env["MEDIACONV_VIDEO_TRANSCODED_FILE"] = os.environ["STEAM_COMPAT_MEDIA_PATH"] + "/transcoded_video.foz" + if "PATH" in os.environ: self.env["PATH"] = g_proton.bin_dir + ":" + os.environ["PATH"] else: @@ -585,6 +591,18 @@ class Session: f.write("\tSTEAM_COMPAT_CLIENT_INSTALL_PATH=\"" + self.env["STEAM_COMPAT_CLIENT_INSTALL_PATH"] + "\" \\\n") if "WINE_LARGE_ADDRESS_AWARE" in self.env: f.write("\tWINE_LARGE_ADDRESS_AWARE=\"" + self.env["WINE_LARGE_ADDRESS_AWARE"] + "\" \\\n") + if "GST_PLUGIN_SYSTEM_PATH_1_0" in self.env: + f.write("\tGST_PLUGIN_SYSTEM_PATH_1_0=\"" + self.env["GST_PLUGIN_SYSTEM_PATH_1_0"] + "\" \\\n") + if "WINE_GST_REGISTRY_DIR" in self.env: + f.write("\tWINE_GST_REGISTRY_DIR=\"" + self.env["WINE_GST_REGISTRY_DIR"] + "\" \\\n") + if "MEDIACONV_AUDIO_DUMP_FILE" in self.env: + f.write("\tMEDIACONV_AUDIO_DUMP_FILE=\"" + self.env["MEDIACONV_AUDIO_DUMP_FILE"] + "\" \\\n") + if "MEDIACONV_AUDIO_TRANSCODED_FILE" in self.env: + f.write("\tMEDIACONV_AUDIO_TRANSCODED_FILE=\"" + self.env["MEDIACONV_AUDIO_TRANSCODED_FILE"] + "\" \\\n") + if "MEDIACONV_VIDEO_DUMP_FILE" in self.env: + f.write("\tMEDIACONV_VIDEO_DUMP_FILE=\"" + self.env["MEDIACONV_VIDEO_DUMP_FILE"] + "\" \\\n") + if "MEDIACONV_VIDEO_TRANSCODED_FILE" in self.env: + f.write("\tMEDIACONV_VIDEO_TRANSCODED_FILE=\"" + self.env["MEDIACONV_VIDEO_TRANSCODED_FILE"] + "\" \\\n") def dump_dbg_scripts(self): exe_name = os.path.basename(sys.argv[2]) diff --git a/user_settings.sample.py b/user_settings.sample.py index 353c5da1..874c3fe5 100755 --- a/user_settings.sample.py +++ b/user_settings.sample.py @@ -18,6 +18,11 @@ user_settings = { "WINE_MONO_TRACE": "E:System.NotImplementedException", #"MONO_LOG_LEVEL": "info", + #general purpose media logging +# "GST_DEBUG": "4", + #or, verbose converter logging (may impact playback performance): +# "GST_DEBUG": "4,protonaudioconverter:6,protonaudioconverterbin:6,protonvideoconverter:6", + #Enable DXVK's HUD # "DXVK_HUD": "devinfo,fps", diff --git a/vagrant-user-setup.sh b/vagrant-user-setup.sh index c0bd53a8..f0b73e8c 100755 --- a/vagrant-user-setup.sh +++ b/vagrant-user-setup.sh @@ -1,5 +1,7 @@ #!/bin/sh +set -e + #build and install recent mingw-w64 if [ ! -e "$HOME/.local/bin/x86_64-w64-mingw32-gcc" ]; then mkdir -p $HOME/mingw-w64-build/ @@ -7,3 +9,25 @@ if [ ! -e "$HOME/.local/bin/x86_64-w64-mingw32-gcc" ]; then #clean up the build tree, this takes up like 6GB rm -rf $HOME/mingw-w64-build/ fi + +#install rust with x86_64 and i686 targets +RUST_VERSION="1.44.1" +RUST_CARGO_HOME=$HOME/rust/cargo +RUST_RUSTUP_HOME=$HOME/rust/rustup +if [ ! -e "$RUST_CARGO_HOME" ]; then + + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > $HOME/rustup-install.sh + + #64-bit toolchain + CARGO_HOME=$RUST_CARGO_HOME RUSTUP_HOME=$RUST_RUSTUP_HOME \ + sh $HOME/rustup-install.sh -y --no-modify-path \ + --default-host "x86_64-unknown-linux-gnu" \ + --default-toolchain "$RUST_VERSION-x86_64-unknown-linux-gnu" \ + -t "i686-unknown-linux-gnu" + + cat > $HOME/.local/bin/cargo <