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