- 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
-
- 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
-
- 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
- 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