StormByte C++ Library: Multimedia module 0.0.9999
StormByte-Multimedia is a StormByte library module for parsing configuration files
Loading...
Searching...
No Matches
AVFilterGraph.hxx
Go to the documentation of this file.
1/*
2 * Copyright (C) 2024-2026 David C. Manuelda (StormBytePP)
3 *
4 * This file is part of StormByte-Multimedia.
5 *
6 * StormByte-Multimedia original source is dual-licensed:
7 *
8 * 1. GNU Lesser General Public License v3.0 (or later)
9 * You may redistribute and/or modify this file under the terms of the
10 * GNU Lesser General Public License as published by the Free Software
11 * Foundation, either version 3 of the License, or (at your option)
12 * any later version.
13 *
14 * 2. Commercial license
15 * Alternatively, this file may be used under the terms of a commercial
16 * license agreement with the copyright holder
17 * (David C. Manuelda <StormByte@gmail.com>).
18 *
19 * Both licenses apply only to original StormByte-Multimedia source in this
20 * file. Third-party components — including FFmpeg and embedded trained data —
21 * remain under their own licenses and are not covered by the commercial grant.
22 *
23 * Neither license grants any patent rights. Any patent licenses required
24 * to use this software or third-party components must be obtained separately
25 * from the patent holders.
26 *
27 * StormByte-Multimedia is distributed in the hope that it will be useful,
28 * but WITHOUT ANY WARRANTY; without even the implied warranty of
29 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30 * GNU Lesser General Public License for more details.
31 *
32 * You should have received a copy of the GNU Lesser General Public License
33 * version 3 along with StormByte-Multimedia. If not, see
34 * <https://www.gnu.org/licenses/lgpl-3.0.html>.
35 *
36 * SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-StormByte-Commercial
37 */
38
39#pragma once
40
44
45#include <cstdint>
46#include <string>
47#include <string_view>
48
54 class AVFrame;
55
81 class STORMBYTE_MULTIMEDIA_PUBLIC AVFilterGraph: public AVPointer<::AVFilterGraph> {
82 public:
87 AVFilterGraph(AVFilterGraph&& other) noexcept;
88
92 ~AVFilterGraph() noexcept override;
93
99 AVFilterGraph& operator=(AVFilterGraph&& other) noexcept;
100
104 AVFilterGraph(const AVFilterGraph&) = delete;
105
109 AVFilterGraph& operator=(const AVFilterGraph&) = delete;
110
115 explicit operator bool() const noexcept;
116
126 static AVFilterGraph Open(const AVFrame& src, std::string_view graph) noexcept;
127
134 bool Ensure(const AVFrame& src, std::string_view graph) noexcept;
135
142 bool Filter(const AVFrame& src, AVFrame& dst) const noexcept;
143
152 bool Flush(AVFrame& dst) noexcept;
153
154 private:
159 explicit AVFilterGraph(::AVFilterGraph* graph) noexcept;
160
164 AVFilterGraph() = delete;
165
169 void Free() noexcept override;
170
171 using AVPointer<::AVFilterGraph>::Get;
172
173 ::AVFilterContext* m_src = nullptr;
174 ::AVFilterContext* m_sink = nullptr;
175 int m_w = 0;
176 int m_h = 0;
177 int m_fmt = 0;
178 int m_rate = 0;
179 int m_ch = 0;
180 std::uint64_t m_mask = 0;
181 std::string m_graph;
182 bool m_closed = false;
183 };
184
185 extern template class STORMBYTE_MULTIMEDIA_PUBLIC AVPointer<::AVFilterGraph>;
186}
bool Flush(AVFrame &dst) noexcept
Closes the source once and pulls one flushed frame into dst.
AVFilterGraph(AVFilterGraph &&other) noexcept
Move constructor.
bool Ensure(const AVFrame &src, std::string_view graph) noexcept
Rebuilds if geometry, format, layout or chain changed.
static AVFilterGraph Open(const AVFrame &src, std::string_view graph) noexcept
Builds a graph for src.
~AVFilterGraph() noexcept override
Destructor.
RAII owner of a libav AVFrame.
Definition AVFrame.hxx:98
constexpr const std::decay_t< ::AVFilterGraph > * Get() const noexcept
Definition AVPointer.hxx:118
Incomplete FFmpeg types for RAII headers.
Frame and packet steps attached to a job or a raw pipeline.
Private RAII wrappers over libav*.
#define STORMBYTE_MULTIMEDIA_PUBLIC
Imported symbol.
Definition visibility.h:47