Files
workinf_Blender_Wasm/blender-5.2.0/extern/audaspace/plugins/ffmpeg/FFMPEG.cpp
mes123456 f3e21c6b98
Some checks failed
M6 deployable RC / quick (push) Has been cancelled
M6 deployable RC / chromium (push) Has been cancelled
M6 deployable RC / release (push) Has been cancelled
chore: checkpoint web Blender migration source, tools and docs
Accumulated uncommitted work: GHOST Web backend, WebGL/GPU web layer,
web workflow engine and protocol, tooling, docs and task records.
Large generated evidence, user-testing archives, build snapshots and
imported test assets remain untracked.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-11-10 11:18:01 +08:00

85 lines
2.6 KiB
C++

/*******************************************************************************
* Copyright 2009-2024 Jörg Müller
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
#include "FFMPEG.h"
#include "FFMPEGReader.h"
#include "FFMPEGWriter.h"
#include "file/FileManager.h"
#include "Exception.h"
AUD_NAMESPACE_BEGIN
FFMPEG::FFMPEG()
{
#if LIBAVCODEC_VERSION_MAJOR < 58
av_register_all();
#endif
}
void FFMPEG::registerPlugin()
{
std::shared_ptr<FFMPEG> plugin = std::shared_ptr<FFMPEG>(new FFMPEG);
FileManager::registerInput(plugin);
FileManager::registerOutput(plugin);
}
std::shared_ptr<IReader> FFMPEG::createReader(const std::string &filename, int stream)
{
return std::shared_ptr<IReader>(new FFMPEGReader(filename, stream));
}
std::shared_ptr<IReader> FFMPEG::createReader(std::shared_ptr<Buffer> buffer, int stream)
{
return std::shared_ptr<IReader>(new FFMPEGReader(buffer, stream));
}
std::vector<StreamInfo> FFMPEG::queryStreams(const std::string &filename)
{
return FFMPEGReader(filename).queryStreams();
}
std::vector<StreamInfo> FFMPEG::queryStreams(std::shared_ptr<Buffer> buffer)
{
return FFMPEGReader(buffer).queryStreams();
}
std::shared_ptr<IWriter> FFMPEG::createWriter(const std::string &filename, DeviceSpecs specs, Container format, Codec codec, unsigned int bitrate)
{
#ifdef __EMSCRIPTEN__
// Preserve the linked libsndfile writer's CBR, Vorbis bitrate and PCM
// semantics. FFmpeg owns the additional containers and Ogg/FLAC only.
if(format != CONTAINER_AAC && format != CONTAINER_AC3 &&
format != CONTAINER_MP2 && format != CONTAINER_MATROSKA &&
!(format == CONTAINER_OGG && codec == CODEC_FLAC))
AUD_THROW(FileException, "This container uses the native libsndfile writer.");
#endif
return std::shared_ptr<IWriter>(new FFMPEGWriter(filename, specs, format, codec, bitrate));
}
#ifdef FFMPEG_PLUGIN
extern "C" AUD_PLUGIN_API void registerPlugin()
{
FFMPEG::registerPlugin();
}
extern "C" AUD_PLUGIN_API const char* getName()
{
return "FFMPEG";
}
#endif
AUD_NAMESPACE_END