Commit Graph
94 Commits
Author SHA1 Message Date
Mike-Solar 76f5c2a65b color: input colorspace auto-detection, HDR export tags, LGG/white balance nodes, more LUT formats, waveform parade
- media color primaries/transfer tags now flow from the FFmpeg probe
  through VideoParams into Footage::get_colorspace_to_use(); precedence
  is user override > media tags > project default
- export nclc tags derive from the output colorspace (PQ/HLG/BT.2020,
  P3, sRGB, Rec.601, Rec.709) instead of hardcoded BT.709
- new OCIO Color Grading (Log) node (lift/gamma/gain) and White Balance
  node (kelvin temperature + tint, HDR-safe)
- LUT whitelist extended to 9 OCIO-supported formats
- waveform scope gains an RGB parade mode (GPU and software paths)
- tests updated for the new colorspace precedence
2026-07-19 21:45:51 +08:00
Mike-Solar bb40b4923e style: unify identifier naming per updated conventions
Automated with clang-tidy readability-identifier-naming (config added to
.clang-tidy) plus scripted passes, per the updated rules now documented
in CONTRIBUTING.md:

- types (class/struct/enum/alias/template params): PascalCase
- functions, variables, members: snake_case (incl. rational -> Rational)
- private/protected members: trailing underscore; static member
  variables likewise (instance_, available_themes_)
- constants and enum values: snake_case (kLinear -> k_linear,
  F32P -> f32p); ALL_CAPS reserved for macros
- macros: OAK_ prefix (OLIVE_ADD_TEST/OLIVE_ASSERT/OLIVE_CONFIG ->
  OAK_ADD_TEST/OAK_ASSERT/OAK_CONFIG, GL_PREAMBLE -> OAK_GL_PREAMBLE,
  include guards -> OAK_*)
- file names: all lowercase (Current/Plugin/OliveHost/OliveClip/
  OlivePluginInstance -> current/plugin/olivehost/oliveclip/
  oliveplugininstance)
- getters share the member name sans underscore, setters set_foo()
- Qt and third-party (OpenFX) virtual overrides and framework callbacks
  keep their original names (exempt in .clang-tidy)

Manual follow-ups required where automation could not reach:
- string-based QMetaObject/SIGNAL/SLOT references updated to renamed
  methods (AddTask, CreatedFile, DeleteSpecificFile, moveSelectionUp, ...)
- macro bodies referencing renamed methods (OLIVE_CONFIG,
  NODE_DEFAULT_DESTRUCTOR, MANAGEDDISPLAYWIDGET_*)
- self-shadowing locals renamed where signals/methods became same-named
  (size_changed, worker_count, selected_items, import param, filters)
- third_party OFX member/namespace usages restored (OFX::Host::*,
  _created, _clipPrefsDirty, createInstance, clearPersistentMessage)
- STL protocol aliases restored (const_iterator) with .clang-tidy
  ignore rules; qHash overloads restored

Full build and test suite pass: ctest 4/4, ~1960 gtest cases green.
2026-07-19 16:10:54 +08:00
Mike-Solar 3a3ead6fc0 app: route all FFmpeg access through the ffmpeg_bridge C API
Replace every direct FFmpeg call in the editor and the render worker
with the pure C ffmpeg_bridge API, wrapped in thin C++ adapters that
preserve the original interfaces:

- avframeptr.h: olive::AVFrame adapter around FBFrame handles
- ffmpegutils: format conversion helpers on FB_* constants; the int
  overload is renamed GetCompatibleBridgePixelFormat to avoid a silent
  overload-resolution trap with the PixelFormat enum
- ffmpegdecoder/ffmpegencoder: rewritten as handle-based adapters over
  FBDecoder/FBProbe/FBEncoder/FBScaler/FBResampler
- audioprocessor: FBAudioGraph push/pull adapter
- pluginrenderer/OliveClip: sws/pixdesc usage converted to FBScaler and
  fb_pix_fmt_* queries
- AudioParams/channel layouts are plain uint64_t masks everywhere

Build integration: the root project no longer links FFMPEG directly;
only ffmpeg_bridge does. Binaries resolve the bridge library at runtime
via @loader_path inside the macOS app bundle (copied there post-build)
and via $ORIGIN/../ffmpeg_bridge/bin on Linux; on Windows the DLL is
installed next to the executables, so packages on all three platforms
ship the bridge library.

