add bins/folders, fix listbox bad wdw ref, hide vicons fix, remove sort by time
[goodguy/history.git] / cinelerra-5.1 / cinelerra / asset.C
index 6aa73d7bc0941dc5c02a45237fed1c560595ea4d..ec82d0e9e6ead12eb2d7e245f161a5579303b35b 100644 (file)
 
 #include "asset.h"
 #include "assets.h"
+#include "awindowgui.h"
 #include "bchash.h"
 #include "bcsignals.h"
 #include "clip.h"
+#include "cstrdup.h"
 #include "edl.h"
 #include "file.h"
 #include "filesystem.h"
@@ -70,7 +72,6 @@ int Asset::init_values()
        path[0] = 0;
 // Has to be unknown for file probing to succeed
        format = FILE_UNKNOWN;
-       fformat[0] = 0;
        bits = 0;
        byte_order = 0;
        signed_ = 0;
@@ -82,18 +83,23 @@ int Asset::init_values()
        strcpy(vcodec, "");
        strcpy(acodec, "");
 
+       strcpy(fformat,"mp4");
        ff_audio_options[0] = 0;
-       ff_video_options[0] = 0;
+       ff_sample_format[0] = 0;
        ff_audio_bitrate = 0;
+       ff_audio_quality = -1;
+       ff_video_options[0] = 0;
+       ff_pixel_format[0] = 0;
        ff_video_bitrate = 0;
-       ff_video_quality = 0;
+       ff_video_quality = -1;
 
        jpeg_quality = 80;
        aspect_ratio = -1;
-       interlace_autofixoption = BC_ILACE_AUTOFIXOPTION_AUTO;
-       interlace_mode = BC_ILACE_MODE_UNDETECTED;
-       interlace_fixmethod = BC_ILACE_FIXMETHOD_NONE;
+       interlace_autofixoption = ILACE_AUTOFIXOPTION_AUTO;
+       interlace_mode = ILACE_MODE_UNDETECTED;
+       interlace_fixmethod = ILACE_FIXMETHOD_NONE;
 
+       mp3_bitrate = 224;
        ampeg_bitrate = 256;
        ampeg_derivative = 3;
 
@@ -126,15 +132,17 @@ int Asset::init_values()
        ac3_bitrate = 128;
 
        png_use_alpha = 0;
+
        exr_use_alpha = 0;
        exr_compression = 0;
 
        tiff_cmodel = 0;
        tiff_compression = 0;
+       mov_sphere = 0;
+       jpeg_sphere = 0;
 
        use_header = 1;
        id = EDL::next_id();
-       reset_timecode();
 
        return 0;
 }
@@ -173,17 +181,6 @@ void Asset::boundaries()
 //printf("Asset::boundaries %d %d %f\n", __LINE__, sample_rate, frame_rate);
 }
 
-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);
@@ -192,8 +189,8 @@ void Asset::copy_from(Asset *asset, int do_index)
 
 void Asset::copy_location(Asset *asset)
 {
-       strcpy(this->path, asset->path);
-       strcpy(this->folder, asset->folder);
+       strcpy(path, asset->path);
+       awindow_folder = asset->awindow_folder;
 }
 
 void Asset::copy_format(Asset *asset, int do_index)
@@ -229,8 +226,11 @@ void Asset::copy_format(Asset *asset, int do_index)
        strcpy(acodec, asset->acodec);
 
        strcpy(ff_audio_options, asset->ff_audio_options);
-       strcpy(ff_video_options, asset->ff_video_options);
+       strcpy(ff_sample_format, asset->ff_sample_format);
        ff_audio_bitrate = asset->ff_audio_bitrate;
+       ff_audio_quality = asset->ff_audio_quality;
+       strcpy(ff_video_options, asset->ff_video_options);
+       strcpy(ff_pixel_format, asset->ff_pixel_format);
        ff_video_bitrate = asset->ff_video_bitrate;
        ff_video_quality = asset->ff_video_quality;
 
