UltraGrid
UltraGrid Low-Latency High-Resolution Transmission System
Loading...
Searching...
No Matches
Todo List
File aja.cpp
Capture what is on the wire (RGB if RGB, YCbCr otherwise)
Member audio_cap_wasapi_probe (struct device_info **available_devices, int *dev_count, void(**deleter)(void *))
This may be rather id than index
Member audio_play_alsa_reconfigure (void *state, struct audio_desc desc)
Consider using snd_pcm_hw_params_set_buffer_time_first() by default, it works fine with PulseAudio. However, may underrun with different drivers/devices (Juli@?) where the buffer size is significantly lower.
Member audio_play_wasapi_probe (struct device_info **available_devices, int *dev_count, void(**deleter)(void *))
This may be rather id than index
Class AudioDriftFixer
  • handle network losses
  • handle underruns
  • what about jitter - while computing the dst sample rate, the sampling interval (m_total) must be "long"
Member av_to_uv_convert_cuda (struct av_to_uv_convert_cuda *state, char *__restrict dst_buffer, AVFrame *__restrict in_frame, int width, int height, int pitch, const int *__restrict rgb_shift)
replace with actual CUDA stuff
File blend.cpp
Rewrite the code to have more clear state machine!
Member BLUEFISH444_MAGIC
RGBA and v210 seem to be supported by reconfigure but not advertised by get_property.
Member BUFFERS
  • consider using v4l2_ family of functions (such as v4l2_open) - but v4l2_open currently fails witn v4l2loopback on first open (perhaps because it is non-compliant implementation). We perhaps don't need conversions, so the advantage would be (in display) perhaps only better verbosity (v4l2_log_file) and error checking (?).
  • do we want v4lconvert? (perhaps not)
Member change_pixfmt (AVFrame *frame, unsigned char *dst, av_to_uv_convert_t *convert, codec_t out_codec, int width, int height, int pitch, int rgb_shift[static restrict 3], struct state_libavcodec_decompress_sws *sws)
figure out color space transformations - eg. JPEG returns full-scale YUV. And not in the ITU-T Rec. 701 (eventually Rec. 609) scale.
File cmpto_j2k.cpp
  • check support for multiple CUDA devices with CUDA buffers
Member codec_conversion_test_testcard_uyvy_to_i420 (void)
Check also if chroma is horizontally interpolated in UV planes
Member compare (const void *a, const void *b, void *ctx)
more fine-grained comparison when there will be more than 2 alternative codecs
Member compress_process_message (struct compress_state *proxy, struct msg_change_compress_data *data)
Handle responses more inteligently (eg. aggregate).
Member copylineYUVtoRGB (dst, src, dst_len, y1_off, y2_off, u_off, v_off, rgb16)
make it faster if needed
File coreaudio.cpp
Remove deprecated instances of ca-disable-adaptive-buf after some transitio period.
Member cuda_conv_enabled ()
TOREMOVE after cuda conversions implemented
Member decklink_supports_codec (T *deckLink, BMDPixelFormat pf)
For UltraStudio Pro DoesSupportVideoMode returns E_FAIL on not supported pixel formats instead of setting supported to false.
File decklink_temperature.cpp
Now most of the devices doesn't implement temperature interface. When it does, consider merging this to UltraGrid. (Also check usual range and units - some warning about overheating can be issued.)
Member decode_audio_frame (struct coded_data *cdata, void *data, struct pbuf_stats *stats)

do we really want to scale to expected buffer length even if some frames are missing at the end of the buffer

this will certainly result in a syscall, maybe use some pool?

