X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.0%2Fcinelerra%2Ffilempeg.C;h=e14b657ed92a3d1d38b97039362298eb600ac84c;hb=a9f2ea113da20b8cfbe4f394d69dc1e8315ddddd;hp=033f38c1f0469d5492044b7f92100c0343b94a52;hpb=94e8dc2b306135e7735b2618a54f0f7de7ac7a0c;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.0/cinelerra/filempeg.C b/cinelerra-5.0/cinelerra/filempeg.C index 033f38c1..e14b657e 100644 --- a/cinelerra-5.0/cinelerra/filempeg.C +++ b/cinelerra-5.0/cinelerra/filempeg.C @@ -50,8 +50,8 @@ #include -#define HVPEG_EXE "/hveg2enc.plugin" -#define MJPEG_EXE "/mpeg2enc.plugin" +#define HVPEG_EXE "/hveg2enc" +#define MJPEG_EXE "/mpeg2enc" // M JPEG dependancies @@ -134,7 +134,7 @@ int FileMPEG::check_sig(Asset *asset) return mpeg3_check_sig(asset->path); } -void FileMPEG::get_info(char *title_path, char *path, char *text) +void FileMPEG::get_info(char *title_path, char *path, char *text, int len) { mpeg3_t *fd; *text = 0; @@ -145,32 +145,32 @@ void FileMPEG::get_info(char *title_path, char *path, char *text) if( !result ) result = mpeg3_create_title(fd, 0); if( result ) return; - char *cp = text; + char *cp = text, *ep = text + len-1; if( mpeg3_has_toc(fd) ) { - cp += sprintf(cp, _("toc path:%s\n"), path); - cp += sprintf(cp, _("title path:\n")); + cp += snprintf(cp,ep-cp, _("toc path:%s\n"), path); + cp += snprintf(cp,ep-cp, _("title path:\n")); for( int i=0; i<100; ++i ) { char *title_path = mpeg3_title_path(fd,i); if( !title_path ) break; - cp += sprintf(cp, " %2d. %s\n", i+1, title_path); + cp += snprintf(cp,ep-cp, " %2d. %s\n", i+1, title_path); } } else - cp += sprintf(cp, _("file path:%s\n"), path); + cp += snprintf(cp,ep-cp, _("file path:%s\n"), path); int64_t bytes = mpeg3_get_bytes(fd); char string[BCTEXTLEN]; sprintf(string,"%ld",bytes); Units::punctuate(string); - cp += sprintf(cp, _("size: %s"), string); + cp += snprintf(cp,ep-cp, _("size: %s"), string); if( mpeg3_is_program_stream(fd) ) - cp += sprintf(cp, _(" program stream\n")); + cp += snprintf(cp,ep-cp, _(" program stream\n")); else if( mpeg3_is_transport_stream(fd) ) - cp += sprintf(cp, _(" transport stream\n")); + cp += snprintf(cp,ep-cp, _(" transport stream\n")); else if( mpeg3_is_video_stream(fd) ) - cp += sprintf(cp, _(" video stream\n")); + cp += snprintf(cp,ep-cp, _(" video stream\n")); else if( mpeg3_is_audio_stream(fd) ) - cp += sprintf(cp, _(" audio stream\n")); + cp += snprintf(cp,ep-cp, _(" audio stream\n")); int64_t sdate = mpeg3_get_source_date(fd); if( !sdate ) { @@ -179,60 +179,60 @@ void FileMPEG::get_info(char *title_path, char *path, char *text) sdate = stat64(path, &ostat) < 0 ? 0 : ostat.st_mtime; } time_t tm = (time_t)sdate; - cp += sprintf(cp, _("date: %s\n"), ctime(&tm)); + cp += snprintf(cp,ep-cp, _("date: %s\n"), ctime(&tm)); int vtrks = mpeg3_total_vstreams(fd); - cp += sprintf(cp, _("%d video tracks\n"), vtrks); + cp += snprintf(cp,ep-cp, _("%d video tracks\n"), vtrks); for( int vtrk=0; vtrk 0 ) { double secs = (double)frames / frame_rate; - cp += sprintf(cp, _(" (%0.3f secs)"),secs); + cp += snprintf(cp,ep-cp, _(" (%0.3f secs)"),secs); } *cp++ = '\n'; } int atrks = mpeg3_total_astreams(fd); - cp += sprintf(cp, _("%d audio tracks\n"), atrks); + cp += snprintf(cp,ep-cp, _("%d audio tracks\n"), atrks); for( int atrk=0; atrk= 0 ? '+' : (nudge=-nudge, '-'); - cp += sprintf(cp, _("%ld samples"),nudge); + cp += snprintf(cp,ep-cp, _("%ld samples"),nudge); if( sample_rate > 0 ) { double secs = (double)(samples+nudge) / sample_rate; - cp += sprintf(cp, _(" (%0.3f secs)"),secs); + cp += snprintf(cp,ep-cp, _(" (%0.3f secs)"),secs); } *cp++ = '\n'; } int stracks = mpeg3_subtitle_tracks(fd); if( stracks > 0 ) { - cp += sprintf(cp, _("%d subtitles\n"), stracks); + cp += snprintf(cp,ep-cp, _("%d subtitles\n"), stracks); } int vts_titles = mpeg3_get_total_vts_titles(fd); if( vts_titles > 0 ) - cp += sprintf(cp, _("%d title sets, "), vts_titles); + cp += snprintf(cp,ep-cp, _("%d title sets, "), vts_titles); int interleaves = mpeg3_get_total_interleaves(fd); if( interleaves > 0 ) - cp += sprintf(cp, _("%d interleaves\n"), interleaves); + cp += snprintf(cp,ep-cp, _("%d interleaves\n"), interleaves); int vts_title = mpeg3_set_vts_title(fd, -1); int angle = mpeg3_set_angle(fd, -1); int interleave = mpeg3_set_interleave(fd, -1); int program = mpeg3_set_program(fd, -1); - cp += sprintf(cp, _("current program %d = title %d, angle %d, interleave %d\n\n"), + cp += snprintf(cp,ep-cp, _("current program %d = title %d, angle %d, interleave %d\n\n"), program, vts_title, angle, interleave); ArrayList cell_times; @@ -241,21 +241,21 @@ void FileMPEG::get_info(char *title_path, char *path, char *text) cell_times.append(cell_time); } if( cell_times.size() > 1 ) { - cp += sprintf(cp, _("cell times:")); + cp += snprintf(cp,ep-cp, _("cell times:")); for( int i=0; i= 0; ++i ) { @@ -306,6 +306,7 @@ void FileMPEG::get_info(char *title_path, char *path, char *text) } } + *cp = 0; mpeg3_close(fd); return; } @@ -483,10 +484,9 @@ int FileMPEG::open_file(int rd, int wr) // Construct command line if(!result) { - char string[BCTEXTLEN]; string[0] = 0; - sprintf(mjpeg_command, "%s%s", - file->preferences->plugin_dir, HVPEG_EXE); - append_vcommand_line(string); + char string[BCTEXTLEN]; + get_exe_path(string); + sprintf(mjpeg_command, "%s/%s", string, HVPEG_EXE); if(asset->aspect_ratio > 0) { @@ -534,8 +534,9 @@ int FileMPEG::open_file(int rd, int wr) // mjpegtools encoder // this one is cinelerra-x.x.x/thirdparty/mjpegtools/mpeg2enc { - sprintf(mjpeg_command, "%s%s -v 0 ", - file->preferences->plugin_dir, MJPEG_EXE); + char string[BCTEXTLEN]; + get_exe_path(string); + sprintf(mjpeg_command, "%s/%s -v 0 ", string, MJPEG_EXE); // Must disable interlacing if MPEG-1 switch (asset->vmpeg_preset) @@ -549,7 +550,6 @@ int FileMPEG::open_file(int rd, int wr) // The current usage of mpeg2enc requires bitrate of 0 when quantization is fixed and // quantization of 1 when bitrate is fixed. Perfectly intuitive. - char string[BCTEXTLEN]; if(asset->vmpeg_fix_bitrate) { sprintf(string, " -b %d -q 1", asset->vmpeg_bitrate / 1000); @@ -1026,56 +1026,23 @@ int FileMPEG::get_index(char *index_path) // Convert the index tables from tracks to channels. - if(mpeg3_index_tracks(fd)) - { -// Calculate size of buffer needed for all channels - int buffer_size = 0; - for(int i = 0; i < mpeg3_index_tracks(fd); i++) - { - buffer_size += mpeg3_index_size(fd, i) * - mpeg3_index_channels(fd, i) * - 2; - } - + if(mpeg3_index_tracks(fd)) { IndexState *index_state = asset->index_state; - index_state->index_buffer = new float[buffer_size]; - - int index_channels = 0; - for(int i = 0; i < mpeg3_index_tracks(fd); i++) - index_channels += mpeg3_index_channels(fd, i); -// Size of index buffer in floats - int current_offset = 0; -// Current asset channel - int current_channel = 0; - index_state->channels = index_channels; - index_state->index_zoom = mpeg3_index_zoom(fd); - index_state->index_offsets = new int64_t[index_channels]; - index_state->index_sizes = new int64_t[index_channels]; - for(int i = 0; i < mpeg3_index_tracks(fd); i++) - { - for(int j = 0; j < mpeg3_index_channels(fd, i); j++) - { - index_state->index_offsets[current_channel] = current_offset; - index_state->index_sizes[current_channel] = mpeg3_index_size(fd, i) * 2; - memcpy(index_state->index_buffer + current_offset, - mpeg3_index_data(fd, i, j), - mpeg3_index_size(fd, i) * sizeof(float) * 2); - - current_offset += mpeg3_index_size(fd, i) * 2; - current_channel++; + int index_zoom = mpeg3_index_zoom(fd); + int ntracks = mpeg3_index_tracks(fd); + int64_t offset = 0; + for(int i = 0; i < ntracks; i++) { + int nch = mpeg3_index_channels(fd, i); + for(int j = 0; j < nch; j++) { + float *bfr = (float *)mpeg3_index_data(fd, i, j); + int64_t size = 2*mpeg3_index_size(fd, i); + index_state->add_index_entry(bfr, offset, size); + offset += size; } } - FileSystem fs; - index_state->index_bytes = fs.get_size(asset->path); - - index_state->write_index(index_path, - buffer_size * sizeof(float), - asset, - asset->audio_length); - delete [] index_state->index_buffer; - - return 0; + int64_t file_bytes = fs.get_size(asset->path); + return index_state->write_index(index_path, asset, index_zoom, file_bytes); } return 1; @@ -1189,7 +1156,6 @@ int FileMPEG::select_video_stream(Asset *asset, int vstream) int FileMPEG::select_audio_stream(Asset *asset, int astream) { if( !fd ) return -1; - asset->channels = mpeg3_audio_channels(fd, astream); asset->sample_rate = mpeg3_sample_rate(fd, astream); asset->audio_length = mpeg3_audio_samples(fd, astream); return 0; @@ -1681,17 +1647,6 @@ int FileMPEG::read_samples(double *buffer, int64_t len) return 0; } -const char* FileMPEG::strtocompression(char *string) -{ - return ""; -} - -const char* FileMPEG::compressiontostr(char *string) -{ - return ""; -} - -