#include "fileffmpeg.inc"
#include "indexstate.inc"
#include "mutex.h"
+#include "preferences.inc"
#include "thread.h"
#include "vframe.inc"
int initted() { return init; }
void queue(int64_t pos);
void dequeue();
+ void set_hw_frame(AVFrame *frame);
};
class FFStream {
virtual int encode_activate();
virtual int decode_activate();
virtual AVHWDeviceType decode_hw_activate();
- virtual void decode_hw_format(AVCodec *decoder, AVHWDeviceType type);
+ virtual int decode_hw_format(AVCodec *decoder, AVHWDeviceType type);
virtual int write_packet(FFPacket &pkt);
int read_packet();
int seek(int64_t no, double rate);
AVFilterContext *buffersrc_ctx;
AVFilterGraph *filter_graph;
AVFrame *frame, *fframe;
+ AVFrame *probe_frame;
AVBSFContext *bsfc;
FFPacket ipkt;
int reading, writing;
int seeked, eof;
- const char *hw_dev;
int hw_pixfmt;
AVBufferRef *hw_device_ctx;
class FFVideoConvert {
public:
+ Preferences *preferences;
struct SwsContext *convert_ctx;
AVFrame *sw_frame;
- FFVideoConvert() { convert_ctx = 0; sw_frame = 0; }
+ FFVideoConvert(Preferences *preferences) {
+ this->preferences = preferences;
+ convert_ctx = 0; sw_frame = 0;
+ }
~FFVideoConvert() {
if( convert_ctx ) sws_freeContext(convert_ctx);
if( sw_frame ) av_frame_free(&sw_frame);
int is_video() { return 1; }
int decode_frame(AVFrame *frame);
AVHWDeviceType decode_hw_activate();
- void decode_hw_format(AVCodec *decoder, AVHWDeviceType type);
+ int decode_hw_format(AVCodec *decoder, AVHWDeviceType type);
+ AVHWDeviceType encode_hw_activate(const char *hw_dev);
+ int encode_hw_write(FFrame *picture);
int encode_frame(AVFrame *frame);
int create_filter(const char *filter_spec, AVCodecParameters *avpar);
void load_markers();
int interlaced;
int top_field_first;
+ int color_space, color_range;
+};
+
+class FFCodecRemap
+{
+public:
+ FFCodecRemap();
+ ~FFCodecRemap();
+ const char *old_codec, *new_codec;
+};
+
+class FFCodecRemaps : public ArrayList<FFCodecRemap>
+{
+public:
+ FFCodecRemaps() {}
+ int add(const char *val);
+ int update(AVCodecID &codec_id, AVCodec *&decoder);
};
class FFMPEG : public Thread {
static void load_audio_options(Asset *asset, EDL *edl);
static void scan_video_options(Asset *asset, EDL *edl);
static void load_video_options(Asset *asset, EDL *edl);
+ static void scan_format_options(Asset *asset, EDL *edl);
+ static void load_format_options(Asset *asset, EDL *edl);
static void set_asset_format(Asset *asset, EDL *edl, const char *text);
int get_file_format();
static int get_encoder(const char *options, char *format, char *codec, char *bsfilter);
double opt_duration;
char *opt_video_filter;
char *opt_audio_filter;
+ char *opt_hw_dev;
+ char *opt_video_decoder;
+ char *opt_audio_decoder;
+ FFCodecRemaps video_codec_remaps;
+ FFCodecRemaps audio_codec_remaps;
char file_format[BCTEXTLEN];
int fflags;
int ff_coded_width(int stream);
int ff_coded_height(int stream);
float ff_aspect_ratio(int stream);
+ int ff_color_range(int stream);
+ int ff_color_space(int stream);
double ff_frame_rate(int stream);
- const char *ff_video_format(int stream);
+ const char *ff_video_codec(int stream);
int64_t ff_video_frames(int stream);
int ff_video_pid(int stream);
int ff_video_mpeg_color_range(int stream);
int ff_cpus();
+ const char *ff_hw_dev();
+ Preferences *ff_prefs();
void dump_context(AVCodecContext *ctx);
};