X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Ffile.C;h=f9571c9d1dddd60bb37704dda5a18d0e740c8200;hp=f611b814e136ad4a5f19c7aad08ab26a32f474ec;hb=86c9537e0540010ff43b16feb4cd7de98409eba1;hpb=9afc3844e37c6db23435d5d0c33129dcc81061e4 diff --git a/cinelerra-5.1/cinelerra/file.C b/cinelerra-5.1/cinelerra/file.C index f611b814..f9571c9d 100644 --- a/cinelerra-5.1/cinelerra/file.C +++ b/cinelerra-5.1/cinelerra/file.C @@ -52,13 +52,16 @@ #include "filejpeg.h" #include "filempeg.h" #undef HAVE_STDLIB_H // automake conflict +#include "fileogg.h" #include "filepng.h" #include "fileppm.h" +#include "fileref.h" #include "filescene.h" #include "filesndfile.h" #include "filetga.h" #include "filethread.h" #include "filetiff.h" +#include "filevorbis.h" #include "filexml.h" #include "formatwindow.h" #include "formattools.h" @@ -74,6 +77,14 @@ #include "samples.h" #include "vframe.h" +#ifdef HAVE_OGG +//suppress noref warning +void *vorbis0_ov_callbacks[] = { + &OV_CALLBACKS_DEFAULT, &OV_CALLBACKS_NOCLOSE, + &OV_CALLBACKS_STREAMONLY, &OV_CALLBACKS_STREAMONLY_NOCLOSE, +}; +#endif + File::File() { cpus = 1; @@ -93,7 +104,6 @@ File::~File() } if( temp_frame ) { -//printf("File::~File %d temp_debug=%d\n", __LINE__, --temp_debug); delete temp_frame; } @@ -228,6 +238,12 @@ int File::get_options(FormatTools *format, FileTIFF::get_parameters(parent_window, asset, format_window, audio_options, video_options, edl); break; +#ifdef HAVE_OGG + case FILE_OGG: + FileOGG::get_parameters(parent_window, asset, format_window, + audio_options, video_options, edl); + break; +#endif default: break; } @@ -349,6 +365,10 @@ const char *File::default_probes[] = { "CR2", "TGA", "TIFF", +#ifdef HAVE_OGG + "OGG", + "Vorbis", +#endif "MPEG", "EDL", "FFMPEG_Late", @@ -422,7 +442,7 @@ int File::probe() else continue; return FILE_OK; } -#ifdef HAVE_EXR +#ifdef HAVE_OPENEXR if( !strcmp(pref->name,"EXR") ) { // EXR file if( !FileEXR::check_sig(this->asset, data)) continue; file = new FileEXR(this->asset, this); @@ -449,6 +469,18 @@ int File::probe() file = new FileTIFF(this->asset, this); return FILE_OK; } +#ifdef HAVE_OGG + if( !strcmp(pref->name,"OGG") ) { // OGG file + if( !FileOGG::check_sig(this->asset) ) continue; + file = new FileOGG(this->asset, this); + return FILE_OK; + } + if( !strcmp(pref->name,"Vorbis") ) { // VorbisFile file + if( !FileVorbis::check_sig(this->asset) ) continue; + file = new FileVorbis(this->asset, this); + return FILE_OK; + } +#endif #ifdef HAVE_LIBZMPEG if( !strcmp(pref->name,"MPEG") ) { // MPEG file if( !FileMPEG::check_sig(this->asset) ) continue; @@ -572,11 +604,23 @@ int File::open_file(Preferences *preferences, file = new FileMPEG(this->asset, this); break; #endif +#ifdef HAVE_OGG + case FILE_OGG: + file = new FileOGG(this->asset, this); + break; + + case FILE_VORBIS: + file = new FileVorbis(this->asset, this); + break; +#endif #ifdef HAVE_DV case FILE_RAWDV: file = new FileDV(this->asset, this); break; #endif + case FILE_REF: + file = new FileREF(this->asset, this); + break; // try plugins default: return 1; @@ -657,17 +701,10 @@ void File::delete_temp_frame_buffer() int File::close_file(int ignore_thread) { - const int debug = 0; - - if( debug ) printf("File::close_file file=%p %d\n", file, __LINE__); - if( !ignore_thread ) { stop_audio_thread(); stop_video_thread(); } - - - if( debug ) printf("File::close_file file=%p %d\n", file, __LINE__); if( file ) { // The file's asset is a copy of the argument passed to open_file so the // user must copy lengths from the file's asset. @@ -679,28 +716,18 @@ int File::close_file(int ignore_thread) file->close_file(); delete file; } - if( debug ) printf("File::close_file file=%p %d\n", file, __LINE__); delete_temp_samples_buffer(); delete_temp_frame_buffer(); - if( debug ) printf("File::close_file file=%p %d\n", file, __LINE__); - - if( debug ) printf("File::close_file file=%p %d\n", file, __LINE__); - reset_parameters(); - if( debug ) printf("File::close_file file=%p %d\n", file, __LINE__); return 0; } - - int File::get_index(IndexFile *index_file, MainProgressBar *progress_bar) { return !file ? -1 : file->get_index(index_file, progress_bar); } - - int File::start_audio_thread(int buffer_size, int ring_buffers) { this->audio_ring_buffers = ring_buffers; @@ -713,20 +740,16 @@ int File::start_audio_thread(int buffer_size, int ring_buffers) return 0; } -int File::start_video_thread(int buffer_size, - int color_model, - int ring_buffers, - int compressed) +int File::start_video_thread(int buffer_size, int color_model, + int ring_buffers, int compressed) { this->video_ring_buffers = ring_buffers; this->video_buffer_size = buffer_size; if( !video_thread ) { video_thread = new FileThread(this, 0, 1); - video_thread->start_writing(buffer_size, - color_model, - ring_buffers, - compressed); + video_thread->start_writing(buffer_size, color_model, + ring_buffers, compressed); } return 0; } @@ -1231,9 +1254,12 @@ int File::strtoformat(const char *format) if( !strcasecmp(format, _(VMPEG_NAME)) ) return FILE_VMPEG; if( !strcasecmp(format, _(TGA_NAME)) ) return FILE_TGA; if( !strcasecmp(format, _(TGA_LIST_NAME)) ) return FILE_TGA_LIST; + if( !strcasecmp(format, _(OGG_NAME)) ) return FILE_OGG; + if( !strcasecmp(format, _(VORBIS_NAME)) ) return FILE_VORBIS; if( !strcasecmp(format, _(RAWDV_NAME)) ) return FILE_RAWDV; if( !strcasecmp(format, _(FFMPEG_NAME)) ) return FILE_FFMPEG; if( !strcasecmp(format, _(DBASE_NAME)) ) return FILE_DB; + if( !strcasecmp(format, _(REF_NAME)) ) return FILE_REF; return 0; } @@ -1271,9 +1297,12 @@ const char* File::formattostr(int format) case FILE_TGA_LIST: return _(TGA_LIST_NAME); case FILE_TIFF: return _(TIFF_NAME); case FILE_TIFF_LIST: return _(TIFF_LIST_NAME); + case FILE_OGG: return _(OGG_NAME); + case FILE_VORBIS: return _(VORBIS_NAME); case FILE_RAWDV: return _(RAWDV_NAME); case FILE_FFMPEG: return _(FFMPEG_NAME); case FILE_DB: return _(DBASE_NAME); + case FILE_REF: return _(REF_NAME); } return _("Unknown"); } @@ -1365,6 +1394,7 @@ int File::get_best_colormodel(Asset *asset, int driver) case FILE_DB: return FileDB::get_best_colormodel(asset, driver); #endif case FILE_FFMPEG: return FileFFMPEG::get_best_colormodel(asset, driver); + case FILE_REF: return FileREF::get_best_colormodel(asset, driver); } return BC_RGB888; @@ -1402,6 +1432,7 @@ int64_t File::get_memory_usage() int File::renders_video(int format) { switch( format ) { + case FILE_OGG: case FILE_JPEG: case FILE_JPEG_LIST: case FILE_CR2: @@ -1439,6 +1470,8 @@ int File::renders_audio(int format) case FILE_FLAC: case FILE_PCM: case FILE_WAV: + case FILE_OGG: + case FILE_VORBIS: case FILE_AMPEG: case FILE_AU: case FILE_AIFF: @@ -1485,6 +1518,7 @@ const char* File::get_tag(int format) case FILE_FLAC: return "flac"; case FILE_JPEG: return "jpg"; case FILE_JPEG_LIST: return "jpgs"; + case FILE_OGG: return "ogg"; case FILE_GIF: return "gif"; case FILE_GIF_LIST: return "gifs"; case FILE_PCM: return "pcm"; @@ -1497,8 +1531,10 @@ const char* File::get_tag(int format) case FILE_TIFF: return "tif"; case FILE_TIFF_LIST: return "tifs"; case FILE_VMPEG: return "m2v"; + case FILE_VORBIS: return "ogg"; case FILE_WAV: return "wav"; case FILE_FFMPEG: return "ffmpg"; + case FILE_REF: return "ref"; } return 0; } @@ -1530,24 +1566,20 @@ const char* File::get_prefix(int format) case FILE_EXR: return "EXR"; case FILE_EXR_LIST: return "EXR_LIST"; case FILE_CR2: return "CR2"; + case FILE_OGG: return "OGG"; + case FILE_VORBIS: return "VORBIS"; case FILE_FLAC: return "FLAC"; case FILE_FFMPEG: return "FFMPEG"; case FILE_SCENE: return "SCENE"; case FILE_CR2_LIST: return "CR2_LIST"; case FILE_GIF_LIST: return "GIF_LIST"; case FILE_DB: return "DB"; + case FILE_REF: return "REF"; } return _("UNKNOWN"); } -PackagingEngine *File::new_packaging_engine(Asset *asset) -{ - PackagingEngine *result = (PackagingEngine*) new PackagingEngineDefault(); - return result; -} - - int File::record_fd() { return file ? file->record_fd() : -1;