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;
}