* typo
* - added compile time information to audio object. Not convinced this is needed actually. I'm perfectly happy just using the ffmpeg::frame object. I'm pretty sure I'm the only user who cares about audio.
- created resizing_args and resampling_args
* smaller videos for unit tests
* shorter videos for unit tests
* - decoder and demuxer: you now resize or resample at the time of read. therefore you don't set resizing or resampling parameters in constructor, but you pass them to read()
- added templated read() function
- simplified load_frame()
* inherit from resizing_args and resampling_args
* reorganised the tests to segragate decoding, demuxing, encoding and muxing as much as possible
* much more basic example
* demxing examples split
* examples
* fixing examples
* wip
* Fix load_frame()
* added frame - specific tests
* - makes sense to have a set_params() method rather than constructing a new object and moving. I mean, it works and it absolutely does the right thing, and in fact the same thing as calling set_params() now, but it can look a bit weird.
* notes on defaults and good pairings
* Update ffmpeg_demuxer.h
Watch out for `DLIB_ASSERT` statements. Maybe one of the unit tests should build with asserts enabled.
* Update ffmpeg_details.h
* Update ffmpeg_muxer.h
* WIP
* WIP
* - simplified details::resizer
- added frame::set_params()
- added frame::clear()
- forward packet directly into correct queue
* pick best codec if not specified
* added image data
* warn when we're choosing an appropriate codec
* test load_frame()
* - for some reason, you sometimes get warning messages about too many b-frames. Resetting pict_type suppresses this.
- you can move freshly decoded frames directly out.
* callback passed to push()
* I think it's prettier this way
* WIP
* full callback API for decoder
* updated tests
* updated example
* check the template parameter is callable and has 1 argument first before getting it's first argument
* Potential bug fix
* - write out the enable_if's explictly. It's fine. I think it's clear what's going on if someone cares
- guard push() with a boolean which asserts when recursion is detected
* pre-conditions on callbacks: no recursion
---------
Co-authored-by: pf <pf@me>
Co-authored-by: Your name <you@example.com>
* - enhanced list_muxers()
- added fail() error handling helper function
- moved framerate setting to decoder_image_args
* docs
* oops
* - don't use std::endl, use `\n` instead
- use fail(). See, on average, it removes lines of code
* convenient constructor for demuxer
* ffmpeg5 support
* added docs for == -1
* oops
* grouping audio channel compatibility stuff together
* more compatibility stuff
* more channel abstractions
* build with ffmpeg 5
* install assembler
* cache the installation
* cmake doesn't like using ~ in filepath
* at some point this will work
* i think i need to change the key
* test FFmpeg-n5.1.3_try3 cache
* bug fix
* Update build_cpp.yml
Giving this another go
* Update build_cpp.yml
Disable building documentation and CLI tools
* Update CMakeLists.txt
Fix cmake script when using 3.8.0 and expecting imported targets to work when there are link flags included
* - use environment variables
- on ubuntu 18 gcc7, use ffmpeg 3.2.18
* correct way of dereferencing variables ?
* can't get variables to work
* Revert "can't get variables to work"
This reverts commit 5eef96a43e.
* Revert "correct way of dereferencing variables ?"
This reverts commit e8ff95f5c6.
* Revert "- use environment variables"
This reverts commit a6938333d5.
* using ffmpeg 3.2.18 with ubuntu18 gcc7
* Update build_cpp.yml
Disable ubuntu18 job for now. Hopefully no more cancelled jobs, then i can re-enable
* Re-enabled ubuntu18 job. Hopefully this time it won't get cancelled
* Fixed bad indentation
* Can go in details namespace
* Update dlib/CMakeLists.txt
Co-authored-by: Davis E. King <davis685@gmail.com>
* use details namespace
* remove declaration. It's in details now
* don't need get_channels_from_layout()
---------
Co-authored-by: pf <pf@me>
Co-authored-by: Davis E. King <davis685@gmail.com>
* - added ffmpeg stuff to cmake
* - added observer_ptr
* ffmpeg utils
* WIP
* - added ffmpeg_decoder
* config file for test data
* another test file
* install ffmpeg
* added ffmpeg_demuxer
* install all ffmpeg libraries
* support older version of ffmpeg
* simplified loop
* - test converting to dlib object
- added docs
- support older ffmpeg
* added convert() overload
* added comment
* only register stuff when API not deprecated
* - fixed version issues
- fixed decoding
* added tests for ffmpeg_demuxer
* removed unused code
* test GIF
* added docs
* added audio test
* test for audio
* more tests
* review changes
* don't need observer_ptr
* made deps public. I could be wrong but just in case.
* - added some static asserts. Some areas of the code might do memcpy's on arrays of pixels. This requires the structures to be packed. Check this.
- added convert() functions
- changed default decoder options. By default, always decode to RGB and S16 audio
- added convenience constructor to demuxer
* - no longer need opencv
* oops. I let that slip
* - made a few functions public
- more precise requires clauses
* enhanced example
* - avoid FFMPEG_INITIALIZED being optimized away at link time
- added decoding example
* - avoid -Wunused-parameter error
* constexpr and noexcept correctness. This probably makes no difference to performance, BUT, it's what the core guidelines tell you to do. It does however demonstrate how complicated and unecessarily verbose C++ is becoming. Sigh, maybe one day i'll make the switch to something that doesn't make my eyes twitch.
* - simplified metadata structure
* hopefully more educational
* added another example
* ditto
* typo
* screen grab example
* whoops
* avoid -Wunused-parameter errors
* ditto
* - added methods to av_dict
- print the demuxer format options that were not used
- enhanced webcam_face_pose_ex.cpp so you can set webcam options
* if height and width are specified, attempt to set video_size in format_options. Otherwise set the bilinear resizer.
* updated docs
* once again, the ffmpeg APIs do a lot for you. It's a matter of knowing which APIs to call.
* made header-only
* - some Werror thing
* don't use type_safe_union
* - templated sample type
- reverted deep copy of AVFrame for frame copy constructor
* - added is_pixel_type and is_pixel_check
* unit tests for pixel traits
* enhanced is_image_type type trait and added is_image_check
* added unit tests for is_image_type
* added pix_traits, improved convert() functions
* bug fix
* get rid of -Werror=unused-variable error
* added a type alias
* that's the last of the manual memcpys gone. We'using ffmpeg API everywhere now for copying frames to buffers and back
* missing doc
* set framerate for webcam
* list input devices
* oops. I was trying to make ffmpeg 5 happy but i've given up on ffmpeg v5 compatibility in this PR. Future PR.
* enhanced the information provided by list_input_devices and list_output_devices
* removed vscode settings.json file
* - added a type trait for checking whether a type is complete. This is useful for writing type traits that check other types have type trait specializations. But also other useful things. For example, std::unique_ptr uses something similar to this.
* Davis was keen to simply check pixel_traits is specialised. That's equivalent to checking pixel_traits<> is complete for some type
* code review
* juse use the void_t in dlib/type_traits.h
* one liners
* just need is_image_check
* more tests for is_image_type
* i think this is correct
* removed printf
* better docs
* Keep opencv out of it
* keep old face pose example, then add new one which uses dlib's ffmpeg wrappers
* revert
* revert
* better docs
* better docs
---------
Co-authored-by: pf <pf@me>