ffmpeg_bridge gains the extra API the adapters need:
fb_frame_make_writable, fb_decoder_get_format_duration,
fb_resampler_convert_frame, FB_PIX_FMT_YUV440P, SRT validation in
fb_probe_read_subtitle_stream, packed/planar fixes in
fb_encoder_write_audio, and a component-size fix in
fb_pix_fmt_component_size.
2026-07-15 23:00:06 +08:00
孙羽 116a4b8368 fix windows compile 2026-05-27 21:34:09 +08:00
Mike-Solar bfb1b2fce4 update copyright back 2026-01-16 21:22:05 +08:00
Mike-Solar b8669f6a11 Change project name; 2026-01-05 16:22:26 +08:00
Mike Solar 22fd521951 Merge branch 'refs/heads/dev' into plugin
# Conflicts:
#	.gitmodules
#	CMakeLists.txt
#	ext/core
2025-12-13 21:45:46 +08:00
Mike-Solar 2ea53667c0 Refactor FFmpeg decoder for improved readability and efficiency
Simplify the frame reading process and metadata extraction in `ffmpegdecoder.cpp` by reducing redundant code and improving variable initialization. Add a helper function in `ffmpegdecoder.h` to map FFmpeg field orders to Olive interlacing types, enhancing code clarity. Adjust the condition for interleaved write in `ffmpegencoder.cpp` for better handling.
2025-11-10 21:06:35 +08:00
Mike Solar 6fdfd03ffd update: update copyright 2025-08-05 17:12:49 +08:00
Mike Solar 74f73ab3be change: change code style to Linux style except indent. 2025-08-03 03:09:40 +08:00
Mike Solar c04fceef9b 试图解决编译错误 2025-06-18 20:42:45 +08:00
Mike Solar 5f9508434f 试图解决编译错误 2025-06-18 08:54:06 +08:00
itsmattkc fa88db42e4 Merge pull request #1943 from jazztickets/av1
AV1 export support
2023-02-08 13:03:51 -08:00
itsmattkc c322bb6463 exportdialog: fixed UI issue that allowed "sidecar" files on direct subtitle exports 2023-02-06 17:27:27 -08:00
jazztickets 9959f15bc4 Merge branch 'master' into av1 2023-01-30 14:04:15 -07:00
itsmattkc c1c6893713 various: moved more to core lib 2023-01-19 16:01:31 -08:00
itsmattkc dd9c52ab59 start moving core frameworks to external libraries 2023-01-19 09:51:47 -08:00
jazztickets d54465b16a Merge branch 'olive-editor:master' into av1 2022-11-25 11:18:49 -07:00
itsmattkc ca47792dc7 nodes: clamp footage retrieval times for clips
Fixes #2070
2022-11-01 12:44:01 -07:00
itsmattkc e94580c369 ffmpegencoder: split sample buffer when writing audio
Avoids integer overflow in FFmpeg

Fixes #2072
2022-10-29 12:07:55 -07:00
itsmattkc 972ec1e340 ffmpegencoder: catch error on sample array alloc 2022-10-29 11:36:09 -07:00
jazztickets b901762df9 Merge branch 'olive-editor:master' into av1 2022-09-07 17:26:09 -06:00
itsmattkc 409f24be39 exportdialog: allow restoring parameters 2022-08-10 11:49:21 -07:00
itsmattkc 1ac205413c footage: allow overriding YCbCr range
Fixes #1354
2022-08-08 12:49:50 -07:00
itsmattkc 73fa930f02 ffmpegencoder: use avfilter instead of swscale for pixel format conversions 2022-08-07 14:00:12 -07:00
itsmattkc 91eaa759b7 ffmpegencoder: various improvements 2022-07-27 13:39:27 -07:00
Thomas Wilshaw fb34a4b799 Reset transfer tag 2022-07-27 14:17:06 +01:00
Thomas Wilshaw 9fa1ce00e5 Add basic nclc tag support
Sets nclc tags based on the selected output color space.

Also adds a Rec.709 OETF to the config
2022-07-26 20:19:23 +01:00
itsmattkc 187568324a render: ensure correct yuv range handling 2022-07-20 23:16:08 -07:00
itsmattkc 5ea97f7a64 render: remove alpha request option 2022-07-20 23:14:16 -07:00
Alan Witkowski 307c393996 fallback to default av1 encoder if libsvtav1 isn't found 2022-05-30 16:46:13 -06:00
Alan Witkowski 6dbe01f415 preliminary AV1 support 2022-05-30 13:45:25 -06:00
itsmattkc c75ee6014c ffmpeg: bypass ass encoding for srt
Fixes #1927
2022-05-14 08:56:06 -07:00
itsmattkc 8e642c82f8 Merge pull request #1914 from luzpaz/typos
Fix misc. source comment typos
2022-05-13 08:23:18 -07:00
itsmattkc 4b366a9b73 update copyright year to 2022 2022-05-10 10:38:56 -07:00
itsmattkc bb0fedabba simplified and optimized samplebuffer 2022-05-09 14:55:51 -07:00
itsmattkc 591d02bdd6 audiomanager: fix crash and return error text if applicable 2022-05-05 11:47:53 -07:00
luz paz 19dc803020 Fix misc. source comment typos 2022-05-04 19:53:53 -04:00
itsmattkc b290c4d007 audio: extended support for planar/packed formats 2022-05-03 13:41:27 -07:00
itsmattkc ef515579df completed audio recording implementation 2022-05-02 17:05:11 -07:00
itsmattkc 9101f5dc49 implemented core audio recording support 2022-05-02 14:00:03 -07:00
itsmattkc 03f0ec9f64 ffmpeg: updated for 5.0 2022-02-17 14:53:12 -08:00
Quackdocanditsmattkc 249006c685 Cineform support (#1853)
* Cineform Support

Add default cineform support

* Revert "Cineform Support"

This reverts commit f810358b7997ea2d996a3dbbae21252c9f37e7e9.

* Cineform Support

Add default cineform support

* Do not expose DNxHD yet

* ExportDialog: Add CineformSection

Co-authored-by: itsmattkc <34096995+itsmattkc@users.noreply.github.com>
2022-02-02 09:58:13 -08:00
itsmattkc f5eaf9c6aa ffmpeg: use hex for encoder error 2021-11-17 12:30:19 -08:00
itsmattkc 222c62fa80 ffmpeg: find x264 specifically 2021-10-24 13:29:50 -07:00
Cobalt Space 8a91932889 use encoder, not decoder, and add to mpeg4 2021-10-22 15:35:03 -07:00
Cobalt Space b9766bf585 add H.264 RGB export using libx264rgb 2021-10-08 19:38:02 -07:00
itsmattkc e4bf8a92f3 ffmpegencoder: set avg_frame_rate 2021-08-08 12:14:11 -07:00
itsmattkc 5c5f6bd0c3 ffmpegencoder: set gop size 2021-08-08 11:08:16 -07:00
itsmattkc a0bd9b5d8c ffmpegencoder: rescale audio frames just in case 2021-08-08 11:07:57 -07:00