projects
/
goodguy
/
history.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ffplugin default opts now are unspecified, menubar pulldowns persist on leave notify
[goodguy/history.git]
/
cinelerra-5.1
/
cinelerra
/
fileogg.C
diff --git
a/cinelerra-5.1/cinelerra/fileogg.C
b/cinelerra-5.1/cinelerra/fileogg.C
index 747fa399948617866f79ee3daecd96a825f075b5..b413066d200db285eca71ff11b3d6205e967e779 100644
(file)
--- a/
cinelerra-5.1/cinelerra/fileogg.C
+++ b/
cinelerra-5.1/cinelerra/fileogg.C
@@
-100,10
+100,8
@@
FileOGG::~FileOGG()
}
void FileOGG::get_parameters(BC_WindowBase *parent_window,
}
void FileOGG::get_parameters(BC_WindowBase *parent_window,
- Asset *asset,
- BC_WindowBase* &format_window,
- int audio_options,
- int video_options)
+ Asset *asset, BC_WindowBase* &format_window,
+ int audio_options, int video_options, EDL *edl)
{
if(audio_options)
{
{
if(audio_options)
{
@@
-1501,15
+1499,9
@@
int FileOGG::read_frame(VFrame *frame)
yuv.v += yuv.uv_stride * (yuv.uv_height - 1);
yuv.y_stride = - yuv.y_stride;
yuv.uv_stride = - yuv.uv_stride;*/
yuv.v += yuv.uv_stride * (yuv.uv_height - 1);
yuv.y_stride = - yuv.y_stride;
yuv.uv_stride = - yuv.uv_stride;*/
- VFrame *temp_frame = new VFrame(yuv.y,
- -1,
- 0,
- yuv.u - yuv.y,
- yuv.v - yuv.y,
- - yuv.y_stride,
- yuv.y_height,
- BC_YUV420P,
- - yuv.y_stride);
+ VFrame *temp_frame = new VFrame(yuv.y, -1, 0,
+ yuv.u - yuv.y, yuv.v - yuv.y, - yuv.y_stride,
+ yuv.y_height, BC_YUV420P, - yuv.y_stride);
// copy into temp frame...
BC_CModels::transfer(frame->get_rows(),
// copy into temp frame...
BC_CModels::transfer(frame->get_rows(),
@@
-1577,9
+1569,12
@@
int FileOGG::set_audio_position(int64_t x)
int FileOGG::move_history(int from, int to, int len)
{
int FileOGG::move_history(int from, int to, int len)
{
- for(int i = 0; i < asset->channels; i++)
- memmove(pcm_history[i] + to, pcm_history[i] + from, sizeof(float) * len);
+ if( len > 0 ) {
+ for(int i = 0; i < asset->channels; i++)
+ memmove(pcm_history[i] + to, pcm_history[i] + from, sizeof(float) * len);
+ }
history_start = history_start + from - to;
history_start = history_start + from - to;
+ if( history_start < 0 ) history_start = 0;
return 0;
}
return 0;
}
@@
-1956,12
+1951,7
@@
int FileOGG::write_frames_theora(VFrame ***frames, int len, int e_o_s)
if (!temp_frame)
{
if (!temp_frame)
{
- temp_frame = new VFrame (0,
- -1,
- tf->ti.width,
- tf->ti.height,
- BC_YUV420P,
- -1);
+ temp_frame = new VFrame ( tf->ti.width, tf->ti.height, BC_YUV420P, 0);
}
VFrame *frame = frames[0][j];
int in_color_model = frame->get_color_model();
}
VFrame *frame = frames[0][j];
int in_color_model = frame->get_color_model();
@@
-2331,7
+2321,7
@@
PackagingEngineOGG::~PackagingEngineOGG()
delete [] packages;
}
if (default_asset)
delete [] packages;
}
if (default_asset)
- de
lete default_asset
;
+ de
fault_asset->remove_user()
;
}
}
@@
-2339,8
+2329,8
@@
PackagingEngineOGG::~PackagingEngineOGG()
int PackagingEngineOGG::create_packages_single_farm(
EDL *edl,
Preferences *preferences,
int PackagingEngineOGG::create_packages_single_farm(
EDL *edl,
Preferences *preferences,
- Asset *default_asset,
- double total_start,
+ Asset *default_asset,
+ double total_start,
double total_end)
{
this->total_start = total_start;
double total_end)
{
this->total_start = total_start;
@@
-2349,7
+2339,7
@@
int PackagingEngineOGG::create_packages_single_farm(
this->preferences = preferences;
this->preferences = preferences;
-// We make A COPY of the asset, because we set audio_data = 0 on local asset which is the same copy as default_asset...
+// We make A COPY of the asset, because we set audio_data = 0 on local asset which is the same copy as default_asset...
// Should be taken care of somewhere else actually
this->default_asset = new Asset(*default_asset);
// Should be taken care of somewhere else actually
this->default_asset = new Asset(*default_asset);
@@
-2376,10
+2366,12
@@
int PackagingEngineOGG::create_packages_single_farm(
if (default_asset->audio_data)
{
packages[local_current_package] = new RenderPackage;
if (default_asset->audio_data)
{
packages[local_current_package] = new RenderPackage;
- sprintf(packages[current_package]->path, "%s.audio", default_asset->path);
+ snprintf(packages[current_package]->path,
+ sizeof(packages[current_package]->path),
+ "%s.audio", default_asset->path);
local_current_package++;
}
local_current_package++;
}
-
+
if (default_asset->video_data)
{
video_package_len = (total_len) / preferences->renderfarm_job_count;
if (default_asset->video_data)
{
video_package_len = (total_len) / preferences->renderfarm_job_count;
@@
-2387,17
+2379,17
@@
int PackagingEngineOGG::create_packages_single_farm(
int number_start; // Character in the filename path at which the number begins
int total_digits; // Total number of digits including padding the user specified.
int number_start; // Character in the filename path at which the number begins
int total_digits; // Total number of digits including padding the user specified.
- Render::get_starting_number(default_asset->path,
+ Render::get_starting_number(default_asset->path,
current_number,
current_number,
- number_start,
+ number_start,
total_digits,
3);
for(int i = 0; i < preferences->renderfarm_job_count; i++)
{
RenderPackage *package = packages[local_current_package] = new RenderPackage;
total_digits,
3);
for(int i = 0; i < preferences->renderfarm_job_count; i++)
{
RenderPackage *package = packages[local_current_package] = new RenderPackage;
- Render::create_filename(package->path,
- default_asset->path,
+ Render::create_filename(package->path,
+ default_asset->path,
current_number,
total_digits,
number_start);
current_number,
total_digits,
number_start);
@@
-2408,7
+2400,7
@@
int PackagingEngineOGG::create_packages_single_farm(
return 0;
}
return 0;
}
-RenderPackage* PackagingEngineOGG::get_package_single_farm(double frames_per_second,
+RenderPackage* PackagingEngineOGG::get_package_single_farm(double frames_per_second,
int client_number,
int use_local_rate)
{
int client_number,
int use_local_rate)
{
@@
-2436,13
+2428,13
@@
RenderPackage* PackagingEngineOGG::get_package_single_farm(double frames_per_sec
result->audio_start = audio_position;
result->video_start = video_position;
result->audio_start = audio_position;
result->video_start = video_position;
- result->audio_end = audio_position +
+ result->audio_end = audio_position +
Units::round(video_package_len * default_asset->sample_rate);
Units::round(video_package_len * default_asset->sample_rate);
- result->video_end = video_position +
+ result->video_end = video_position +
Units::round(video_package_len * default_asset->frame_rate);
// Last package... take it all!
Units::round(video_package_len * default_asset->frame_rate);
// Last package... take it all!
- if (current_package == total_packages -1 )
+ if (current_package == total_packages -1 )
{
result->audio_end = audio_end;
result->video_end = video_end;
{
result->audio_end = audio_end;
result->video_end = video_end;
@@
-2452,7
+2444,7
@@
RenderPackage* PackagingEngineOGG::get_package_single_farm(double frames_per_sec
video_position = result->video_end;
}
video_position = result->video_end;
}
-
+
current_package ++;
return result;
current_package ++;
return result;
@@
-2471,9
+2463,9
@@
void PackagingEngineOGG::get_package_paths(ArrayList<char*> *path_list)
int64_t PackagingEngineOGG::get_progress_max()
{
int64_t PackagingEngineOGG::get_progress_max()
{
- return Units::to_int64(default_asset->sample_rate *
+ return Units::to_int64(default_asset->sample_rate *
(total_end - total_start)) * 2+
(total_end - total_start)) * 2+
- Units::to_int64(preferences->render_preroll *
+ Units::to_int64(preferences->render_preroll *
total_packages *
default_asset->sample_rate);
}
total_packages *
default_asset->sample_rate);
}
@@
-2482,7
+2474,7
@@
int PackagingEngineOGG::packages_are_done()
{
{
-// Mux audio and video into one file
+// Mux audio and video into one file
// First fix our asset... have to workaround the bug of corruption of local asset
// Render::check_asset(edl, *default_asset);
// First fix our asset... have to workaround the bug of corruption of local asset
// Render::check_asset(edl, *default_asset);
@@
-2491,11
+2483,12
@@
int PackagingEngineOGG::packages_are_done()
File *audio_file_gen = 0, *video_file_gen = 0;
FileOGG *video_file = 0, *audio_file = 0;
ogg_stream_state audio_in_stream, video_in_stream;
File *audio_file_gen = 0, *video_file_gen = 0;
FileOGG *video_file = 0, *audio_file = 0;
ogg_stream_state audio_in_stream, video_in_stream;
-
+
int local_current_package = 0;
if (default_asset->audio_data)
{
audio_asset = new Asset(packages[local_current_package]->path);
int local_current_package = 0;
if (default_asset->audio_data)
{
audio_asset = new Asset(packages[local_current_package]->path);
+ audio_asset->format = FILE_OGG;
local_current_package++;
audio_file_gen = new File();
local_current_package++;
audio_file_gen = new File();
@@
-2508,6
+2501,7
@@
int PackagingEngineOGG::packages_are_done()
if (default_asset->video_data)
{
video_asset = new Asset(packages[local_current_package]->path);
if (default_asset->video_data)
{
video_asset = new Asset(packages[local_current_package]->path);
+ video_asset->format = FILE_OGG;
local_current_package++;
video_file_gen = new File();
local_current_package++;
video_file_gen = new File();
@@
-2547,8
+2541,9
@@
int PackagingEngineOGG::packages_are_done()
ogg_stream_clear(&video_in_stream);
video_file_gen->close_file();
delete video_file_gen;
ogg_stream_clear(&video_in_stream);
video_file_gen->close_file();
delete video_file_gen;
-
delete video_asset
;
+
if( video_asset ) video_asset->remove_user()
;
video_asset = new Asset(packages[local_current_package]->path);
video_asset = new Asset(packages[local_current_package]->path);
+ video_asset->format = FILE_OGG;
local_current_package++;
video_file_gen = new File();
local_current_package++;
video_file_gen = new File();
@@
-2577,20
+2572,20
@@
int PackagingEngineOGG::packages_are_done()
int64_t granulepos = op.granulepos;
if (granulepos != -1)
{
int64_t granulepos = op.granulepos;
if (granulepos != -1)
{
- // Fix granulepos!
+ // Fix granulepos!
int64_t rel_iframe = granulepos >> video_file->theora_keyframe_granule_shift;
int64_t rel_pframe = granulepos - (rel_iframe << video_file->theora_keyframe_granule_shift);
int64_t rel_current_frame = rel_iframe + rel_pframe;
current_frame = frame_offset + rel_current_frame;
int64_t abs_iframe = current_frame - rel_pframe;
int64_t rel_iframe = granulepos >> video_file->theora_keyframe_granule_shift;
int64_t rel_pframe = granulepos - (rel_iframe << video_file->theora_keyframe_granule_shift);
int64_t rel_current_frame = rel_iframe + rel_pframe;
current_frame = frame_offset + rel_current_frame;
int64_t abs_iframe = current_frame - rel_pframe;
-
+
op.granulepos = (abs_iframe << video_file->theora_keyframe_granule_shift) + rel_pframe;
op.granulepos = (abs_iframe << video_file->theora_keyframe_granule_shift) + rel_pframe;
-
-// printf("iframe: %i, pframe: %i, granulepos: %i, op.packetno %lli, abs_iframe: %i\n", rel_iframe, rel_pframe, granulepos, op.packetno, abs_iframe);
-
+
+// printf("iframe: %i, pframe: %i, granulepos: %i, op.packetno %lli, abs_iframe: %i\n", rel_iframe, rel_pframe, granulepos, op.packetno, abs_iframe);
+
}
ogg_stream_packetin (&output_file->tf->to, &op);
}
ogg_stream_packetin (&output_file->tf->to, &op);
- output_file->tf->v_pkg++;
+ output_file->tf->v_pkg++;
}
}
if (audio_ready)
}
}
if (audio_ready)
@@
-2609,42
+2604,44
@@
int PackagingEngineOGG::packages_are_done()
ogg_stream_packetout(&audio_in_stream, &op);
ogg_stream_packetin (&output_file->tf->vo, &op);
audio_packetno++;
ogg_stream_packetout(&audio_in_stream, &op);
ogg_stream_packetin (&output_file->tf->vo, &op);
audio_packetno++;
- output_file->tf->a_pkg++;
+ output_file->tf->a_pkg++;
}
}
}
}
-
+
output_file->flush_ogg(0);
output_file->flush_ogg(0);
-
-
+
+
}
}
-
-// flush_ogg(1) is called on file closing time...
+
+// flush_ogg(1) is called on file closing time...
// output_file->flush_ogg(1);
// Just prevent thet write_samples and write_frames are called
output_file->final_write = 0;
// output_file->flush_ogg(1);
// Just prevent thet write_samples and write_frames are called
output_file->final_write = 0;
-
+
if (default_asset->audio_data)
{
ogg_stream_clear(&audio_in_stream);
audio_file_gen->close_file();
delete audio_file_gen;
if (default_asset->audio_data)
{
ogg_stream_clear(&audio_in_stream);
audio_file_gen->close_file();
delete audio_file_gen;
- delete audio_asset;
+ if( audio_asset )
+ audio_asset->remove_user();
}
if (default_asset->video_data)
{
ogg_stream_clear(&video_in_stream);
video_file_gen->close_file();
delete video_file_gen;
}
if (default_asset->video_data)
{
ogg_stream_clear(&video_in_stream);
video_file_gen->close_file();
delete video_file_gen;
- delete video_asset;
+ if( video_asset )
+ video_asset->remove_user();
}
output_file_gen->close_file();
delete output_file_gen;
}
output_file_gen->close_file();
delete output_file_gen;
-//
Now delete the temp files
-
for(int i = 0; i < total_packages; i++)
-
unlink(packages[i]->path);
+//
don't delete the temp files, for now
+
//
for(int i = 0; i < total_packages; i++)
+
//
unlink(packages[i]->path);
return 0;
}
return 0;
}