1 /*
2 mkvmerge -- utility for splicing together matroska files
3 from component media subtypes
4
5 Distributed under the GPL v2
6 see the file COPYING for details
7 or visit https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
8
9 PASSTHROUGH output module
10
11 Written by Moritz Bunkus <moritz@bunkus.org>.
12 */
13
14 #include "common/common_pch.h"
15
16 #include "merge/connection_checks.h"
17 #include "output/p_passthrough.h"
18
19 using namespace libmatroska;
20
passthrough_packetizer_c(generic_reader_c * p_reader,track_info_c & p_ti)21 passthrough_packetizer_c::passthrough_packetizer_c(generic_reader_c *p_reader,
22 track_info_c &p_ti)
23 : generic_packetizer_c(p_reader, p_ti)
24 {
25 m_timestamp_factory_application_mode = TFA_FULL_QUEUEING;
26 }
27
28 void
set_headers()29 passthrough_packetizer_c::set_headers() {
30 generic_packetizer_c::set_headers();
31 }
32
33 void
process_impl(packet_cptr const & packet)34 passthrough_packetizer_c::process_impl(packet_cptr const &packet) {
35 add_packet(packet);
36 }
37
38 connection_result_e
can_connect_to(generic_packetizer_c * src,std::string & error_message)39 passthrough_packetizer_c::can_connect_to(generic_packetizer_c *src,
40 std::string &error_message) {
41 passthrough_packetizer_c *psrc = dynamic_cast<passthrough_packetizer_c *>(src);
42 if (!psrc)
43 return CAN_CONNECT_NO_FORMAT;
44
45 connect_check_codec_id(m_hcodec_id, psrc->m_hcodec_id);
46
47 if ((m_htrack_type != psrc->m_htrack_type) || (m_hcodec_id != psrc->m_hcodec_id))
48 return CAN_CONNECT_NO_PARAMETERS;
49
50 connect_check_codec_private(src);
51
52 switch (m_htrack_type) {
53 case track_video:
54 connect_check_v_width(m_hvideo_pixel_width, psrc->m_hvideo_pixel_width);
55 connect_check_v_height(m_hvideo_pixel_height, psrc->m_hvideo_pixel_height);
56 connect_check_v_dwidth(m_hvideo_display_width, psrc->m_hvideo_display_width);
57 connect_check_v_dheight(m_hvideo_display_height, psrc->m_hvideo_display_height);
58 if (m_htrack_default_duration != psrc->m_htrack_default_duration)
59 return CAN_CONNECT_NO_PARAMETERS;
60 break;
61
62 case track_audio:
63 connect_check_a_samplerate(m_haudio_sampling_freq, psrc->m_haudio_sampling_freq);
64 connect_check_a_channels(m_haudio_channels, psrc->m_haudio_channels);
65 connect_check_a_bitdepth(m_haudio_bit_depth, psrc->m_haudio_bit_depth);
66 if (m_htrack_default_duration != psrc->m_htrack_default_duration)
67 return CAN_CONNECT_NO_PARAMETERS;
68 break;
69
70 case track_subtitle:
71 break;
72
73 default:
74 break;
75 }
76
77 return CAN_CONNECT_YES;
78 }
79