Member display_gl_init_opengl (struct state_gl *s)
remove/revert when no needed (see particular commit message
Member display_gl_set_window_hints (struct state_gl *s)
TOREMOVE
Member DISPLAY_MAGIC
On-fly postprocess reconfiguration is not ok in general case. The pitch or supported codecs might have changed due to the reconfiguration, which is, however, not reflected by decoder which queried the data before.
File dump.c
Add audio support
Member dxt_decoder_create (enum dxt_type type, int width, int height, enum dxt_format out_format, int legacy)
Free other stuff as well
Member dxt_encoder_create (enum dxt_type type, int width, int height, enum dxt_format format, int legacy)
What about generated textures etc. ?
File file.c
  • audio-only input
Member format_interl_fps_hdr_row (enum interlacing_t interlacing, double input_fps)
make use of this value (for now it is always one)
File from_lavc_vid_conv.c
Some conversions to RGBA ignore RGB-shifts - either fix that or deprecate RGB-shifts
Member get_ansi_code ()
  • improve coverage and/or find some suitable implemnation (ideally one file, not ncurses)
  • the function can be moved to separate util file
Member get_sched_latency_ns (void)
the file /proc/sys/kernel/sched_latency_ns is no longer present in current Linuxes - remove the function?
Member GL_WINDOW_HINT_OPT_PARAM_NAME
TOREMOVE
Member il_lower_to_merged (char *dst, char *src, int linesize, int height, void **stored_state)
Needs to be more efficient
Class image_pattern_ebu_smpte_bars< f, columns >
Proper SMPTE test pattern has different in bottom third.
File import.c
There is a race condition between audio and video when seeking the stream. Audio may be seeked and video not yet (or vice versa). Since those parts are independent, ther will perhaps be needed to have _getf() and seek completion mutually exclusive. Perhaps not much harmfull, seems that it could cause at most 1 frame AV-desync.
Member is_utf8 (int64_t ch)
UTF-8 validity check would be nice
File jack.c
It looks like there is no jack_stop()?
Member jack_receive (void *state, void *data)
repair this
Member kernel_rg48_to_r12l (uint8_t *in, uint8_t *out, unsigned size_x)
fix the last block for widths not divisible by 8
File keyboard_control.cpp

Consider using some abstraction over terminal control mainly because differencies between Linux and Windows (ANSI mode or terminfo?)

  • key should not be overriden (eg. preset and custom)
  • preset keys and customs ones should be unified (in key mapping)
Member keycontrol_send_key (struct module *root, int64_t key) __attribute__((used))
all UG core functions should have the 'used' attribute
File lavc_common.c
Some conversions to RGBA ignore RGB-shifts - either fix that or deprecate RGB-shifts
File lavc_video.c
Some conversions to RGBA ignore RGB-shifts - either fix that or deprecate RGB-shifts
Member libavcodec_decompress_get_priority (codec_t compression, struct pixfmt_desc internal, codec_t ugc)
This should be take into account existing conversions.
Member MAX_QUEUE_LEN
  • the data is 2x copied
Member MINIMAL_VALUE
Check why doesn't lower values work out
Member MOD_NAME
The XGetImage() is a bit slow, consider using XShm as OBS does.
Member MS_IN_NS
The naming is inconsistent - whereas US_IN_NS is the 1 us represented in ns, MS_IN_SEC is count of milliseconds in a second. Unifiy the use.
File ndi.cpp
Parsing IPv6 URLs (vidcap_state_ndi::requested_url) - what is the syntax? Looks like NDI doesn't support that yet (question is the position of ":" which delimits host and port)
Member Node::Node (Tanner_graph *t, Node_type type, char *data)
remove, it is no longer used
Member operator>> (std::istream &is, video_desc &desc)
regex matching would be better
Member parallel_pix_conv (int height, char *out, int out_linesize, const char *in, int in_linesize, decoder_t decode, int threads)
utilize respawn_parallel
Union param_u
get rid of this altogether and pass 2 structs (common + video_rxtx opts)
Member parse_fmt (int argc, char **argv, struct cmdline_parameters *parsed) noexcept(false)
Use rather getopt() than manual parsing.
Member perform_df (struct state_df *s, struct video_frame *in, struct video_frame *out, int req_pitch)
perhaps suboptimal
Member print_libav_audio_error (int verbosity, const char *msg, int rc)
Remove and use the global print_libav_error. Dependencies need to be resolved first.
Member reset_import (struct vidcap_import_state *s)

This stuff is very ugly, rewrite it

what to do here

Member resource_symbol
Perhaps remove the whole stuff (+ resouce manager). This used to be used to solve some crashes with access to X11 from within multiple threads (IIRC RTDXT and X11-based display - GL/SDL?).
File screen_win.c
  • add more formats
  • load the dll even if working directory is not the dir with the DLL
File sdl2.c
Missing from SDL1:
  • audio (would be perhaps better as an audio playback device)
  • autorelease_pool (macOS) - perhaps not needed
Member SDL2_DEINTERLACE_IMPOSSIBLE_MSG_ID
remove the defines when no longer needed
File sdp.c
  • consider using serverStop() to stop the thread - likely doesn't work now
  • createResponseForRequest() should be probably static (in case that other modules want also to use EmbeddableWebServer)
Member state_decklink::timecode
Should be actually allocated dynamically and
Member state_video_decoder::frame
rewrite this more reasonably
File swmix.c

Reenable configuration file position matching.

Refactor to use also different scalers than OpenGL (eg. libswscale)

File testcard.c
  • fix broken tiling (perhaps wrapper over pattern generator)
File testcard2.c
Merge to mainline testcard.
File text.c
Add more options - eg. text position and size. Add support for more pixel formats.
Member udp_reader (void *arg)
In MSW, this block is called as often as packet is sent if we got WSAECONNRESET error (noone is listening). This can have negative performance impact.
Page UltraGrid packet format
Custom PT allocation seems to be wrong - 20-23, although unassigned, should be used for audio, 24+ for video but 25, 26 (JPEG) and 28 are registered (see RFC 3551, section 6). PT_ENCRYPT_VIDEO_LDGM was moved from 26 to 29.
Member ultragrid_rtp_video_rxtx::receiver_process_messages ()
should be set only to relevant participant, not all
Member urlencode (char *out, size_t max_len, const char *in, int(*eval_pass)(int c), bool space_plus_replace)
There may be a LUT as in https://rosettacode.org/wiki/URL_encoding#C
Member vc_copylineUYVYtoGrayscale (unsigned char *__restrict dst, const unsigned char *__restrict src, int dst_len, int rshift, int gshift, int bshift)
is this correct??
Member vc_copylineUYVYtoRGB_SSE (unsigned char *__restrict dst, const unsigned char *__restrict src, int dst_len, int rshift, int gshift, int bshift)
make it faster if needed
Member VDEC_PRIO_NOT_PREFERRED
consider removing this - as this is after probe, the CS conv will be needed for all decoders (so it will not differentiate)
Member vidcap_dshow_state::convert_YUYV_RGB
check - currently newer set
File video_decoders.cpp
This code is very very messy, it needs to be rewritten.
File video_pattern_generator.cpp
Do the rendering in 16 bits
Member video_reading_thread (void *args)
are these checks necessary?
Member VideoDelegate::VideoInputFrameArrived (IDeckLinkVideoInputFrame *, IDeckLinkAudioInputPacket *) override
videoFrame should be actually retained until the data are processed
File vo_postprocess.c
Fix complex filters that 1. change video properties (tiling mode, codec) or
  1. producing more frames (eg. double_framerate).
Member vo_postprocess_get_property (struct vo_postprocess_state *, int property, void *val, size_t *len)
This is not corrrect in a generic case - the codec may be acceptable for first filter but the output of the filter may be unacceptable for the following filter (or later on).
File vulkan_sdl2.cpp
Missing from SDL1:
  • audio (would be perhaps better as an audio playback device)
File wasapi.cpp
Probe and help are almost similar - consolide common code.
File wasapi.cpp

Code for probe and help is very similar - consolidate.

Audio buffer length should be rather adaptive to length of incoming frames.

Member worker_pool::run_async (runnable_t task, void *data, bool detached)
: really weird - it seems like that 'it' instead of 'w' caused some problems