/* veejay - Linux VeeJay * (C) 2002-2004 Niels Elburg * * * 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef VJ_MLT_EL_H #define VJ_MLT_EL_H #include #include #include #include #define N_EL_FRAME(x) ( (x)&0xfffffffffffffLLU ) #define N_EL_FILE(x) (uint32_t) ( ((x)>>52)&0xfffU ) /* ((file)&0xfff<<52) */ #define EL_ENTRY(file,frame) ( ((file)<<52) | ((frame)& 0xfffffffffffffLLU) ) //#define FMT_420 0 //#define FMT_422 1 //#define MAX_EDITLIST_FILES 4096 typedef struct { int has_video; int is_empty; int video_width; int video_height; int video_inter; float video_fps; int video_sar_width; int video_sar_height; char video_norm; int has_audio; long audio_rate; int audio_chans; int audio_bits; int audio_bps; long video_frames; long total_frames; long num_video_files; long max_frame_size; int MJPG_chroma; char *(video_file_list[MAX_EDIT_LIST_FILES]); lav_file_t *(lav_fd[MAX_EDIT_LIST_FILES]); int yuv_taste[MAX_EDIT_LIST_FILES]; long num_frames[MAX_EDIT_LIST_FILES]; uint64_t *frame_list; int last_afile; long last_apos; int auto_deinter; int pixel_format; void *cache; int is_clone; void *scaler; } editlist; int test_video_frame( lav_file_t *lav,int out_pix_fmt); editlist *vj_el_init_with_args(char **filenames, int n, int flags, int deinter, int force, char norm, int fmt); int vj_el_cache_size(); void vj_el_prepare(void); // reset cache void vj_el_init(int out, int sj, int dw, int dh, float fps); void vj_el_init_chunk(int n); int vj_el_is_dv(editlist *el); void vj_el_free(editlist *el); int vj_el_get_audio_frame_at(editlist *el, uint32_t nframe, uint8_t *dst, int speed ); int vj_el_append_video_file(editlist *el, char *filename); int vj_el_write_editlist( char *filename, long start, long end, editlist *el ); int vj_el_get_video_frame(editlist *el, long nframe, uint8_t *dst[3]); void vj_el_break_cache( editlist *el ); void vj_el_setup_cache( editlist *el ); int vj_el_get_audio_frame(editlist *el, uint32_t nframe, uint8_t *dst); int vj_el_get_file_fourcc(editlist *el, int num, char *buf); void vj_el_print(editlist *el); int vj_el_init_420_frame(editlist *el, VJFrame *frame); int vj_el_init_422_frame(editlist *el, VJFrame *frame); void vj_el_frame_cache(int n); void vj_el_show_formats(void); editlist *vj_el_dummy(int flags, int deinterlace, int chroma, char norm, int width, int height, float fps, int fmt); int vj_el_get_file_entry( editlist *el,long *start_pos, long *end_pos, long entry ); editlist *vj_el_clone(editlist *el); editlist *vj_el_soft_clone(editlist *el); int vj_el_framelist_clone( editlist *src, editlist *dst); char *vj_el_write_line_ascii( editlist *el, int *bytes_written ); void vj_el_deinit(); void vj_el_clear_cache( editlist *el ); int get_ffmpeg_pixfmt( int pf ); void vj_el_set_image_output_size(editlist *el,int w, int h, float fps, int pf); int open_video_file(char *filename, editlist * el, int preserve_pathname, int deinter, int force, char override_norm); void vj_el_set_caching(int status); int vj_el_bogus_length( editlist *el, long nframe ); int vj_el_set_bogus_length( editlist *el, long nframe, int len ); void vj_el_get_video_fourcc(editlist *el, int num, char *fourcc); int detect_pixel_format_with_ffmpeg( const char *filename ); int vj_el_pixfmt_to_veejay(int pix_fmt ); #endif