Git Product home page Git Product logo

reel's Introduction

Reel running on Fedora KDE

Reel

Screen capture software for Linux / Wayland


⚠️ Early development warning ⚠️

If you're interested in this project now you can checkout one of the following.

Goals

  • Visually beautiful, responsive and efficient
  • Easy to build and package. Reduced number of build and runtime dependencies
  • Support and keep up to date with all relevant Wayland and Vulkan extensions / protocols
  • Support Wayland compositor specific extensions
  • Control with scripts over an IPC interface

Installation

First install the required dependencies for your distribution.

To build, you'll need a master build of the zig compiler. The latest verified version is 0.12.0-dev.1607, but if out of date will be updated soon.

git clone https://github.com/kdchambers/reel --recursive
cd reel
zig build run -Doptimize=ReleaseSafe

reel's People

Contributors

kdchambers avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

reel's Issues

Rename from Reel

Reel sound rather generic to me, and currently is only a placeholder name. This issue is to decide on a final name for the product and update all references to "Reel" in this repo.

Audio input backends

Implement the audio input interface for all Audio backends on Linux

  • Pulse
  • Pipewire
  • Jack
  • Alsa

Audio input widget

Implement a widget that visualises the volume of the microphone in real time.

renderer: Allow setting color for text and icons

Currently text and icon are treated as if full images that are supposed to be mapped exactly as-is. The renderer should be updated so that these textures are uploaded as a 1-channel image and color is set on a per-vertex basis

Fullscreen causes application to freeze and not update UI

Steps to reproduce:

Using sway, open the application and press the full-screen shortcut (Mod+f).

Expected:

Application runs as normal and remains responsive. Will resize framebuffer when application window is resized

Actual:

Application stops being responsive and updating UI in any way

encoder: flicking between multiple sources in recording

To reproduce:

  1. Add a screencast source
  2. Add a webcam source
  3. Click record

Expected:

The webcam source is always visible above the screencast source as it was added after it

Actual:

There is some flickering where the screencast source is visible over the webcam source.

NOTE: This behavior isn't present in the preview image, only in the recording.

encoder: Suboptimal YUV downscaling resulting in unaccurate colors

When converting from RGBA to NV12 (Y420), the UV values are downscaled by 2 horizontally and vertically. The current implementation just averages the values of each 2x2 pixel block.

As a result, pixel blocks that contain very distinct colors end up getting interpolated into colors that don't exist in the block at all. The simple linear interpolation should be replaced with something more sophisticated to improve this.

encoder: Remove requirement for VAAPI

Currently if there isn't support for VAAPI the application isn't able to record. Support for non-hardware accelerated video encoding should be brought back

Webcam input

Implement reading from webcam and displaying on screen

Allow user to select video quality

ffmpeg / libav provides options for what the quality / compression of the video should be. This should be exposed to the UI so that at the very least the user can select a quality of high, medium and low.

Decouple User Interface from application core

Allow for specifying what interface to use at runtime. Examples would be headless, cli and wayland_vulkan

Headless would basically be no UI, and you can only interact with the core via IPC.

renderer: Implement depth culling

The current renderer uses the painters algorithm to place objects in front of others. This method doesn't scale well however and should be replaced with proper depth culling

Renderer: Replace f32 with more compact type in GenericVertex

GenericVertex type stores both UV and Color values using f32. I think it would be more efficient to store these values as ints and do the conversion in the shader. Issue is to investigate this claim and refactor if there are no found performance detriments.

For color: Store as u8 and in shader divide by 255
For UV: Store as u16 and divide by texture dimensions (Can be hardcoded into shader or passed as push constants)

Current GenericVertex definition:

pub const GenericVertex = extern struct {
    x: f32 = 1.0,
    y: f32 = 1.0,
    tx: f32 = 1.0,
    ty: f32 = 1.0,
    color: RGBA(f32) = .{
        .r = 1.0,
        .g = 1.0,
        .b = 1.0,
        .a = 1.0,
    },
};

Audio / Video sometimes out of sync

Using the wayland frame callback to set the PTS isn't very reliable because we aren't given assurances about how often it will be called. Better to switch to calculating pts manually from timestamps

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.