@@ -280,12 +280,10 @@ void Asset::copy_format(Asset *asset, int do_index)
 
        tiff_cmodel = asset->tiff_cmodel;
        tiff_compression = asset->tiff_compression;
-
-       strcpy(reel_name, asset->reel_name);
-       reel_number = asset->reel_number;
-       tcstart = asset->tcstart;
-       tcend = asset->tcend;
-       tcformat = asset->tcformat;
+       
+       
+       mov_sphere = asset->mov_sphere;
+       jpeg_sphere = asset->jpeg_sphere;
 }
 
 int64_t Asset::get_index_offset(int channel)
@@ -318,24 +316,35 @@ char* Asset::get_compression_text(int audio, int video)
        return 0;
 }
 
-Asset& Asset::operator=(Asset &asset)
+int Asset::equivalent(Asset &asset, int test_audio, int test_video, EDL *edl)
 {
-printf("Asset::operator=\n");
-       copy_location(&asset);
-       copy_format(&asset, 1);
-       return *this;
-}
-
-
-int Asset::equivalent(Asset &asset,
-       int test_audio,
-       int test_video)
-{
-       int result = (!strcmp(asset.path, path) &&
-               format == asset.format);
+       int result = format == asset.format ? 1 : 0;
+       if( result && strcmp(asset.path, path) ) {
+               char *out_path = edl ? FileSystem::basepath(edl->path) : 0;
+               char *sp = out_path ? strrchr(out_path,'/') : 0;
+               if( sp ) *++sp = 0;
+               char *apath = FileSystem::basepath(asset.path);
+               char *tpath = FileSystem::basepath(this->path);
+               if( out_path ) {
+                       if( *apath != '/' ) {
+                               char *cp = cstrcat(2, out_path, apath);
+                               delete [] apath;  apath = FileSystem::basepath(cp);
+                               delete [] cp;
+                       }
+                       if( *tpath != '/' ) {
+                               char *cp = cstrcat(2, out_path, tpath);
+                               delete [] tpath;  tpath = FileSystem::basepath(cp);
+                               delete [] cp;
+                       }
+               }
+               if( strcmp(apath, tpath) ) result = 0;
+               delete [] apath;
+               delete [] tpath;
+               delete [] out_path;
+       }
 
-       if(result && format == FILE_FFMPEG)
-               result = !strcmp(fformat, asset.fformat);
+       if(result && format == FILE_FFMPEG && strcmp(fformat, asset.fformat) )
+               result = 0;
 
        if(test_audio && result)
        {
@@ -349,8 +358,9 @@ int Asset::equivalent(Asset &asset,
                        !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;
-
+                               !strcmp(ff_sample_format, asset.ff_sample_format) &&
+                               ff_audio_bitrate == asset.ff_audio_bitrate &&
+                               ff_audio_quality == asset.ff_audio_quality;
        }
 
 
@@ -365,13 +375,11 @@ int Asset::equivalent(Asset &asset,
                        width == asset.width &&
                        height == asset.height &&
                        !strcmp(vcodec, asset.vcodec) &&
-                       strcmp(reel_name, asset.reel_name) == 0 &&
-                       reel_number == asset.reel_number &&
-                       tcstart == asset.tcstart &&
-                       tcend == asset.tcend &&
-                       tcformat == asset.tcformat);
+                       mov_sphere == asset.mov_sphere &&
+                       jpeg_sphere == asset.jpeg_sphere);
                if(result && format == FILE_FFMPEG)
                        result = !strcmp(ff_video_options, asset.ff_video_options) &&
+                               !strcmp(ff_pixel_format, asset.ff_pixel_format) &&
                                ff_video_bitrate == asset.ff_video_bitrate &&
                                ff_video_quality == asset.ff_video_quality;
        }
@@ -379,19 +387,6 @@ int Asset::equivalent(Asset &asset,
        return result;
 }
 
