mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-07 23:35:03 +01:00
NO-OP: clang-format
This commit is contained in:
parent
0f7229fb02
commit
cc69274234
2 changed files with 56 additions and 52 deletions
|
|
@ -29,22 +29,24 @@
|
||||||
|
|
||||||
namespace ARDOUR {
|
namespace ARDOUR {
|
||||||
|
|
||||||
class LIBARDOUR_API FFMPEGFileImportableSource : public ImportableSource {
|
class LIBARDOUR_API FFMPEGFileImportableSource : public ImportableSource
|
||||||
|
{
|
||||||
public:
|
public:
|
||||||
enum {
|
enum {
|
||||||
ALL_CHANNELS = -1,
|
ALL_CHANNELS = -1,
|
||||||
};
|
};
|
||||||
FFMPEGFileImportableSource(const std::string &path, int channel = ALL_CHANNELS);
|
|
||||||
virtual ~FFMPEGFileImportableSource();
|
FFMPEGFileImportableSource (const std::string& path, int channel = ALL_CHANNELS);
|
||||||
|
|
||||||
|
virtual ~FFMPEGFileImportableSource ();
|
||||||
|
|
||||||
/* ImportableSource API */
|
/* ImportableSource API */
|
||||||
|
samplecnt_t read (Sample*, samplecnt_t nframes);
|
||||||
uint32_t channels () const { return _channels; }
|
uint32_t channels () const { return _channels; }
|
||||||
samplecnt_t length () const { return _length; }
|
samplecnt_t length () const { return _length; }
|
||||||
samplecnt_t samplerate () const { return _samplerate; }
|
samplecnt_t samplerate () const { return _samplerate; }
|
||||||
samplepos_t natural_position () const { return _natural_position; }
|
|
||||||
void seek (samplepos_t pos);
|
void seek (samplepos_t pos);
|
||||||
samplecnt_t read (Sample*, samplecnt_t nframes);
|
samplepos_t natural_position () const { return _natural_position; }
|
||||||
|
|
||||||
bool clamped_at_unity () const { return false; }
|
bool clamped_at_unity () const { return false; }
|
||||||
|
|
||||||
std::string format_name () const { return _format_name; }
|
std::string format_name () const { return _format_name; }
|
||||||
|
|
@ -65,20 +67,21 @@ private:
|
||||||
std::string _format_name;
|
std::string _format_name;
|
||||||
|
|
||||||
PBD::RingBuffer<Sample> _buffer;
|
PBD::RingBuffer<Sample> _buffer;
|
||||||
// Set to 1 to indicate that ffmpeg should be terminating.
|
/* Set to 1 to indicate that ffmpeg should be terminating. */
|
||||||
GATOMIC_QUAL gint _ffmpeg_should_terminate;
|
GATOMIC_QUAL gint _ffmpeg_should_terminate;
|
||||||
|
|
||||||
// To make sure we don't try to parse partial floats, we might have a couple of bytes
|
/* To make sure we don't try to parse partial floats, we might have a couple of bytes
|
||||||
// of leftover unparsable data after any `did_read_data` call. Those couple of bytes are
|
* of leftover unparsable data after any `did_read_data` call. Those couple of bytes are
|
||||||
// stored here until the next `did_read_data` call.
|
* stored here until the next `did_read_data` call.
|
||||||
|
*/
|
||||||
std::string _leftover_data;
|
std::string _leftover_data;
|
||||||
|
|
||||||
samplecnt_t _read_pos;
|
samplecnt_t _read_pos;
|
||||||
|
|
||||||
ARDOUR::SystemExec *_ffmpeg_exec;
|
ARDOUR::SystemExec* _ffmpeg_exec;
|
||||||
PBD::ScopedConnection _ffmpeg_conn;
|
PBD::ScopedConnection _ffmpeg_conn;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
} // namespace ARDOUR
|
||||||
|
|
||||||
#endif /* _ardour_ffmpegfile_importable_source_h_ */
|
#endif /* _ardour_ffmpegfile_importable_source_h_ */
|
||||||
|
|
|
||||||
|
|
@ -19,21 +19,22 @@
|
||||||
#include <boost/property_tree/json_parser.hpp>
|
#include <boost/property_tree/json_parser.hpp>
|
||||||
#include <glibmm.h>
|
#include <glibmm.h>
|
||||||
|
|
||||||
#include "pbd/error.h"
|
|
||||||
#include "pbd/compose.h"
|
#include "pbd/compose.h"
|
||||||
|
#include "pbd/error.h"
|
||||||
#include "pbd/i18n.h"
|
#include "pbd/i18n.h"
|
||||||
|
|
||||||
#include "ardour/ffmpegfileimportable.h"
|
#include "ardour/ffmpegfileimportable.h"
|
||||||
#include "ardour/filesystem_paths.h"
|
#include "ardour/filesystem_paths.h"
|
||||||
|
|
||||||
namespace ARDOUR {
|
using namespace ARDOUR;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
receive_stdout (std::string* out, const std::string& data, size_t size) {
|
receive_stdout (std::string* out, const std::string& data, size_t size)
|
||||||
|
{
|
||||||
*out += data;
|
*out += data;
|
||||||
}
|
}
|
||||||
|
|
||||||
FFMPEGFileImportableSource::FFMPEGFileImportableSource(const std::string &path, int channel)
|
FFMPEGFileImportableSource::FFMPEGFileImportableSource (const std::string& path, int channel)
|
||||||
: _path (path)
|
: _path (path)
|
||||||
, _channel (channel)
|
, _channel (channel)
|
||||||
, _buffer (32768)
|
, _buffer (32768)
|
||||||
|
|
@ -44,11 +45,12 @@ FFMPEGFileImportableSource::FFMPEGFileImportableSource(const std::string &path,
|
||||||
std::string ffprobe_exe, unused;
|
std::string ffprobe_exe, unused;
|
||||||
if (!ArdourVideoToolPaths::transcoder_exe (unused, ffprobe_exe)) {
|
if (!ArdourVideoToolPaths::transcoder_exe (unused, ffprobe_exe)) {
|
||||||
PBD::error << "FFMPEGFileImportableSource: Can't find ffprobe and ffmpeg" << endmsg;
|
PBD::error << "FFMPEGFileImportableSource: Can't find ffprobe and ffmpeg" << endmsg;
|
||||||
throw failed_constructor();
|
throw failed_constructor ();
|
||||||
}
|
}
|
||||||
|
|
||||||
int a = 0;
|
int a = 0;
|
||||||
char **argp = (char **)calloc(10, sizeof(char *));
|
char** argp = (char**)calloc (10, sizeof (char*));
|
||||||
|
|
||||||
argp[a++] = strdup (ffprobe_exe.c_str ());
|
argp[a++] = strdup (ffprobe_exe.c_str ());
|
||||||
argp[a++] = strdup (_path.c_str ());
|
argp[a++] = strdup (_path.c_str ());
|
||||||
argp[a++] = strdup ("-show_streams");
|
argp[a++] = strdup ("-show_streams");
|
||||||
|
|
@ -61,7 +63,7 @@ FFMPEGFileImportableSource::FFMPEGFileImportableSource(const std::string &path,
|
||||||
if (exec->start ()) {
|
if (exec->start ()) {
|
||||||
PBD::error << "FFMPEGFileImportableSource: External decoder (ffprobe) cannot be started." << endmsg;
|
PBD::error << "FFMPEGFileImportableSource: External decoder (ffprobe) cannot be started." << endmsg;
|
||||||
delete exec;
|
delete exec;
|
||||||
throw failed_constructor();
|
throw failed_constructor ();
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
@ -70,11 +72,12 @@ FFMPEGFileImportableSource::FFMPEGFileImportableSource(const std::string &path,
|
||||||
exec->ReadStdout.connect_same_thread (c, boost::bind (&receive_stdout, &ffprobe_output, _1, _2));
|
exec->ReadStdout.connect_same_thread (c, boost::bind (&receive_stdout, &ffprobe_output, _1, _2));
|
||||||
|
|
||||||
/* wait for ffprobe process to exit */
|
/* wait for ffprobe process to exit */
|
||||||
exec->wait();
|
exec->wait ();
|
||||||
|
|
||||||
namespace pt = boost::property_tree;
|
namespace pt = boost::property_tree;
|
||||||
std::istringstream is (ffprobe_output);
|
|
||||||
pt::ptree root;
|
pt::ptree root;
|
||||||
|
std::istringstream is (ffprobe_output);
|
||||||
|
|
||||||
pt::read_json (is, root);
|
pt::read_json (is, root);
|
||||||
|
|
||||||
// TODO: Find the stream with the most channels, rather than whatever the first one is.
|
// TODO: Find the stream with the most channels, rather than whatever the first one is.
|
||||||
|
|
@ -87,29 +90,29 @@ FFMPEGFileImportableSource::FFMPEGFileImportableSource(const std::string &path,
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
PBD::error << "FFMPEGFileImportableSource: Failed to read file metadata" << endmsg;
|
PBD::error << "FFMPEGFileImportableSource: Failed to read file metadata" << endmsg;
|
||||||
delete exec;
|
delete exec;
|
||||||
throw failed_constructor();
|
throw failed_constructor ();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_channel != ALL_CHANNELS && (_channel < 0 || _channel > (int) channels ())) {
|
if (_channel != ALL_CHANNELS && (_channel < 0 || _channel > (int)channels ())) {
|
||||||
PBD::error << string_compose("FFMPEGFileImportableSource: file only contains %1 channels; %2 is invalid as a channel number", channels(), _channel) << endmsg;
|
PBD::error << string_compose ("FFMPEGFileImportableSource: file only contains %1 channels; %2 is invalid as a channel number", channels (), _channel) << endmsg;
|
||||||
throw failed_constructor();
|
throw failed_constructor ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FFMPEGFileImportableSource::~FFMPEGFileImportableSource ()
|
FFMPEGFileImportableSource::~FFMPEGFileImportableSource ()
|
||||||
{
|
{
|
||||||
reset();
|
reset ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
FFMPEGFileImportableSource::seek (samplepos_t pos)
|
FFMPEGFileImportableSource::seek (samplepos_t pos)
|
||||||
{
|
{
|
||||||
if (pos < _read_pos) {
|
if (pos < _read_pos) {
|
||||||
reset();
|
reset ();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_ffmpeg_exec) {
|
if (!_ffmpeg_exec) {
|
||||||
start_ffmpeg();
|
start_ffmpeg ();
|
||||||
}
|
}
|
||||||
|
|
||||||
while (_read_pos < pos) {
|
while (_read_pos < pos) {
|
||||||
|
|
@ -124,7 +127,7 @@ FFMPEGFileImportableSource::seek (samplepos_t pos)
|
||||||
Glib::usleep (1000);
|
Glib::usleep (1000);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
guint inc = std::min<guint>(read_space, pos - _read_pos);
|
guint inc = std::min<guint> (read_space, pos - _read_pos);
|
||||||
_buffer.increment_read_idx (inc);
|
_buffer.increment_read_idx (inc);
|
||||||
_read_pos += inc;
|
_read_pos += inc;
|
||||||
}
|
}
|
||||||
|
|
@ -134,7 +137,7 @@ samplecnt_t
|
||||||
FFMPEGFileImportableSource::read (Sample* dst, samplecnt_t nframes)
|
FFMPEGFileImportableSource::read (Sample* dst, samplecnt_t nframes)
|
||||||
{
|
{
|
||||||
if (!_ffmpeg_exec) {
|
if (!_ffmpeg_exec) {
|
||||||
start_ffmpeg();
|
start_ffmpeg ();
|
||||||
}
|
}
|
||||||
|
|
||||||
samplecnt_t total_read = 0;
|
samplecnt_t total_read = 0;
|
||||||
|
|
@ -164,7 +167,7 @@ FFMPEGFileImportableSource::start_ffmpeg ()
|
||||||
ArdourVideoToolPaths::transcoder_exe (ffmpeg_exe, unused);
|
ArdourVideoToolPaths::transcoder_exe (ffmpeg_exe, unused);
|
||||||
|
|
||||||
int a = 0;
|
int a = 0;
|
||||||
char **argp = (char **)calloc(16, sizeof(char *));
|
char** argp = (char**)calloc (16, sizeof (char*));
|
||||||
char tmp[32];
|
char tmp[32];
|
||||||
argp[a++] = strdup (ffmpeg_exe.c_str ());
|
argp[a++] = strdup (ffmpeg_exe.c_str ());
|
||||||
argp[a++] = strdup ("-nostdin");
|
argp[a++] = strdup ("-nostdin");
|
||||||
|
|
@ -172,7 +175,7 @@ FFMPEGFileImportableSource::start_ffmpeg ()
|
||||||
argp[a++] = strdup (_path.c_str ());
|
argp[a++] = strdup (_path.c_str ());
|
||||||
if (_channel != ALL_CHANNELS) {
|
if (_channel != ALL_CHANNELS) {
|
||||||
argp[a++] = strdup ("-map_channel");
|
argp[a++] = strdup ("-map_channel");
|
||||||
snprintf (tmp, sizeof(tmp), "0.0.%d", _channel);
|
snprintf (tmp, sizeof (tmp), "0.0.%d", _channel);
|
||||||
argp[a++] = strdup (tmp);
|
argp[a++] = strdup (tmp);
|
||||||
}
|
}
|
||||||
argp[a++] = strdup ("-f");
|
argp[a++] = strdup ("-f");
|
||||||
|
|
@ -187,7 +190,7 @@ FFMPEGFileImportableSource::start_ffmpeg ()
|
||||||
PBD::info << "Decode command: { " << _ffmpeg_exec->to_s () << "}" << endmsg;
|
PBD::info << "Decode command: { " << _ffmpeg_exec->to_s () << "}" << endmsg;
|
||||||
if (_ffmpeg_exec->start ()) {
|
if (_ffmpeg_exec->start ()) {
|
||||||
PBD::error << "FFMPEGFileImportableSource: External decoder (ffmpeg) cannot be started." << endmsg;
|
PBD::error << "FFMPEGFileImportableSource: External decoder (ffmpeg) cannot be started." << endmsg;
|
||||||
throw std::runtime_error("Failed to start ffmpeg");
|
throw std::runtime_error ("Failed to start ffmpeg");
|
||||||
}
|
}
|
||||||
|
|
||||||
_ffmpeg_exec->ReadStdout.connect_same_thread (_ffmpeg_conn, boost::bind (&FFMPEGFileImportableSource::did_read_data, this, _1, _2));
|
_ffmpeg_exec->ReadStdout.connect_same_thread (_ffmpeg_conn, boost::bind (&FFMPEGFileImportableSource::did_read_data, this, _1, _2));
|
||||||
|
|
@ -211,10 +214,10 @@ FFMPEGFileImportableSource::did_read_data (std::string data, size_t size)
|
||||||
{
|
{
|
||||||
// Prepend the left-over data from a previous chunk of received data to this chunk.
|
// Prepend the left-over data from a previous chunk of received data to this chunk.
|
||||||
data = _leftover_data + data;
|
data = _leftover_data + data;
|
||||||
samplecnt_t n_samples = data.length () / sizeof(float);
|
samplecnt_t n_samples = data.length () / sizeof (float);
|
||||||
|
|
||||||
// Stash leftover data.
|
// Stash leftover data.
|
||||||
_leftover_data = data.substr(n_samples * sizeof(float));
|
_leftover_data = data.substr (n_samples * sizeof (float));
|
||||||
|
|
||||||
const char* cur = data.data ();
|
const char* cur = data.data ();
|
||||||
while (n_samples > 0) {
|
while (n_samples > 0) {
|
||||||
|
|
@ -232,14 +235,12 @@ FFMPEGFileImportableSource::did_read_data (std::string data, size_t size)
|
||||||
|
|
||||||
samplecnt_t written = 0;
|
samplecnt_t written = 0;
|
||||||
for (int i = 0; i < 2; ++i) {
|
for (int i = 0; i < 2; ++i) {
|
||||||
samplecnt_t cnt = std::min<samplecnt_t>(n_samples, wv.len[i]);
|
samplecnt_t cnt = std::min<samplecnt_t> (n_samples, wv.len[i]);
|
||||||
memcpy (wv.buf[i], cur, cnt * sizeof(float));
|
memcpy (wv.buf[i], cur, cnt * sizeof (float));
|
||||||
written += cnt;
|
written += cnt;
|
||||||
n_samples -= cnt;
|
n_samples -= cnt;
|
||||||
cur += cnt * sizeof(float);
|
cur += cnt * sizeof (float);
|
||||||
}
|
}
|
||||||
_buffer.increment_write_idx (written);
|
_buffer.increment_write_idx (written);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue