X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.0%2Fcinelerra%2Fasset.C;h=7a33a7cedcd0d5e1912c41b42d9647f7be1de093;hb=6c0c8bd0e577001d1cc18c6c27d58e62f58a6bff;hp=50f3798e2bbe637b8a7fdbb6efc7dafb96dc3103;hpb=2d99bb8ce591f05a31464b517d85dc2bc35b2abe;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.0/cinelerra/asset.C b/cinelerra-5.0/cinelerra/asset.C index 50f3798e..7a33a7ce 100644 --- a/cinelerra-5.0/cinelerra/asset.C +++ b/cinelerra-5.0/cinelerra/asset.C @@ -30,7 +30,6 @@ #include "filexml.h" #include "format.inc" #include "indexstate.h" -#include "quicktime.h" #include #include @@ -69,9 +68,9 @@ Asset::~Asset() int Asset::init_values() { path[0] = 0; -// format = FILE_MOV; // Has to be unknown for file probing to succeed format = FILE_UNKNOWN; + fformat[0] = 0; bits = 0; byte_order = 0; signed_ = 0; @@ -80,8 +79,15 @@ int Asset::init_values() reset_audio(); reset_video(); - strcpy(vcodec, QUICKTIME_YUV2); - strcpy(acodec, QUICKTIME_TWOS); + strcpy(vcodec, ""); + strcpy(acodec, ""); + + ff_audio_options[0] = 0; + ff_video_options[0] = 0; + ff_audio_bitrate = 0; + ff_video_bitrate = 0; + ff_video_quality = 0; + jpeg_quality = 100; aspect_ratio = -1; @@ -159,11 +165,6 @@ int Asset::init_values() id = EDL::next_id(); - pipe[0] = 0; - use_pipe = 0; - - reset_timecode(); - return 0; } @@ -200,23 +201,6 @@ void Asset::boundaries() //printf("Asset::boundaries %d %d %f\n", __LINE__, sample_rate, frame_rate); } - -void Asset::reset_index() -{ - index_state->reset(); -} - -int Asset::reset_timecode() -{ - strcpy(reel_name, "cin0000"); - reel_number = 0; - tcstart = 0; - tcend = 0; - tcformat = 0; - - return 0; -} - void Asset::copy_from(Asset *asset, int do_index) { copy_location(asset); @@ -235,6 +219,7 @@ void Asset::copy_format(Asset *asset, int do_index) audio_data = asset->audio_data; format = asset->format; + strcpy(fformat, asset->fformat); channels = asset->channels; sample_rate = asset->sample_rate; bits = asset->bits; @@ -259,6 +244,12 @@ void Asset::copy_format(Asset *asset, int do_index) strcpy(vcodec, asset->vcodec); strcpy(acodec, asset->acodec); + strcpy(ff_audio_options, asset->ff_audio_options); + strcpy(ff_video_options, asset->ff_video_options); + ff_audio_bitrate = asset->ff_audio_bitrate; + ff_video_bitrate = asset->ff_video_bitrate; + ff_video_quality = asset->ff_video_quality; + this->audio_length = asset->audio_length; this->video_length = asset->video_length; @@ -346,31 +337,18 @@ int64_t Asset::get_index_size(int channel) char* Asset::get_compression_text(int audio, int video) { - if(audio) - { - switch(format) - { - case FILE_MOV: - case FILE_AVI: - if(acodec[0]) - return quicktime_acodec_title(acodec); - else - return 0; - break; + if(audio) { + switch(format) { + case FILE_FFMPEG: + if( acodec[0] ) return acodec; + break; } } - else - if(video) - { - switch(format) - { - case FILE_MOV: - case FILE_AVI: - if(vcodec[0]) - return quicktime_vcodec_title(vcodec); - else - return 0; - break; + if(video) { + switch(format) { + case FILE_FFMPEG: + if( vcodec[0] ) return vcodec; + break; } } return 0; @@ -392,6 +370,9 @@ int Asset::equivalent(Asset &asset, int result = (!strcmp(asset.path, path) && format == asset.format); + if(result && format == FILE_FFMPEG) + result = !strcmp(fformat, asset.fformat); + if(test_audio && result) { result = (channels == asset.channels && @@ -402,6 +383,10 @@ int Asset::equivalent(Asset &asset, header == asset.header && dither == asset.dither && !strcmp(acodec, asset.acodec)); + if(result && format == FILE_FFMPEG) + result = !strcmp(ff_audio_options, asset.ff_audio_options) && + ff_audio_bitrate == asset.ff_audio_bitrate; + } @@ -413,6 +398,10 @@ int Asset::equivalent(Asset &asset, width == asset.width && height == asset.height && !strcmp(vcodec, asset.vcodec)); + if(result && format == FILE_FFMPEG) + result = !strcmp(ff_video_options, asset.ff_video_options) && + ff_video_bitrate == asset.ff_video_bitrate && + ff_video_quality == asset.ff_video_quality; } return result; @@ -503,6 +492,7 @@ int Asset::read(FileXML *file, format = File::strtoformat(string); use_header = file->tag.get_property("USE_HEADER", use_header); + file->tag.get_property("FFORMAT", fformat); } else if(file->tag.title_is("FOLDER")) @@ -548,9 +538,6 @@ int Asset::read_audio(FileXML *file) audio_length = file->tag.get_property("AUDIO_LENGTH", (int64_t)0); acodec[0] = 0; file->tag.get_property("ACODEC", acodec); - - - return 0; } @@ -581,11 +568,6 @@ int Asset::read_index(FileXML *file) return 0; } -int Asset::write_index(const char *path, int data_bytes) -{ - return index_state->write_index(path, data_bytes, this, audio_length); -} - // Output path is the path of the output file if name truncation is desired. // It is a "" if complete names should be used. @@ -633,6 +615,7 @@ int Asset::write(FileXML *file, file->tag.set_property("TYPE", File::formattostr(format)); file->tag.set_property("USE_HEADER", use_header); + file->tag.set_property("FFORMAT", fformat); file->append_tag(); file->append_newline(); @@ -729,7 +712,6 @@ int Asset::write_index(FileXML *file) - const char* Asset::construct_param(const char *param, const char *prefix, char *return_value) @@ -772,6 +754,7 @@ void Asset::load_defaults(BC_Hash *defaults, { format = GET_DEFAULT("FORMAT", format); use_header = GET_DEFAULT("USE_HEADER", use_header); + GET_DEFAULT("FFORMAT", fformat); } if(do_data_types) @@ -789,7 +772,6 @@ void Asset::load_defaults(BC_Hash *defaults, -// Used by filefork channels = GET_DEFAULT("CHANNELS", 2); if(!sample_rate) sample_rate = GET_DEFAULT("RATE", 44100); header = GET_DEFAULT("HEADER", 0); @@ -820,9 +802,13 @@ void Asset::load_defaults(BC_Hash *defaults, theora_quality = GET_DEFAULT("THEORA_QUALITY", theora_quality); theora_sharpness = GET_DEFAULT("THEORA_SHARPNESS", theora_sharpness); theora_keyframe_frequency = GET_DEFAULT("THEORA_KEYFRAME_FREQUENCY", theora_keyframe_frequency); - theora_keyframe_force_frequency = GET_DEFAULT("THEORA_FORCE_KEYFRAME_FEQUENCY", theora_keyframe_force_frequency); - + theora_keyframe_force_frequency = GET_DEFAULT("THEORA_FORCE_KEYFRAME_FREQUENCY", theora_keyframe_force_frequency); + GET_DEFAULT("FF_AUDIO_OPTIONS", ff_audio_options); + ff_audio_bitrate = GET_DEFAULT("FF_AUDIO_BITRATE", ff_audio_bitrate); + GET_DEFAULT("FF_VIDEO_OPTIONS", ff_video_options); + ff_video_bitrate = GET_DEFAULT("FF_VIDEO_BITRATE", ff_video_bitrate); + ff_video_quality = GET_DEFAULT("FF_VIDEO_QUALITY", ff_video_quality); mp3_bitrate = GET_DEFAULT("MP3_BITRATE", mp3_bitrate); mp4a_bitrate = GET_DEFAULT("MP4A_BITRATE", mp4a_bitrate); @@ -899,6 +885,7 @@ void Asset::save_defaults(BC_Hash *defaults, { UPDATE_DEFAULT("FORMAT", format); UPDATE_DEFAULT("USE_HEADER", use_header); + UPDATE_DEFAULT("FFORMAT", fformat); } if(do_data_types) @@ -920,13 +907,18 @@ void Asset::save_defaults(BC_Hash *defaults, UPDATE_DEFAULT("VORBIS_BITRATE", vorbis_bitrate); UPDATE_DEFAULT("VORBIS_MAX_BITRATE", vorbis_max_bitrate); + UPDATE_DEFAULT("FF_AUDIO_OPTIONS", ff_audio_options); + UPDATE_DEFAULT("FF_AUDIO_BITRATE", ff_audio_bitrate); + UPDATE_DEFAULT("FF_VIDEO_OPTIONS", ff_video_options); + UPDATE_DEFAULT("FF_VIDEO_BITRATE", ff_video_bitrate); + UPDATE_DEFAULT("FF_VIDEO_QUALITY", ff_video_quality); UPDATE_DEFAULT("THEORA_FIX_BITRATE", theora_fix_bitrate); UPDATE_DEFAULT("THEORA_BITRATE", theora_bitrate); UPDATE_DEFAULT("THEORA_QUALITY", theora_quality); UPDATE_DEFAULT("THEORA_SHARPNESS", theora_sharpness); UPDATE_DEFAULT("THEORA_KEYFRAME_FREQUENCY", theora_keyframe_frequency); - UPDATE_DEFAULT("THEORA_FORCE_KEYFRAME_FEQUENCY", theora_keyframe_force_frequency); + UPDATE_DEFAULT("THEORA_FORCE_KEYFRAME_FREQUENCY", theora_keyframe_force_frequency); @@ -1001,7 +993,6 @@ void Asset::save_defaults(BC_Hash *defaults, -// Used by filefork UPDATE_DEFAULT("CHANNELS", channels); UPDATE_DEFAULT("RATE", sample_rate); UPDATE_DEFAULT("HEADER", header); @@ -1029,24 +1020,18 @@ void Asset::save_defaults(BC_Hash *defaults, -int Asset::update_path(char *new_path) -{ - strcpy(path, new_path); - return 0; -} - -void Asset::update_index(Asset *asset) -{ - index_state->copy_from(asset->index_state); -} - - int Asset::dump(FILE *fp) { fprintf(fp," asset::dump\n"); fprintf(fp," this=%p path=%s\n", this, path); fprintf(fp," index_status %d\n", index_state->index_status); fprintf(fp," format %d\n", format); + fprintf(fp," fformat=\"%s\"\n", fformat); + fprintf(fp," ff_audio_options=\"%s\"\n", ff_audio_options); + fprintf(fp," ff_audio_bitrate=%d\n", ff_audio_bitrate); + fprintf(fp," ff_video_options=\"%s\"\n", ff_video_options); + fprintf(fp," ff_video_bitrate=%d\n", ff_video_bitrate); + fprintf(fp," ff_video_quality=%d\n", ff_video_quality); fprintf(fp," audio_data %d channels %d samplerate %d bits %d" " byte_order %d signed %d header %d dither %d acodec %c%c%c%c\n", audio_data, channels, sample_rate, bits, byte_order, signed_,