X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fffmpeg.h;h=5f3f93f18d784bce9c3b941d185cd3a3bd5fa93a;hb=17e433a6e5021cc080101fd88ac3236dacb9f2e8;hp=a0eaf61726c49cf36919b0bca3327973b3233571;hpb=28327674e68a9641ffc542190a95fad05e1023ac;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/ffmpeg.h b/cinelerra-5.1/cinelerra/ffmpeg.h index a0eaf617..5f3f93f1 100644 --- a/cinelerra-5.1/cinelerra/ffmpeg.h +++ b/cinelerra-5.1/cinelerra/ffmpeg.h @@ -89,11 +89,10 @@ public: virtual int is_audio() = 0; virtual int is_video() = 0; - virtual int decode_frame(AVPacket *pkt, AVFrame *frame, int &got_frame) = 0; - virtual int encode_frame(AVPacket *pkt, AVFrame *frame, int &got_frame) = 0; + 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, - AVCodecContext *src_ctx, AVCodecContext *sink_ctx) = 0; + virtual int create_filter(const char *filter_spec, AVCodecParameters *avpar) = 0; virtual void load_markers() = 0; virtual IndexMarks *get_markers() = 0; int create_filter(const char *filter_spec); @@ -104,28 +103,13 @@ public: FFMPEG *ffmpeg; AVStream *st; AVFormatContext *fmt_ctx; + AVCodecContext *avctx; AVFilterContext *buffersink_ctx; AVFilterContext *buffersrc_ctx; AVFilterGraph *filter_graph; AVFrame *frame, *fframe; - - class BSFilter { - public: - AVBitStreamFilterContext *bsfc; - const char *args; - BSFilter(const char *bsf, const char *ap) { - bsfc = av_bitstream_filter_init(bsf); - args = ap ? cstrdup(ap) : 0; - } - ~BSFilter() { - av_bitstream_filter_close(bsfc); - delete [] args; - } - }; - void add_bsfilter(const char *bsf, const char *ap); - ArrayList bsfilter; - int bs_filter(AVPacket *pkt); + AVBSFContext *bsfc; FFPacket ipkt; int need_packet, flushed; @@ -166,17 +150,16 @@ public: virtual ~FFAudioStream(); int is_audio() { return 1; } int is_video() { return 0; } + void init_swr(int ichs, int ifmt, int irate); int get_samples(float *&samples, uint8_t **data, int len); int load_history(uint8_t **data, int len); - int decode_frame(AVPacket *pkt, AVFrame *frame, int &got_frame); - int encode_frame(AVPacket *pkt, AVFrame *frame, int &got_frame); - int create_filter(const char *filter_spec, - AVCodecContext *src_ctx, AVCodecContext *sink_ctx); + int decode_frame(AVFrame *frame); + int encode_frame(AVFrame *frame); + int create_filter(const char *filter_spec, AVCodecParameters *avpar); void load_markers(); IndexMarks *get_markers(); int encode_activate(); - int nb_samples(); int64_t load_buffer(double ** const sp, int len); int in_history(int64_t pos); void reset_history(); @@ -186,6 +169,7 @@ public: int load(int64_t pos, int len); int audio_seek(int64_t pos); int encode(double **samples, int len); + int drain(); int idx; int channel0, channels; @@ -194,6 +178,7 @@ public: int64_t length; SwrContext *resample_context; + int swr_ichs, swr_ifmt, swr_irate; int aud_bfr_sz; float *aud_bfr; }; @@ -211,12 +196,12 @@ public: int convert_picture_vframe(VFrame *frame, AVFrame *ip); int convert_picture_vframe(VFrame *frame, AVFrame *ip, AVFrame *ipic); - int convert_cmodel(VFrame *frame_out, AVFrame *ip); - int transfer_cmodel(VFrame *frame_in, AVFrame *ifp); + int convert_cmodel(VFrame *frame, AVFrame *ip); + int transfer_cmodel(VFrame *frame, AVFrame *ifp); int convert_vframe_picture(VFrame *frame, AVFrame *op); int convert_vframe_picture(VFrame *frame, AVFrame *op, AVFrame *opic); int convert_pixfmt(VFrame *frame, AVFrame *op); - int transfer_pixfmt(VFrame *frame_in, AVFrame *ofp); + int transfer_pixfmt(VFrame *frame, AVFrame *ofp); }; class FFVideoStream : public FFStream, public FFVideoConvert { @@ -225,10 +210,9 @@ public: virtual ~FFVideoStream(); int is_audio() { return 0; } int is_video() { return 1; } - int decode_frame(AVPacket *pkt, AVFrame *frame, int &got_frame); - int encode_frame(AVPacket *pkt, AVFrame *frame, int &got_frame); - int create_filter(const char *filter_spec, - AVCodecContext *src_ctx, AVCodecContext *sink_ctx); + int decode_frame(AVFrame *frame); + int encode_frame(AVFrame *frame); + int create_filter(const char *filter_spec, AVCodecParameters *avpar); void load_markers(); IndexMarks *get_markers(); @@ -236,6 +220,7 @@ public: int load(VFrame *vframe, int64_t pos); int video_seek(int64_t pos); int encode(VFrame *vframe); + int drain(); int idx; double frame_rate; @@ -243,9 +228,8 @@ public: int64_t length; float aspect_ratio; - uint8_t *pkt_bfr; - int pkt_bfr_sz; - int64_t start_pts; + int interlaced; + int top_field_first; }; class FFMPEG : public Thread { @@ -268,11 +252,9 @@ public: char *codec, char *codec_options, int len); static void set_asset_format(Asset *asset, const char *text); int get_file_format(); - int get_encoder(const char *options, - char *format, char *codec, char *bsfilter, char *bsargs); - int get_encoder(FILE *fp, - char *format, char *codec, char *bsfilter, char *bsargs); - int read_options(const char *options, AVDictionary *&opts); + int get_encoder(const char *options, char *format, char *codec, char *bsfilter); + int get_encoder(FILE *fp, char *format, char *codec, char *bsfilter); + int read_options(const char *options, AVDictionary *&opts, int skip=0); int scan_options(const char *options, AVDictionary *&opts, AVStream *st); int read_options(FILE *fp, const char *options, AVDictionary *&opts); int load_options(const char *options, AVDictionary *&opts);