-int Asset::operator==(Asset &asset)
-{
-
-       return equivalent(asset,
-               1,
-               1);
-}
-
-int Asset::operator!=(Asset &asset)
-{
-       return !(*this == asset);
-}
-
 int Asset::test_path(const char *path)
 {
        if(!strcasecmp(this->path, path))
@@ -464,7 +459,7 @@ int Asset::read(FileXML *file,
                        else
                        if(file->tag.title_is("FOLDER"))
                        {
-                               strcpy(folder, file->read_text());
+                               awindow_folder = file->tag.get_property("NUMBER", AW_MEDIA_FOLDER);
                        }
                        else
                        if(file->tag.title_is("VIDEO"))
@@ -505,13 +500,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);
-
-       if(!video_data)
-       {
-               tcstart = 0;
-               tcend = audio_length;
-               tcformat = 0;
-       }
        return 0;
 }
 
@@ -533,21 +521,17 @@ int Asset::read_video(FileXML *file)
        file->tag.get_property("VCODEC", vcodec);
 
        video_length = file->tag.get_property("VIDEO_LENGTH", (int64_t)0);
+       mov_sphere = file->tag.get_property("MOV_SPHERE", 0);
+       jpeg_sphere = file->tag.get_property("JPEG_SPHERE", 0);
        single_frame = file->tag.get_property("SINGLE_FRAME", (int64_t)0);
 
        interlace_autofixoption = file->tag.get_property("INTERLACE_AUTOFIX",0);
 
-       ilacemode_to_xmltext(string, BC_ILACE_MODE_NOTINTERLACED);
-       interlace_mode = ilacemode_from_xmltext(file->tag.get_property("INTERLACE_MODE",string), BC_ILACE_MODE_NOTINTERLACED);
-
-       ilacefixmethod_to_xmltext(string, BC_ILACE_FIXMETHOD_NONE);
-       interlace_fixmethod = ilacefixmethod_from_xmltext(file->tag.get_property("INTERLACE_FIXMETHOD",string), BC_ILACE_FIXMETHOD_NONE);
+       ilacemode_to_xmltext(string, ILACE_MODE_NOTINTERLACED);
+       interlace_mode = ilacemode_from_xmltext(file->tag.get_property("INTERLACE_MODE",string), ILACE_MODE_NOTINTERLACED);
 
-       file->tag.get_property("REEL_NAME", reel_name);
-       reel_number = file->tag.get_property("REEL_NUMBER", reel_number);
-       tcstart = file->tag.get_property("TCSTART", tcstart);
-       tcend = file->tag.get_property("TCEND", tcend);
-       tcformat = file->tag.get_property("TCFORMAT", tcformat);
+       ilacefixmethod_to_xmltext(string, ILACE_FIXMETHOD_NONE);
+       interlace_fixmethod = ilacefixmethod_from_xmltext(file->tag.get_property("INTERLACE_FIXMETHOD",string), ILACE_FIXMETHOD_NONE);
 
        return 0;
 }
@@ -593,8 +577,8 @@ int Asset::write(FileXML *file,
        file->append_newline();
 
        file->tag.set_title("FOLDER");
+       file->tag.set_property("NUMBER", awindow_folder);
        file->append_tag();
-       file->append_text(folder);
        file->tag.set_title("/FOLDER");
        file->append_tag();
        file->append_newline();
@@ -694,6 +678,8 @@ int Asset::write_video(FileXML *file)
                file->tag.set_property("VCODEC", vcodec);
 
        file->tag.set_property("VIDEO_LENGTH", video_length);
+       file->tag.set_property("MOV_SPHERE", mov_sphere);
+       file->tag.set_property("JPEG_SPHERE", jpeg_sphere);
        file->tag.set_property("SINGLE_FRAME", single_frame);
 
        file->tag.set_property("INTERLACE_AUTOFIX", interlace_autofixoption);
@@ -704,13 +690,6 @@ int Asset::write_video(FileXML *file)
        ilacefixmethod_to_xmltext(string, interlace_fixmethod);
        file->tag.set_property("INTERLACE_FIXMETHOD", string);
 
-
-       file->tag.set_property("REEL_NAME", reel_name);
-       file->tag.set_property("REEL_NUMBER", reel_number);
-       file->tag.set_property("TCSTART", tcstart);
-       file->tag.set_property("TCEND", tcend);
-       file->tag.set_property("TCFORMAT", tcformat);
-
        file->append_tag();
        if(video_data)
                file->tag.set_title("/VIDEO");
@@ -821,8 +800,11 @@ void Asset::load_defaults(BC_Hash *defaults,
        theora_keyframe_force_frequency = GET_DEFAULT("THEORA_FORCE_KEYFRAME_FREQUENCY", theora_keyframe_force_frequency);
 
        GET_DEFAULT("FF_AUDIO_OPTIONS", ff_audio_options);
+       GET_DEFAULT("FF_SAMPLE_FORMAT", ff_sample_format);
        ff_audio_bitrate = GET_DEFAULT("FF_AUDIO_BITRATE", ff_audio_bitrate);
+       ff_audio_quality = GET_DEFAULT("FF_AUDIO_QUALITY", ff_audio_quality);
        GET_DEFAULT("FF_VIDEO_OPTIONS", ff_video_options);
+       GET_DEFAULT("FF_PIXEL_FORMAT", ff_pixel_format);
        ff_video_bitrate = GET_DEFAULT("FF_VIDEO_BITRATE", ff_video_bitrate);
        ff_video_quality = GET_DEFAULT("FF_VIDEO_QUALITY", ff_video_quality);
 
@@ -831,9 +813,9 @@ void Asset::load_defaults(BC_Hash *defaults,
        jpeg_quality = GET_DEFAULT("JPEG_QUALITY", jpeg_quality);
        aspect_ratio = GET_DEFAULT("ASPECT_RATIO", aspect_ratio);
 
-       interlace_autofixoption = BC_ILACE_AUTOFIXOPTION_AUTO;
-       interlace_mode          = BC_ILACE_MODE_UNDETECTED;
-       interlace_fixmethod     = BC_ILACE_FIXMETHOD_UPONE;
+       interlace_autofixoption = ILACE_AUTOFIXOPTION_AUTO;
+       interlace_mode          = ILACE_MODE_UNDETECTED;
+       interlace_fixmethod     = ILACE_FIXMETHOD_UPONE;
 
 // MPEG format information
        vmpeg_iframe_distance = GET_DEFAULT("VMPEG_IFRAME_DISTANCE", vmpeg_iframe_distance);
@@ -865,12 +847,8 @@ void Asset::load_defaults(BC_Hash *defaults,
        tiff_cmodel = GET_DEFAULT("TIFF_CMODEL", tiff_cmodel);
        tiff_compression = GET_DEFAULT("TIFF_COMPRESSION", tiff_compression);
 
-       GET_DEFAULT("REEL_NAME", reel_name);
-       reel_number = GET_DEFAULT("REEL_NUMBER", reel_number);
-       tcstart = GET_DEFAULT("TCSTART", tcstart);
-       tcend = GET_DEFAULT("TCEND", tcend);
-       tcformat = GET_DEFAULT("TCFORMAT", tcformat);
-
+       mov_sphere = GET_DEFAULT("MOV_SPHERE", mov_sphere);
+       jpeg_sphere = GET_DEFAULT("JPEG_SPHERE", jpeg_sphere);
        boundaries();
 }
 
@@ -916,8 +894,11 @@ void Asset::save_defaults(BC_Hash *defaults,
                UPDATE_DEFAULT("VORBIS_MAX_BITRATE", vorbis_max_bitrate);
 
                UPDATE_DEFAULT("FF_AUDIO_OPTIONS", ff_audio_options);
+               UPDATE_DEFAULT("FF_SAMPLE_FORMAT", ff_sample_format);
                UPDATE_DEFAULT("FF_AUDIO_BITRATE", ff_audio_bitrate);
+               UPDATE_DEFAULT("FF_AUDIO_QUALITY", ff_audio_quality);
                UPDATE_DEFAULT("FF_VIDEO_OPTIONS", ff_video_options);
+               UPDATE_DEFAULT("FF_PIXEL_FORMAT",  ff_pixel_format);
                UPDATE_DEFAULT("FF_VIDEO_BITRATE", ff_video_bitrate);
                UPDATE_DEFAULT("FF_VIDEO_QUALITY", ff_video_quality);
 
@@ -958,8 +939,16 @@ void Asset::save_defaults(BC_Hash *defaults,
                UPDATE_DEFAULT("EXR_COMPRESSION", exr_compression);
                UPDATE_DEFAULT("TIFF_CMODEL", tiff_cmodel);
                UPDATE_DEFAULT("TIFF_COMPRESSION", tiff_compression);
+
+
+
+               UPDATE_DEFAULT("MOV_SPHERE", mov_sphere);
+               UPDATE_DEFAULT("JPEG_SPHERE", jpeg_sphere);
        }
 
+
+
+
        if(do_bits)
        {
                UPDATE_DEFAULT("BITS", bits);
@@ -990,12 +979,6 @@ void Asset::save_defaults(BC_Hash *defaults,
                UPDATE_DEFAULT("SINGLE_FRAME", single_frame);
 
        }
-
-       UPDATE_DEFAULT("REEL_NAME", reel_name);
-       UPDATE_DEFAULT("REEL_NUMBER", reel_number);
-       UPDATE_DEFAULT("TCSTART", tcstart);
-       UPDATE_DEFAULT("TCEND", tcend);
-       UPDATE_DEFAULT("TCFORMAT", tcformat);
 }
 
 
@@ -1014,8 +997,11 @@ int Asset::dump(FILE *fp)
        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_sample_format=\"%s\"\n", ff_sample_format);
        fprintf(fp,"   ff_audio_bitrate=%d\n", ff_audio_bitrate);
+       fprintf(fp,"   ff_audio_quality=%d\n", ff_audio_quality);
        fprintf(fp,"   ff_video_options=\"%s\"\n", ff_video_options);
+       fprintf(fp,"   ff_pixel_format=\"%s\"\n", ff_pixel_format);
        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"
@@ -1029,11 +1015,8 @@ int Asset::dump(FILE *fp)
                " height %d vcodec %4.4s aspect_ratio %f ilace_mode %s\n",
                video_data, layers, program, frame_rate, width, height,
                vcodec, aspect_ratio,string);
-       fprintf(fp,"   reel_name %s reel_number %i tcstart %jd tcend %jd tcf %d\n",
-               reel_name, reel_number, tcstart, tcend, tcformat);
        fprintf(fp,"   video_length %jd repeat %d\n", video_length, single_frame);
-
-
+       printf("   mov_sphere=%d jpeg_sphere=%d\n", mov_sphere, jpeg_sphere);
        return 0;
 }
 
@@ -1112,23 +1095,3 @@ double Asset::total_length_framealigned(double fps)
        return 0;
 }
 
-int Asset::set_timecode(char *tc, int format, int end)
-{
-       int hr, min, sec;
-
-       hr = ((int) tc[0] - 48) * 10 + (int) tc[1] - 48;
-       min = ((int) tc[3] - 48) * 10 + (int) tc[4] - 48;
-       sec = ((int) tc[6] - 48) * 10 + (int) tc[7] - 48;
-
-       // This needs to be modified to handle drop-frame
-
-       if(end)
-               tcend = (int64_t) (((hr * 3600) + (min * 60) + sec) * frame_rate);
-       else
-               tcstart = (int64_t) (((hr * 3600) + (min * 60) + sec) * frame_rate);
-
-       tcformat = format;
-       return 0;
-}
-
-