#define __ardour_transcode_ffmpeg_h__
#include <string>
+#include "ardour/system_exec.h"
#include "ardour/types.h"
-#include "system_exec.h"
-/* TODO: use a namespace here ? */
-struct FFAudioStream {
- std::string name;
- std::string stream_id;
- uint32_t channels;
-};
-typedef std::vector<FFAudioStream> AudioStreams;
-typedef std::map<std::string,std::string> FFSettings;
/** @class TranscodeFfmpeg
* @brief wrapper around ffmpeg and ffprobe command-line utils
{
public:
+ struct FFAudioStream {
+ std::string name;
+ std::string stream_id;
+ uint32_t channels;
+ };
+ typedef std::vector<FFAudioStream> FFAudioStreams;
+ typedef std::map<std::string,std::string> FFSettings;
+
+
/** instantiate a new transcoder. If a file-name is given, the file's
* attributes (fps, duration, geometry etc) are read.
*
* specified as element-number in \ref get_audio().
* @return \c true if the transcoder process was successfully started.
*/
- bool extract_audio (std::string outfile, ARDOUR::framecnt_t samplerate, unsigned int stream=0);
+ bool extract_audio (std::string outfile, ARDOUR::samplecnt_t samplerate, unsigned int stream=0);
/** transcode video and mux audio files into a new video-file.
* @param outfile full-path of output file to create (existing files are overwritten)
* @param inf_a filename of input audio-file
* during \ref encode \ref transcode and \ref extract_audio
* The parameters are current and last video-frame.
*/
- PBD::Signal2<void, ARDOUR::framecnt_t, ARDOUR::framecnt_t> Progress;
+ PBD::Signal2<void, ARDOUR::samplecnt_t, ARDOUR::samplecnt_t> Progress;
/** signal emitted when the transcoder process terminates. */
PBD::Signal0<void> Finished;
double get_aspect () { return m_aspect; }
int get_width() { return m_width; }
int get_height() { return m_height; }
- ARDOUR::framecnt_t get_duration() { return m_duration; }
+ ARDOUR::samplecnt_t get_duration() { return m_duration; }
std::string get_codec() { return m_codec; }
- AudioStreams get_audio() { return m_audio; }
+ FFAudioStreams get_audio() { return m_audio; }
/** override file duration used with the \ref Progress signal.
* @param d duration in video-frames = length_in_seconds * get_fps()
*/
- void set_duration(ARDOUR::framecnt_t d) { m_duration = d; }
+ void set_duration(ARDOUR::samplecnt_t d) { m_duration = d; }
/* offset, lead-in/out are in seconds */
void set_avoffset(double av_offset) { m_avoffset = av_offset; }
void set_leadinout(double lead_in, double lead_out) { m_lead_in = lead_in; m_lead_out = lead_out; }
+ void set_fps(double fps) { m_fps = fps; } // on export, used for rounding only.
#if 1 /* tentative debug mode */
void set_debug (bool onoff) { debug_enable = onoff; }
#endif
protected:
std::string infile;
- SystemExec *ffcmd;
+ ARDOUR::SystemExec *ffcmd;
bool probe ();
double m_fps;
double m_aspect;
- ARDOUR::framecnt_t m_duration;
+ std::string m_sar;
+ ARDOUR::samplecnt_t m_duration;
int m_width;
int m_height;
std::string m_codec;
bool ffexecok;
bool probeok;
- AudioStreams m_audio;
+ FFAudioStreams m_audio;
- char *format_metadata (std::string, std::string);
void ffmpegparse_v (std::string d, size_t s);
void ffmpegparse_a (std::string d, size_t s);
void ffprobeparse (std::string d, size_t s);