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);
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 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;
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;