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 int decode_hw_format(AVCodec *decoder, AVHWDeviceType type);
virtual int write_packet(FFPacket &pkt);
int read_packet();
int seek(int64_t no, double rate);
int reading, writing;
int seeked, eof;
+ int hw_pixfmt;
+ AVBufferRef *hw_device_ctx;
+
FILE *stats_fp;
char *stats_filename;
char *stats_in;
class FFVideoConvert {
public:
struct SwsContext *convert_ctx;
+ AVFrame *sw_frame;
- FFVideoConvert() { convert_ctx = 0; }
- ~FFVideoConvert() { if( convert_ctx ) sws_freeContext(convert_ctx); }
+ FFVideoConvert() { convert_ctx = 0; sw_frame = 0; }
+ ~FFVideoConvert() {
+ if( convert_ctx ) sws_freeContext(convert_ctx);
+ if( sw_frame ) av_frame_free(&sw_frame);
+ }
static AVPixelFormat color_model_to_pix_fmt(int color_model);
static int pix_fmt_to_color_model(AVPixelFormat pix_fmt);
int is_audio() { return 0; }
int is_video() { return 1; }
int decode_frame(AVFrame *frame);
+ AVHWDeviceType decode_hw_activate();
+ 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 top_field_first;
};
+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 {
public:
static Mutex fflock;
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;
class ffidx {
public:
int ff_video_mpeg_color_range(int stream);
int ff_cpus();
+ const char *ff_hw_dev();
void dump_context(AVCodecContext *ctx);
};