MCPcopy Create free account
hub / github.com/ClassicOldSong/Apollo / alloc

Function alloc

src/stream.cpp:2148–2224  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2146 }
2147
2148 std::shared_ptr<session_t> alloc(config_t &config, rtsp_stream::launch_session_t &launch_session) {
2149 auto session = std::make_shared<session_t>();
2150
2151 auto mail = std::make_shared<safe::mail_raw_t>();
2152
2153 session->shutdown_event = mail->event<bool>(mail::shutdown);
2154 session->launch_session_id = launch_session.id;
2155 session->device_name = launch_session.device_name;
2156 session->device_uuid = launch_session.unique_id;
2157 session->permission = launch_session.perm;
2158
2159 session->do_cmds = std::move(launch_session.client_do_cmds);
2160 session->undo_cmds = std::move(launch_session.client_undo_cmds);
2161
2162 session->config = config;
2163
2164 session->control.connect_data = launch_session.control_connect_data;
2165 session->control.feedback_queue = mail->queue<platf::gamepad_feedback_msg_t>(mail::gamepad_feedback);
2166 session->control.hdr_queue = mail->event<video::hdr_info_t>(mail::hdr);
2167 session->control.legacy_input_enc_iv = launch_session.iv;
2168 session->control.cipher = crypto::cipher::gcm_t {
2169 launch_session.gcm_key,
2170 false
2171 };
2172
2173 session->video.idr_events = mail->event<bool>(mail::idr);
2174 session->video.invalidate_ref_frames_events = mail->event<std::pair<int64_t, int64_t>>(mail::invalidate_ref_frames);
2175 session->video.lowseq = 0;
2176 session->video.ping_payload = launch_session.av_ping_payload;
2177 if (config.encryptionFlagsEnabled & SS_ENC_VIDEO) {
2178 BOOST_LOG(info) << "Video encryption enabled"sv;
2179 session->video.cipher = crypto::cipher::gcm_t {
2180 launch_session.gcm_key,
2181 false
2182 };
2183 session->video.gcm_iv_counter = 0;
2184 }
2185
2186 constexpr auto max_block_size = crypto::cipher::round_to_pkcs7_padded(2048);
2187
2188 util::buffer_t<char> shards {RTPA_TOTAL_SHARDS * max_block_size};
2189 util::buffer_t<uint8_t *> shards_p {RTPA_TOTAL_SHARDS};
2190
2191 for (auto x = 0; x < RTPA_TOTAL_SHARDS; ++x) {
2192 shards_p[x] = (uint8_t *) &shards[x * max_block_size];
2193 }
2194
2195 // Audio FEC spans multiple audio packets,
2196 // therefore its session specific
2197 session->audio.shards = std::move(shards);
2198 session->audio.shards_p = std::move(shards_p);
2199
2200 session->audio.fec_packet.rtp.header = 0x80;
2201 session->audio.fec_packet.rtp.packetType = 127;
2202 session->audio.fec_packet.rtp.timestamp = 0;
2203 session->audio.fec_packet.rtp.ssrc = 0;
2204
2205 session->audio.fec_packet.fecHeader.payloadType = 97;

Callers 1

startFunction · 0.70

Calls 4

moveFunction · 0.85
bigFunction · 0.85
round_to_pkcs7_paddedFunction · 0.70
dataMethod · 0.45

Tested by

no test coverage detected