X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fffmpeg.h;h=9656bf3970914db5ab27dee24dc2d91188bec8bf;hb=c905fabd0678fcc8ab9e32e4443ad8709adafefd;hp=5c9b1ea1e1d0c5fe91f61d96eac480f6261ff332;hpb=7fd85fb66168f6b518c5f2d73e04036e87faa0e1;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/cinelerra/ffmpeg.h b/cinelerra-5.1/cinelerra/ffmpeg.h index 5c9b1ea1..9656bf39 100644 --- a/cinelerra-5.1/cinelerra/ffmpeg.h +++ b/cinelerra-5.1/cinelerra/ffmpeg.h @@ -81,6 +81,8 @@ public: virtual int encode_activate(); virtual int decode_activate(); + virtual AVHWDeviceType decode_hw_activate(); + virtual void decode_hw_format(AVCodec *decoder, AVHWDeviceType type); virtual int write_packet(FFPacket &pkt); int read_packet(); int seek(int64_t no, double rate); @@ -130,6 +132,10 @@ public: int reading, writing; int seeked, eof; + const char *hw_dev; + int hw_pixfmt; + AVBufferRef *hw_device_ctx; + FILE *stats_fp; char *stats_filename; char *stats_in; @@ -199,9 +205,13 @@ public: 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); @@ -224,6 +234,8 @@ public: int is_audio() { return 0; } int is_video() { return 1; } int decode_frame(AVFrame *frame); + AVHWDeviceType decode_hw_activate(); + void decode_hw_format(AVCodec *decoder, AVHWDeviceType type); int encode_frame(AVFrame *frame); int create_filter(const char *filter_spec, AVCodecParameters *avpar); void load_markers(); @@ -315,6 +327,7 @@ public: char *opt_video_filter; char *opt_audio_filter; char file_format[BCTEXTLEN]; + int fflags; class ffidx { public: