#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"
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;
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;
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;
}
actual_width = width = 0;
actual_height = height = 0;
video_length = 0;
+ single_frame = 0;
vmpeg_cmodel = BC_YUV420P;
frame_rate = 0;
program = -1;
//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);
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)
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;
this->audio_length = asset->audio_length;
this->video_length = asset->video_length;
-
+ this->single_frame = asset->single_frame;
ampeg_bitrate = asset->ampeg_bitrate;
ampeg_derivative = asset->ampeg_derivative;
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)
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)
{
!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;
}
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;
}
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))
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"))
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;
}
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);
+ ilacemode_to_xmltext(string, ILACE_MODE_NOTINTERLACED);
+ interlace_mode = ilacemode_from_xmltext(file->tag.get_property("INTERLACE_MODE",string), 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);
-
- 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;
}
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();
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);
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");
layers = GET_DEFAULT("LAYERS", layers);
if(EQUIV(frame_rate, 0)) frame_rate = GET_DEFAULT("FRAMERATE", frame_rate);
video_length = GET_DEFAULT("VIDEO_LENGTH", (int64_t)0);
+ single_frame = GET_DEFAULT("SINGLE_FRAME", (int64_t)0);
}
ampeg_bitrate = GET_DEFAULT("AMPEG_BITRATE", ampeg_bitrate);
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);
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);
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();
}
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);
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);
UPDATE_DEFAULT("LAYERS", layers);
UPDATE_DEFAULT("FRAMERATE", frame_rate);
UPDATE_DEFAULT("VIDEO_LENGTH", video_length);
+ 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);
}
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"
- " byte_order %d signed %d header %d dither %d acodec %c%c%c%c\n",
+ " byte_order %d signed %d header %d dither %d acodec %4.4s\n",
audio_data, channels, sample_rate, bits, byte_order, signed_,
- header, dither, acodec[0], acodec[1], acodec[2], acodec[3]);
+ header, dither, acodec);
fprintf(fp," audio_length %jd\n", audio_length);
char string[BCTEXTLEN];
ilacemode_to_xmltext(string, interlace_mode);
fprintf(fp," video_data %d program %d layers %d framerate %f width %d"
- " height %d vcodec %c%c%c%c aspect_ratio %f ilace_mode %s\n",
+ " height %d vcodec %4.4s aspect_ratio %f ilace_mode %s\n",
video_data, layers, program, frame_rate, width, height,
- vcodec[0], vcodec[1], vcodec[2], vcodec[3], aspect_ratio,string);
- printf(" 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 \n", video_length);
-
-
+ vcodec, aspect_ratio,string);
+ 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;
}
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;
-}
-
-