X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fffmpeg.h;h=1a514e1d57f8f58a4a3124dc411f0e2d408df065;hp=18516d3611c1bd5a6116698a290622ca8e477f75;hb=refs%2Fheads%2Fmaster;hpb=acfa6cec95f5ddfbb21ca7c4af41de213bb80988 diff --git a/cinelerra-5.1/cinelerra/ffmpeg.h b/cinelerra-5.1/cinelerra/ffmpeg.h index 18516d36..ed864b59 100644 --- a/cinelerra-5.1/cinelerra/ffmpeg.h +++ b/cinelerra-5.1/cinelerra/ffmpeg.h @@ -1,3 +1,23 @@ +/* + * CINELERRA + * Copyright (C) 2012-2014 Paolo Rampino + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * USA + */ + #ifndef FFMPEG_H #define FFMPEG_H @@ -28,6 +48,9 @@ extern "C" { #include "libavformat/avformat.h" #include "libavformat/avio.h" #include "libavcodec/avcodec.h" +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59,18,100) +#include "libavcodec/bsf.h" +#endif #include "libavfilter/avfilter.h" #include "libavutil/avutil.h" #include "libavfilter/buffersrc.h" @@ -86,7 +109,11 @@ public: virtual int encode_activate(); virtual int decode_activate(); virtual AVHWDeviceType decode_hw_activate(); +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59,16,100) + virtual int decode_hw_format(const AVCodec *decoder, AVHWDeviceType type); +#else virtual int decode_hw_format(AVCodec *decoder, AVHWDeviceType type); +#endif virtual int write_packet(FFPacket &pkt); int read_packet(); int seek(int64_t no, double rate); @@ -99,11 +126,12 @@ public: virtual int decode_frame(AVFrame *frame) = 0; virtual int encode_frame(AVFrame *frame) = 0; virtual int init_frame(AVFrame *frame) = 0; - virtual int create_filter(const char *filter_spec, AVCodecParameters *avpar) = 0; + virtual int create_filter(const char *filter_spec) = 0; virtual void load_markers() = 0; virtual IndexMarks *get_markers() = 0; - int create_filter(const char *filter_spec); - int load_filter(AVFrame *frame); + int insert_filter(const char *name, const char *arg, const char *inst_name=0); + int config_filters(const char *filter_spec, AVFilterContext *fsrc); + virtual int load_filter(AVFrame *frame); int read_filter(AVFrame *frame); int read_frame(AVFrame *frame); int open_stats_file(); @@ -117,8 +145,10 @@ public: AVFormatContext *fmt_ctx; AVCodecContext *avctx; - AVFilterContext *buffersink_ctx; + AVFilterContext *filt_ctx; + int filt_id; AVFilterContext *buffersrc_ctx; + AVFilterContext *buffersink_ctx; AVFilterGraph *filter_graph; AVFrame *frame, *fframe; AVFrame *probe_frame; @@ -135,7 +165,7 @@ public: int64_t seek_pos, curr_pos; int fidx; int reading, writing; - int seeked, eof; + int seeking, seeked, eof; int hw_pixfmt; AVBufferRef *hw_device_ctx; @@ -177,7 +207,7 @@ public: int load_history(uint8_t **data, int len); int decode_frame(AVFrame *frame); int encode_frame(AVFrame *frame); - int create_filter(const char *filter_spec, AVCodecParameters *avpar); + int create_filter(const char *filter_spec); void load_markers(); IndexMarks *get_markers(); @@ -243,21 +273,28 @@ public: int is_video() { return 1; } int decode_frame(AVFrame *frame); AVHWDeviceType decode_hw_activate(); +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59,16,100) + int decode_hw_format(const AVCodec *decoder, AVHWDeviceType type); +#else int decode_hw_format(AVCodec *decoder, AVHWDeviceType type); +#endif 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); + int create_filter(const char *filter_spec); void load_markers(); IndexMarks *get_markers(); int init_frame(AVFrame *picture); int load(VFrame *vframe, int64_t pos); + int probe(int64_t pos); int video_seek(int64_t pos); int encode(VFrame *vframe); int drain(); + int convert_hw_frame(AVFrame *ifrm, AVFrame *ofrm); + int load_filter(AVFrame *frame); double get_rotation_angle(); - void flip(); + int flip(double theta); int idx; double frame_rate; @@ -268,6 +305,7 @@ public: int interlaced; int top_field_first; int color_space, color_range; + struct SwsContext *fconvert_ctx; }; class FFCodecRemap @@ -283,7 +321,11 @@ class FFCodecRemaps : public ArrayList public: FFCodecRemaps() {} int add(const char *val); +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59,16,100) + int update(AVCodecID &codec_id, const AVCodec *&decoder); +#else int update(AVCodecID &codec_id, AVCodec *&decoder); +#endif }; // for get_initial_timecode auto deletes @@ -324,7 +366,11 @@ public: static void ff_lock(const char *cp=0) { fflock.lock(cp); } static void ff_unlock() { fflock.unlock(); } +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59,16,100) + int check_sample_rate(const AVCodec *codec, int sample_rate); +#else int check_sample_rate(AVCodec *codec, int sample_rate); +#endif AVRational check_frame_rate(const AVRational *p, double frame_rate); AVRational to_sample_aspect_ratio(Asset *asset); AVRational to_time_base(int sample_rate); @@ -362,6 +408,10 @@ public: static double to_secs(int64_t time, AVRational time_base); int info(char *text, int len); + void put_cache_frame(VFrame *frame, int64_t position); + int get_use_cache(); + void purge_cache(); + int init_decoder(const char *filename); int open_decoder(); int init_encoder(const char *filename); @@ -373,6 +423,7 @@ public: double get_initial_timecode(int data_type, int channel, double frame_rate); int audio_seek(int ch, int64_t pos); + int video_probe(int64_t pos); int video_seek(int layer, int64_t pos); int decode(int chn, int64_t pos, double *samples, int len); @@ -424,6 +475,7 @@ public: int decoding, encoding; int has_audio, has_video; + int interlace_from_codec; FFMPEG(FileBase *file_base=0); ~FFMPEG(); @@ -453,6 +505,7 @@ public: float ff_aspect_ratio(int stream); int ff_color_range(int stream); int ff_color_space(int stream); + int ff_interlace(int stream); double ff_frame_rate(int stream); const char *ff_video_codec(int stream); int64_t ff_video_frames(int stream);