int Stitch()

in vireo/android/android.cpp [79:122]


int Stitch(int* in_fds, int count, int out_fd) {
  __try {
    if (!in_fds || !out_fd || count <= 0) {
      return 4;
    }
    for (int i = 0; i < count; ++i) {
      if (!in_fds[i]) {
        return 5;
      }
    }
    internal::demux::MP4 mp4_decoder_0(in_fds[0]);
    if (!mp4_decoder_0.video_track.count() && !mp4_decoder_0.audio_track.count()) {
      return ERR_NO_AUDIO_OR_VIDEO;
    }
    vector<function<common::Data32(void)>> movie_data;
    for (int i = 0; i < count; ++i) {
      internal::demux::MP4 mp4_decoder(in_fds[i]);
      if (!mp4_decoder.video_track.count() && !mp4_decoder.audio_track.count()) {
        return ERR_NO_AUDIO_OR_VIDEO;
      }
      if (mp4_decoder_0.audio_track.settings().sample_rate != mp4_decoder.audio_track.settings().sample_rate
          || mp4_decoder_0.audio_track.settings().timescale != mp4_decoder.audio_track.settings().timescale) {
        return ERR_SETTING_MISMATCH;
      }
      if (mp4_decoder_0.video_track.settings().width != mp4_decoder.video_track.settings().width
          || mp4_decoder_0.video_track.settings().height != mp4_decoder.video_track.settings().height
          || mp4_decoder_0.video_track.settings().timescale != mp4_decoder.video_track.settings().timescale
          || mp4_decoder_0.video_track.settings().sps_pps.pps != mp4_decoder.video_track.settings().sps_pps.pps
          || mp4_decoder_0.video_track.settings().sps_pps.sps != mp4_decoder.video_track.settings().sps_pps.sps) {
        return ERR_SETTING_MISMATCH;
      }
      movie_data.push_back([in_fds, i]() {
        return common::Data32(in_fds[i], nullptr);
      });
    }

    mux::MP4 mp4_encoder(android::stitch(movie_data));

    out_fd << mp4_encoder();
  } __catch (std::exception& e) {
    return ERR_EXCEPTION;
  }
  return 0;
}