Merge CV, ver=5.1; ops/methods from HV, and interface from CV where possible
[goodguy/history.git] / cinelerra-5.1 / libzmpeg3 / mpeg3.C
diff --git a/cinelerra-5.1/libzmpeg3/mpeg3.C b/cinelerra-5.1/libzmpeg3/mpeg3.C
new file mode 100644 (file)
index 0000000..7fa89be
--- /dev/null
@@ -0,0 +1,728 @@
+#include "libzmpeg3.h"
+
+extern "C" int
+mpeg3_major()
+{
+  return zmpeg3_t::zmajor();
+}
+
+extern "C" int
+mpeg3_minor()
+{
+  return zmpeg3_t::zminor();
+}
+
+extern "C" int
+mpeg3_release()
+{
+  return zmpeg3_t::zrelease();
+}
+
+extern "C" int
+mpeg3_check_sig(char *path)
+{
+  return zmpeg3_t::check_sig(path);
+}
+
+extern "C" zmpeg3_t*
+mpeg3_open(const char *path, int *error_return)
+{
+  zmpeg3_t *src = new zmpeg3_t(path, *error_return);
+  if( *error_return ) { delete src;  src = 0; }
+  return src;
+}
+
+extern "C" zmpeg3_t*
+mpeg3_open_title(const char *title_path, const char *path, int *error_return)
+{
+  zmpeg3_t *src = new zmpeg3_t(path, *error_return, ZIO_UNBUFFERED, title_path);
+  if( *error_return ) { delete src;  src = 0; }
+  return src;
+}
+
+extern "C" zmpeg3_t*
+mpeg3_zopen(const char *title_path, const char *path, int *error_return, int access)
+{
+  zmpeg3_t *src = new zmpeg3_t(path, *error_return, access, title_path);
+  if( *error_return ) { delete src;  src = 0; }
+  return src;
+}
+
+extern "C" int
+mpeg3_close(zmpeg3_t *zsrc)
+{
+  delete zsrc;
+  return 0;
+}
+
+extern "C" zmpeg3_t*
+mpeg3_open_copy(const char *path, zmpeg3_t *old_src, int *error_return)
+{
+  return old_src;
+}
+
+extern "C" int
+mpeg3_set_pts_padding(zmpeg3_t *zsrc, int v)
+{
+  return zsrc->set_pts_padding(v);
+}
+
+extern "C" int
+mpeg3_set_cpus(zmpeg3_t *zsrc, int cpus)
+{
+  return zsrc->set_cpus(cpus);
+}
+
+extern "C" int
+mpeg3_has_audio(zmpeg3_t *zsrc)
+{
+  return zsrc->has_audio();
+}
+
+
+extern "C" int
+mpeg3_total_astreams(zmpeg3_t *zsrc)
+{
+  return zsrc->total_astreams();
+}
+
+
+extern "C" int
+mpeg3_audio_channels(zmpeg3_t *zsrc, int stream)
+{
+  return zsrc->audio_channels(stream);
+}
+
+
+extern "C" int
+mpeg3_sample_rate(zmpeg3_t *zsrc, int stream)
+{
+  return zsrc->sample_rate(stream);
+}
+
+
+extern "C" const char *
+mpeg3_audio_format(zmpeg3_t *zsrc, int stream)
+{
+  return zsrc->audio_format(stream);
+}
+
+extern "C" long
+mpeg3_get_audio_nudge(zmpeg3_t *zsrc, int stream)
+{
+  return zsrc->audio_nudge(stream);
+}
+
+extern "C" long
+mpeg3_audio_samples(zmpeg3_t *zsrc, int stream)
+{
+  return zsrc->audio_samples(stream);
+}
+
+extern "C" int
+mpeg3_set_sample(zmpeg3_t *zsrc, long sample, int stream)
+{
+  return zsrc->set_sample(sample, stream);
+}
+
+extern "C" long
+mpeg3_get_sample(zmpeg3_t *zsrc, int stream)
+{
+  return zsrc->get_sample(stream);
+}
+
+extern "C" int
+mpeg3_read_audio_d(zmpeg3_t *zsrc,double *output_d,
+  int channel, long samples, int stream)
+{
+  return zsrc->read_audio(output_d, channel, samples, stream);
+}
+
+extern "C" int
+mpeg3_read_audio_f(zmpeg3_t *zsrc,float *output_f,
+  int channel, long samples, int stream)
+{
+  return zsrc->read_audio(output_f, channel, samples, stream);
+}
+
+extern "C" int
+mpeg3_read_audio_i(zmpeg3_t *zsrc,int *output_i,
+  int channel, long samples, int stream)
+{
+  return zsrc->read_audio(output_i, channel, samples, stream);
+}
+
+extern "C" int
+mpeg3_read_audio_s(zmpeg3_t *zsrc,short *output_s,
+  int channel, long samples, int stream)
+{
+  return zsrc->read_audio(output_s, channel, samples, stream);
+}
+
+extern "C" int
+mpeg3_read_audio(zmpeg3_t *zsrc,float *output_f, short *output_i,
+  int channel, long samples, int stream)
+{
+  if( output_f != 0 )
+    return zsrc->read_audio(output_f, channel, samples, stream);
+  if( output_i != 0 )
+    return zsrc->read_audio(output_i, channel, samples, stream);
+  return 1;
+}
+
+extern "C" int
+mpeg3_reread_audio(zmpeg3_t *zsrc,float *output_f, short *output_i,
+  int channel, long samples, int stream)
+{
+  if( output_f != 0 )
+    return zsrc->reread_audio(output_f, channel, samples, stream);
+  if( output_i != 0 )
+    return zsrc->reread_audio(output_i, channel, samples, stream);
+  return 1;
+}
+
+extern "C" int
+mpeg3_reread_audio_d(zmpeg3_t *zsrc,double *output_d,
+  int channel, long samples, int stream)
+{
+  return zsrc->reread_audio(output_d, channel, samples, stream);
+}
+
+extern "C" int
+mpeg3_reread_audio_f(zmpeg3_t *zsrc,float *output_f,
+  int channel, long samples, int stream)
+{
+  return zsrc->reread_audio(output_f, channel, samples, stream);
+}
+
+extern "C" int
+mpeg3_reread_audio_i(zmpeg3_t *zsrc,int *output_i,
+  int channel, long samples, int stream)
+{
+  return zsrc->reread_audio(output_i, channel, samples, stream);
+}
+
+extern "C" int
+mpeg3_reread_audio_s(zmpeg3_t *zsrc,short *output_s,
+  int channel, long samples, int stream)
+{
+  return zsrc->reread_audio(output_s, channel, samples, stream);
+}
+
+extern "C" int
+mpeg3_read_audio_chunk(zmpeg3_t *zsrc,unsigned char *output,
+  long *size, long max_size, int stream)
+{
+  return zsrc->read_audio_chunk(output, size, max_size, stream);
+}
+
+extern "C" int
+mpeg3_has_video(zmpeg3_t *zsrc)
+{
+  return zsrc->has_video();
+}
+
+extern "C" int
+mpeg3_total_vstreams(zmpeg3_t *zsrc)
+{
+  return zsrc->total_vstreams();
+}
+
+extern "C" int
+mpeg3_video_width(zmpeg3_t *zsrc, int stream)
+{
+  return zsrc->video_width(stream);
+}
+
+extern "C" int
+mpeg3_video_height(zmpeg3_t *zsrc, int stream)
+{
+  return zsrc->video_height(stream);
+}
+
+extern "C" int
+mpeg3_coded_width(zmpeg3_t *zsrc, int stream)
+{
+  return zsrc->coded_width(stream);
+}
+
+extern "C" int
+mpeg3_coded_height(zmpeg3_t *zsrc, int stream)
+{
+  return zsrc->coded_height(stream);
+}
+
+extern "C" int
+mpeg3_video_pid(zmpeg3_t *zsrc, int stream)
+{
+  return zsrc->video_pid(stream);
+}
+
+extern "C" float
+mpeg3_aspect_ratio(zmpeg3_t *zsrc, int stream)
+{
+  return zsrc->aspect_ratio(stream);
+}
+
+extern "C" double
+mpeg3_frame_rate(zmpeg3_t *zsrc, int stream)
+{
+  return zsrc->frame_rate(stream);
+}
+
+extern "C" long
+mpeg3_video_frames(zmpeg3_t *zsrc, int stream)
+{
+  return zsrc->video_frames(stream);
+}
+
+
+extern "C" int
+mpeg3_set_frame(zmpeg3_t *zsrc, long frame, int stream)
+{
+  return zsrc->set_frame(frame, stream);
+}
+
+#if 0
+extern "C" int
+mpeg3_skip_frames(zmpeg3_t *zsrc)
+{
+  return zsrc->skip_frames();
+}
+#endif
+
+extern "C" long
+mpeg3_get_frame(zmpeg3_t *zsrc, int stream)
+{
+  return zsrc->get_frame(stream);
+}
+
+extern "C" int64_t
+mpeg3_get_bytes(zmpeg3_t *zsrc)
+{
+  return zsrc->get_bytes();
+}
+
+extern "C" int
+mpeg3_seek_byte(zmpeg3_t *zsrc, int64_t byte)
+{
+  return zsrc->seek_byte(byte);
+}
+
+
+extern "C" int64_t
+mpeg3_tell_byte(zmpeg3_t *zsrc)
+{
+  return zsrc->tell_byte();
+}
+
+extern "C" int
+mpeg3_previous_frame(zmpeg3_t *zsrc, int stream)
+{
+  return zsrc->previous_frame(stream);
+}
+
+
+extern "C" int
+mpeg3_end_of_audio(zmpeg3_t *zsrc, int stream)
+{
+  return zsrc->end_of_audio(stream);
+}
+
+
+extern "C" int
+mpeg3_end_of_video(zmpeg3_t *zsrc, int stream)
+{
+  return zsrc->end_of_video(stream);
+}
+
+extern "C" double
+mpeg3_get_time(zmpeg3_t *zsrc)
+{
+  return zsrc->get_time();
+}
+
+extern "C" double
+mpeg3_get_audio_time(zmpeg3_t* zsrc, int stream)
+{
+  return zsrc->get_audio_time(stream);
+}
+
+extern "C" double
+mpeg3_get_cell_time(zmpeg3_t *zsrc, int no, double *time)
+{
+  return zsrc->get_cell_time(no, *time);
+}
+
+extern "C" double
+mpeg3_get_video_time(zmpeg3_t* zsrc, int stream)
+{
+  return zsrc->get_video_time(stream);
+}
+
+extern "C" int
+mpeg3_read_frame(zmpeg3_t *zsrc, unsigned char **output_rows,
+    int in_x, int in_y, int in_w, int in_h, 
+    int out_w, int out_h, int color_model, int stream)
+{
+  return zsrc->read_frame(output_rows, in_x, in_y, in_w, in_h,
+    out_w, out_h, color_model, stream);
+}
+
+extern "C" int
+mpeg3_colormodel(zmpeg3_t *zsrc, int stream)
+{
+  return zsrc->colormodel(stream);
+}
+
+extern "C" int
+mpeg3_set_rowspan(zmpeg3_t *zsrc, int bytes, int stream)
+{
+  return zsrc->set_rowspan(bytes, stream);
+}
+
+extern "C" int
+mpeg3_read_yuvframe(zmpeg3_t *zsrc,
+    char *y_output, char *u_output, char *v_output,
+    int in_x, int in_y, int in_w, int in_h, int stream)
+{
+  return zsrc->read_yuvframe(y_output, u_output, v_output,
+    in_x, in_y, in_w, in_h, stream);
+}
+
+extern "C" int
+mpeg3_read_yuvframe_ptr(zmpeg3_t *zsrc,
+    char **y_output, char **u_output, char **v_output, int stream)
+{
+  return zsrc->read_yuvframe_ptr(y_output, u_output, v_output, stream);
+}
+
+extern "C" int
+mpeg3_drop_frames(zmpeg3_t *zsrc, long frames, int stream)
+{
+  return zsrc->drop_frames(frames, stream);
+}
+
+extern "C" int
+mpeg3_read_video_chunk(zmpeg3_t *zsrc, unsigned char *output, 
+    long *size, long max_size, int stream)
+{
+  return zsrc->read_video_chunk(output, size, max_size, stream);
+}
+
+extern "C" int
+mpeg3_get_total_vts_titles(zmpeg3_t *zsrc)
+{
+  return zsrc->get_total_vts_titles();
+}
+
+extern "C" int
+mpeg3_set_vts_title(zmpeg3_t *zsrc,int title)
+{
+  return zsrc->set_vts_title(title);
+}
+
+extern "C" int
+mpeg3_get_total_interleaves(zmpeg3_t *zsrc)
+{
+  return zsrc->get_total_interleaves();
+}
+
+extern "C" int
+mpeg3_set_interleave(zmpeg3_t *zsrc,int no)
+{
+  return zsrc->set_interleave(no);
+}
+
+extern "C" int
+mpeg3_set_angle(zmpeg3_t *zsrc,int a)
+{
+  return zsrc->set_angle(a);
+}
+
+extern "C" int
+mpeg3_set_program(zmpeg3_t *zsrc,int no)
+{
+  return zsrc->set_program(no);
+}
+
+extern "C" int64_t
+mpeg3_memory_usage(zmpeg3_t *zsrc)
+{
+  return zsrc->memory_usage();
+}
+
+extern "C" int
+mpeg3_get_thumbnail(zmpeg3_t *zsrc,
+  int trk, int64_t *frn, uint8_t **t, int *w, int *h)
+{
+  return zsrc->get_thumbnail(trk, *frn, *t, *w, *h);
+}
+
+extern "C" int
+mpeg3_set_thumbnail_callback(zmpeg3_t *zsrc, int trk,
+   int skim, int thumb, zthumbnail_cb fn, void *p)
+{
+  return zsrc->set_thumbnail_callback(trk, skim, thumb, fn, p);
+}
+
+extern "C" int
+mpeg3_set_cc_text_callback(zmpeg3_t *zsrc, int trk, zcc_text_cb fn)
+{
+  return zsrc->set_cc_text_callback(trk, fn);
+}
+
+extern "C" int
+mpeg3_subtitle_tracks(zmpeg3_t *zsrc)
+{
+  return zsrc->subtitle_tracks();
+}
+
+extern "C" int
+mpeg3_show_subtitle(zmpeg3_t *zsrc, int vtrk, int strk)
+{
+  return zsrc->show_subtitle(vtrk, strk);
+}
+
+extern "C" int
+mpeg3_display_subtitle(zmpeg3_t *zsrc, int stream, int sid, int id,
+   uint8_t *yp, uint8_t *up, uint8_t *vp, uint8_t *ap,
+   int x, int y, int w, int h, double start_msecs, double stop_msecs)
+{
+  return zsrc->display_subtitle(stream, sid, id, yp, up, vp, ap,
+                                x, y, w, h, start_msecs, stop_msecs);
+}
+
+extern "C" int
+mpeg3_delete_subtitle(zmpeg3_t *zsrc, int stream, int sid, int id)
+{
+  return zsrc->delete_subtitle(stream, sid, id);
+}
+
+extern "C" zmpeg3_t*
+mpeg3_start_toc(char *path, char *toc_path, int program, int64_t *total_bytes)
+{
+  return zmpeg3_t::start_toc(path, toc_path, program, total_bytes);
+}
+
+extern "C" void
+mpeg3_set_index_bytes(zmpeg3_t *zsrc, int64_t bytes)
+{
+  return zsrc->set_index_bytes(bytes);
+}
+
+extern "C" int
+mpeg3_do_toc(zmpeg3_t *zsrc, int64_t *bytes_processed)
+{
+  return zsrc->do_toc(bytes_processed);
+}
+
+extern "C" void
+mpeg3_stop_toc(zmpeg3_t *zsrc)
+{
+  return zsrc->stop_toc();
+}
+
+extern "C" int64_t
+mpeg3_get_source_date(zmpeg3_t *zsrc)
+{
+  return zsrc->get_source_date();
+}
+
+extern "C" int64_t
+mpeg3_calculate_source_date(char *path)
+{
+  return zmpeg3_t::calculate_source_date(path);
+}
+
+extern "C" int
+mpeg3_index_tracks(zmpeg3_t *zsrc)
+{
+  return zsrc->index_tracks();
+}
+
+extern "C" int
+mpeg3_index_channels(zmpeg3_t *zsrc, int track)
+{
+  return zsrc->index_channels(track);
+}
+
+extern "C" int
+mpeg3_index_zoom(zmpeg3_t *zsrc)
+{
+  return zsrc->index_zoom();
+}
+
+extern "C" int
+mpeg3_index_size(zmpeg3_t *zsrc, int track)
+{
+  return zsrc->index_size(track);
+}
+
+extern "C" float*
+mpeg3_index_data(zmpeg3_t *zsrc, int track, int channel)
+{
+  return zsrc->index_data(track, channel);
+}
+
+extern "C" int
+mpeg3_has_toc(zmpeg3_t *zsrc)
+{
+  return zsrc->has_toc();
+}
+
+extern "C" char *
+mpeg3_title_path(zmpeg3_t *zsrc, int number)
+{
+  return zsrc->title_path(number);
+}
+
+extern "C" int
+mpeg3_is_program_stream(zmpeg3_t * zsrc)
+{
+  return zsrc->is_program_stream() ? 1 : 0;
+}
+
+extern "C" int
+mpeg3_is_transport_stream(zmpeg3_t * zsrc)
+{
+  return zsrc->is_transport_stream() ? 1 : 0;
+}
+
+extern "C" int
+mpeg3_is_video_stream(zmpeg3_t * zsrc)
+{
+  return zsrc->is_video_stream() ? 1 : 0;
+}
+
+extern "C" int
+mpeg3_is_audio_stream(zmpeg3_t * zsrc)
+{
+  return zsrc->is_audio_stream() ? 1 : 0;
+}
+
+extern "C" int
+mpeg3_is_ifo_file(zmpeg3_t * zsrc)
+{
+  return zsrc->is_ifo_file() ? 1 : 0;
+}
+
+extern "C" int
+mpeg3_create_title(zmpeg3_t * zsrc, int full_scan)
+{
+  return zsrc->demuxer->create_title(full_scan);
+}
+
+extern "C" int
+mpeg3audio_dolayer3(mpeg3_layer_t *zaudio,
+   char *frame, int frame_size, float **output, int render)
+{
+  zaudio_decoder_layer_t *audio = (zaudio_decoder_layer_t *)zaudio;
+  return audio->do_layer3((uint8_t*)frame, frame_size, output, render);
+}
+
+extern "C" void
+mpeg3_layer_reset(mpeg3_layer_t *zlayer_data)
+{
+  zaudio_decoder_layer_t *layer_data = (zaudio_decoder_layer_t *)zlayer_data;
+  layer_data->layer_reset();
+}
+
+extern "C" int
+mpeg3_layer_header(mpeg3_layer_t *zlayer_data, unsigned char *data)
+{
+  zaudio_decoder_layer_t *layer_data = (zaudio_decoder_layer_t *)zlayer_data;
+  return layer_data->layer3_header(data);
+}
+
+extern "C" mpeg3_layer_t*
+mpeg3_new_layer()
+{
+  return (mpeg3_layer_t*) new zaudio_decoder_layer_t();
+}
+
+extern "C" void
+mpeg3_delete_layer(mpeg3_layer_t *zaudio)
+{
+  zaudio_decoder_layer_t *audio = (zaudio_decoder_layer_t *)zaudio;
+  delete audio;
+}
+
+extern "C" void
+mpeg3_skip_video_frame(mpeg3_t *zsrc,int stream)
+{
+  zsrc->vtrack[stream]->demuxer->skip_video_frame();
+}
+
+extern "C" int64_t
+mpeg3_video_tell_byte(mpeg3_t *zsrc, int stream)
+{
+  return zsrc->vtrack[stream]->demuxer->tell_byte();
+}
+
+extern "C" int64_t
+mpeg3_audio_tell_byte(mpeg3_t *zsrc, int stream)
+{
+  return zsrc->atrack[stream]->demuxer->tell_byte();
+}
+
+#ifdef ZDVB
+
+extern "C" int
+mpeg3_dvb_channel_count(zmpeg3_t *zsrc)
+{
+  if( !zsrc->dvb.mgt )
+       zsrc->demuxer->create_title();
+  return zsrc->dvb.channel_count();
+}
+
+extern "C" int
+mpeg3_dvb_get_channel(zmpeg3_t *zsrc,int n, int *major, int *minor)
+{
+  return zsrc->dvb.get_channel(n, *major, *minor);
+}
+
+extern "C" int
+mpeg3_dvb_get_station_id(zmpeg3_t *zsrc,int n, char *name)
+{
+  return zsrc->dvb.get_station_id(n, name);
+}
+
+extern "C" int
+mpeg3_dvb_total_astreams(zmpeg3_t *zsrc,int n, int *count)
+{
+  return zsrc->dvb.total_astreams(n, *count);
+}
+
+extern "C" int
+mpeg3_dvb_astream_number(zmpeg3_t *zsrc,int n, int ord, int *stream, char *enc)
+{
+  return zsrc->dvb.astream_number(n, ord, *stream, enc);
+}
+
+extern "C" int
+mpeg3_dvb_total_vstreams(zmpeg3_t *zsrc,int n, int *count)
+{
+  return zsrc->dvb.total_vstreams(n, *count);
+}
+
+extern "C" int
+mpeg3_dvb_vstream_number(zmpeg3_t *zsrc,int n, int ord, int *stream)
+{
+  return zsrc->dvb.vstream_number(n, ord, *stream);
+}
+
+extern "C" int
+mpeg3_dvb_get_chan_info(mpeg3_t *zsrc,int n, int ord, int i, char *cp, int len)
+{
+  return zsrc->dvb.get_chan_info(n, ord, i, cp, len);
+}
+
+int mpeg3_dvb_get_system_time(mpeg3_t *zsrc, int64_t *tm)
+{
+  return (*tm=zsrc->dvb.get_system_time()) >= 0 ? 0 : 1;
+}
+
+#endif
+