diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 199c756..b2ee55b 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -13,8 +13,8 @@ android { applicationId = "com.tsmobile.app" minSdk = 26 targetSdk = 35 - versionCode = 1 - versionName = "1.0.0" + versionCode = 4 + versionName = "1.0.4" } signingConfigs { diff --git a/android/app/src/main/java/com/tsmobile/app/NetworkMonitor.kt b/android/app/src/main/java/com/tsmobile/app/NetworkMonitor.kt new file mode 100644 index 0000000..b3b4f75 --- /dev/null +++ b/android/app/src/main/java/com/tsmobile/app/NetworkMonitor.kt @@ -0,0 +1,149 @@ +package com.tsmobile.app + +import android.content.Context +import android.net.ConnectivityManager +import android.net.Network +import android.net.NetworkCapabilities +import android.util.Log +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow + +/** + * 网络状态监控器 — 检测网络连接变化。 + * + * 通过 ConnectivityManager.registerDefaultNetworkCallback() 监听网络可用性, + * 提供 StateFlow 供 ViewModel 层订阅。核心目的是在网络切换(WiFi ↔ 移动数据) + * 时区分"网络丢失导致的断线"与"服务器主动断线",从而触发不同的重连策略。 + * + * 用法: + * - start() / stop() 控制生命周期(在 ViewModel init/onCleared 中调用) + * - isAvailable 实时反映当前网络状态 + * - consumeNetworkLossDisconnect() 在 onDisconnected 回调中调用,判断是否应自动重连 + * - reset() 在手动断开/放弃重连时清除追踪状态 + */ +class NetworkMonitor(context: Context) { + + companion object { + private const val TAG = "NetworkMonitor" + /** 网络丢失后多长时间内触发的 onDisconnected 视为网络原因 */ + private const val RECENT_LOSS_WINDOW_MS = 60_000L + } + + private val connectivityManager = + context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager + + /** 当前网络是否可用 */ + private val _isAvailable = MutableStateFlow(true) // 乐观假设:初始时网络可用 + val isAvailable: StateFlow = _isAvailable.asStateFlow() + + /** 网络变化计数器:任何网络回调触发时自增(用于检测 isAvailable 不变但底层网络已切换的场景) */ + private val _networkChangeCount = MutableStateFlow(0L) + val networkChangeCount: StateFlow = _networkChangeCount.asStateFlow() + + /** 最近是否检测到网络丢失(60 秒窗口内) */ + private val _wasNetworkLostRecently = MutableStateFlow(false) + val wasNetworkLostRecently: StateFlow = _wasNetworkLostRecently.asStateFlow() + + /** 最近一次网络丢失的时间戳(epoch ms),0 表示未丢失过 */ + @Volatile + private var lastLossTimestamp: Long = 0L + + /** 待处理的失连标记:网络丢失后等待 Go 侧 onDisconnected 确认 */ + @Volatile + private var pendingDisconnectFromLoss: Boolean = false + + private val networkCallback = object : ConnectivityManager.NetworkCallback() { + override fun onAvailable(network: Network) { + Log.i(TAG, "Network available") + _isAvailable.value = true + _networkChangeCount.value += 1 + } + + override fun onLost(network: Network) { + Log.w(TAG, "Network lost") + _isAvailable.value = false + _wasNetworkLostRecently.value = true + lastLossTimestamp = System.currentTimeMillis() + pendingDisconnectFromLoss = true + _networkChangeCount.value += 1 + } + + override fun onCapabilitiesChanged( + network: Network, + capabilities: NetworkCapabilities, + ) { + val hasInternet = capabilities.hasCapability( + NetworkCapabilities.NET_CAPABILITY_INTERNET + ) + val wasAvailable = _isAvailable.value + _isAvailable.value = hasInternet + + if (!hasInternet && wasAvailable) { + // 网络能力降级(例如切换中暂时无 Internet) + Log.d(TAG, "Network capabilities degraded: hasInternet=false") + lastLossTimestamp = System.currentTimeMillis() + pendingDisconnectFromLoss = true + } + if (hasInternet && !wasAvailable) { + Log.d(TAG, "Network capabilities restored: hasInternet=true") + } + _networkChangeCount.value += 1 + } + } + + /** 开始监听网络变化 */ + fun start() { + try { + connectivityManager.registerDefaultNetworkCallback(networkCallback) + Log.i(TAG, "Network monitoring started") + } catch (e: Exception) { + Log.e(TAG, "Failed to register network callback", e) + } + } + + /** 停止监听网络变化 */ + fun stop() { + try { + connectivityManager.unregisterNetworkCallback(networkCallback) + Log.i(TAG, "Network monitoring stopped") + } catch (e: Exception) { + Log.e(TAG, "Failed to unregister network callback", e) + } + } + + /** + * 在 onDisconnected 回调中调用,判断本次断线是否由网络丢失引起。 + * + * 如果是网络丢失导致的断线,返回 true(应触发自动重连); + * 如果是服务器主动断线(如被踢、服务器关闭),返回 false。 + * + * 此方法具有消耗性:调用后内部标志位被重置,重复调用返回 false。 + */ + fun consumeNetworkLossDisconnect(): Boolean { + val wasRecent = _wasNetworkLostRecently.value || + (lastLossTimestamp > 0 && + System.currentTimeMillis() - lastLossTimestamp < RECENT_LOSS_WINDOW_MS) + if (wasRecent && pendingDisconnectFromLoss) { + pendingDisconnectFromLoss = false + _wasNetworkLostRecently.value = false + Log.i(TAG, "Consumed network-loss disconnect flag: wasRecent=$wasRecent") + return true + } + Log.d(TAG, "consumeNetworkLossDisconnect: wasRecent=$wasRecent, pending=$pendingDisconnectFromLoss → false") + return false + } + + /** + * 重置所有追踪状态。在以下场景调用: + * - 用户主动断开连接 + * - 放弃重连 + * - 返回主页 + */ + fun reset() { + pendingDisconnectFromLoss = false + _wasNetworkLostRecently.value = false + lastLossTimestamp = 0L + Log.d(TAG, "Network loss tracking state reset") + } +} diff --git a/android/app/src/main/java/com/tsmobile/app/data/Models.kt b/android/app/src/main/java/com/tsmobile/app/data/Models.kt index cb19a50..1563e4f 100644 --- a/android/app/src/main/java/com/tsmobile/app/data/Models.kt +++ b/android/app/src/main/java/com/tsmobile/app/data/Models.kt @@ -171,6 +171,11 @@ sealed class ConnectionState { val reason: String = "" ) : ConnectionState() + /** 等待网络恢复 — 网络丢失后等待连接恢复 */ + data class WaitingForNetwork( + val since: Long = System.currentTimeMillis() + ) : ConnectionState() + /** 已断开 — 会话结束 */ data class Disconnected( val reason: String = "", diff --git a/android/app/src/main/java/com/tsmobile/app/data/Repository.kt b/android/app/src/main/java/com/tsmobile/app/data/Repository.kt index 931c5f6..4966b16 100644 --- a/android/app/src/main/java/com/tsmobile/app/data/Repository.kt +++ b/android/app/src/main/java/com/tsmobile/app/data/Repository.kt @@ -59,16 +59,19 @@ object Repository { // 并发执行 channellist/clientlist/clientinfo 会导致数据行错配,频道列表为空。 val channels = fetchChannels() val clients = fetchClients() - val selfId = TSBridge.getClientID().toInt() - var channelId = TSBridge.getChannelID() - // 备用方案:如果 GetChannelID() 返回 "0"(GetClientInfo 可能失败), - // 从客户端列表中获取自身所在的频道 ID - if (channelId == "0" && selfId > 0) { - val selfChannel = clients.find { it.id == selfId }?.channelId - if (selfChannel != null && selfChannel != "0") { - android.util.Log.i("Repository", "performInitialSync: getChannelID returned 0, using client list fallback: $selfChannel") - channelId = selfChannel + val (selfId, channelId) = withContext(Dispatchers.IO) { + val id = TSBridge.getClientID().toInt() + var cid = TSBridge.getChannelID() + // 备用方案:如果 GetChannelID() 返回 "0"(GetClientInfo 可能失败), + // 从客户端列表中获取自身所在的频道 ID + if (cid == "0" && id > 0) { + val selfChannel = clients.find { it.id == id }?.channelId + if (selfChannel != null && selfChannel != "0") { + android.util.Log.i("Repository", "performInitialSync: getChannelID returned 0, using client list fallback: $selfChannel") + cid = selfChannel + } } + id to cid } android.util.Log.i("Repository", "performInitialSync: fetched ${channels.size} channels, ${clients.size} clients, selfId=$selfId, channelId=$channelId") @@ -139,11 +142,7 @@ object Repository { android.util.Log.w("Repository", "refreshClientList: empty result, skipping update") return } - _clients.value = clients - clientMap = clients.associateBy { it.id } - clientUidMap = clients.associateBy { it.uid } - _channelClients.value = clients.groupBy { it.channelId } - android.util.Log.d("Repository", "refreshClientList: ${clients.size} clients updated") + applyClients(clients, _selfClientId.value) } /** @@ -161,6 +160,29 @@ object Repository { _channels.value = channels } + /** + * 应用客户端列表并过滤僵尸会话。 + * + * 重连时旧连接可能尚未超时(僵尸会话),服务器会对同 UID 的新连接自动改名(如 "name" → "name_1")。 + * 此处按 UID 过滤:保留当前 selfClientId,移除同 UID 但不同 clid 的僵尸条目。 + */ + private fun applyClients(clients: List, selfId: Int) { + val selfUid = clients.find { it.id == selfId }?.uid + val filtered = if (selfUid != null) { + clients.filter { it.id == selfId || it.uid != selfUid } + } else { + clients + } + if (filtered.size < clients.size) { + android.util.Log.i("Repository", "Filtered ${clients.size - filtered.size} zombie session(s) from client list") + } + _clients.value = filtered + clientMap = filtered.associateBy { it.id } + clientUidMap = filtered.associateBy { it.uid } + _channelClients.value = filtered.groupBy { it.channelId } + android.util.Log.d("Repository", "applyClients: ${filtered.size} clients (${clients.size} before filtering)") + } + /** * 更新基线数据。 */ @@ -171,14 +193,10 @@ object Repository { currentChannelId: String, ) { _channels.value = channels - _clients.value = clients - clientMap = clients.associateBy { it.id } - clientUidMap = clients.associateBy { it.uid } _selfClientId.value = selfClientId _currentChannelId.value = currentChannelId - // 建立频道-成员索引 - _channelClients.value = clients.groupBy { it.channelId } + applyClients(clients, selfClientId) } /** 查询成员是否存在 */ diff --git a/android/app/src/main/java/com/tsmobile/app/ui/components/ConnectionStatusIndicator.kt b/android/app/src/main/java/com/tsmobile/app/ui/components/ConnectionStatusIndicator.kt index eca9d6e..c62397b 100644 --- a/android/app/src/main/java/com/tsmobile/app/ui/components/ConnectionStatusIndicator.kt +++ b/android/app/src/main/java/com/tsmobile/app/ui/components/ConnectionStatusIndicator.kt @@ -29,6 +29,7 @@ fun ConnectionStatusIndicator( val (color, text) = when (connectionState) { is ConnectionState.Connected -> semanticColors.success to "已连接" is ConnectionState.Disconnecting -> semanticColors.warning to "断开中" + is ConnectionState.WaitingForNetwork -> semanticColors.warning to "等待网络" is ConnectionState.Reconnecting -> semanticColors.warning to "重连中" is ConnectionState.Disconnected -> colors.error to "已断开" null -> colors.outline to "未连接" diff --git a/android/app/src/main/java/com/tsmobile/app/ui/components/ReconnectBanner.kt b/android/app/src/main/java/com/tsmobile/app/ui/components/ReconnectBanner.kt index baaf5d3..7a8cc33 100644 --- a/android/app/src/main/java/com/tsmobile/app/ui/components/ReconnectBanner.kt +++ b/android/app/src/main/java/com/tsmobile/app/ui/components/ReconnectBanner.kt @@ -1,12 +1,19 @@ package com.tsmobile.app.ui.components +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.* import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Warning import androidx.compose.material3.* import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp import com.tsmobile.app.data.ConnectionState import com.tsmobile.app.ui.theme.UiTokens import com.tsmobile.app.ui.theme.semanticColors @@ -82,3 +89,177 @@ fun ReconnectBanner( } } } + +/** + * 等待网络横幅 — 网络丢失后等待恢复。 + * + * 显示"网络已断开"提示,自动等待网络恢复后重连。 + * 用户可手动触发重连或放弃等待。 + */ +@Composable +fun WaitingForNetworkBanner( + onManualReconnect: () -> Unit, + onAbandon: () -> Unit, +) { + val semanticColors = MaterialTheme.semanticColors + Surface( + modifier = Modifier.fillMaxWidth(), + color = semanticColors.warningContainer, + contentColor = semanticColors.onWarningContainer, + tonalElevation = UiTokens.Elevation.Subtle, + ) { + Column( + modifier = Modifier.padding( + horizontal = UiTokens.Spacing.Large, + vertical = UiTokens.Spacing.Medium, + ), + ) { + Row(verticalAlignment = Alignment.CenterVertically) { + Icon( + imageVector = Icons.Default.Warning, + contentDescription = null, + tint = semanticColors.warning, + modifier = Modifier.size(UiTokens.Size.IconMedium), + ) + Spacer(Modifier.width(UiTokens.Spacing.Small)) + Text( + text = "网络已断开", + style = MaterialTheme.typography.labelLarge, + ) + } + + Spacer(Modifier.height(UiTokens.Spacing.ExtraSmall)) + Text( + text = "等待网络恢复后自动重连...", + style = MaterialTheme.typography.bodySmall, + ) + + Spacer(Modifier.height(UiTokens.Spacing.Small)) + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.End, + ) { + TextButton(onClick = onManualReconnect) { + Text("手动重连") + } + TextButton( + onClick = onAbandon, + colors = ButtonDefaults.textButtonColors( + contentColor = MaterialTheme.colorScheme.error, + ), + ) { + Text("放弃") + } + } + } + } +} + +/** + * 重连全屏遮罩 — 覆盖整个界面,阻止用户操作。 + * + * 在重连/等待网络期间显示,包含加载动画、重连进度、放弃按钮。 + * 遮罩层消费所有点击事件,防止用户在重连期间触发任何操作。 + */ +@Composable +fun ReconnectOverlay( + connectionState: ConnectionState, + onAbandon: () -> Unit, + modifier: Modifier = Modifier, +) { + val title: String + val subtitle: String + val detail: String? + + when (connectionState) { + is ConnectionState.WaitingForNetwork -> { + title = "网络已断开" + subtitle = "等待网络恢复后自动重连..." + detail = null + } + is ConnectionState.Reconnecting -> { + title = "正在重连..." + subtitle = "第 ${connectionState.attempt}/${connectionState.maxAttempts} 次尝试" + detail = connectionState.reason.takeIf { it.isNotEmpty() } + } + else -> return // 仅在等待网络或重连时显示 + } + + Box( + modifier = modifier + .fillMaxSize() + .background(Color.Black.copy(alpha = 0.5f)) + .clickable( + indication = null, + interactionSource = remember { MutableInteractionSource() }, + ) { + // 消费所有点击事件,阻止穿透到下层 UI + }, + contentAlignment = Alignment.Center, + ) { + Card( + modifier = Modifier + .width(280.dp) + .padding(horizontal = UiTokens.Spacing.Large), + elevation = CardDefaults.cardElevation(defaultElevation = 6.dp), + ) { + Column( + modifier = Modifier + .padding(UiTokens.Spacing.Large) + .heightIn(min = 200.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center, + ) { + CircularProgressIndicator() + + Spacer(Modifier.height(UiTokens.Spacing.Medium)) + + Text( + text = title, + style = MaterialTheme.typography.titleMedium, + textAlign = TextAlign.Center, + ) + + Spacer(Modifier.height(UiTokens.Spacing.Small)) + + Text( + text = subtitle, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant, + textAlign = TextAlign.Center, + ) + + // 为 detail 预留固定高度空间,避免文本出现/消失导致卡片跳动 + Box( + modifier = Modifier + .fillMaxWidth() + .heightIn(min = 32.dp), + contentAlignment = Alignment.Center, + ) { + if (detail != null) { + Text( + text = detail, + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.7f), + textAlign = TextAlign.Center, + maxLines = 2, + ) + } + } + + Spacer(Modifier.height(UiTokens.Spacing.Large)) + + Row(horizontalArrangement = Arrangement.Center) { + TextButton( + onClick = onAbandon, + colors = ButtonDefaults.textButtonColors( + contentColor = MaterialTheme.colorScheme.error, + ), + ) { + Text("放弃") + } + } + } + } + } +} diff --git a/android/app/src/main/java/com/tsmobile/app/ui/components/ServerDetailCard.kt b/android/app/src/main/java/com/tsmobile/app/ui/components/ServerDetailCard.kt index 4a2aba4..23f0f24 100644 --- a/android/app/src/main/java/com/tsmobile/app/ui/components/ServerDetailCard.kt +++ b/android/app/src/main/java/com/tsmobile/app/ui/components/ServerDetailCard.kt @@ -72,6 +72,7 @@ private fun ServerInfoSection(serverInfo: ServerInfo?, connectionState: Connecti DetailInfoRow("状态", when (connectionState) { is ConnectionState.Connected -> "已连接" is ConnectionState.Disconnecting -> "断开中..." + is ConnectionState.WaitingForNetwork -> "等待网络恢复..." is ConnectionState.Reconnecting -> "重连中 (${connectionState.attempt}/${connectionState.maxAttempts})" is ConnectionState.Disconnected -> "已断开" null -> "未连接" diff --git a/android/app/src/main/java/com/tsmobile/app/ui/navigation/NavGraph.kt b/android/app/src/main/java/com/tsmobile/app/ui/navigation/NavGraph.kt index 9ca33f5..2a27dc3 100644 --- a/android/app/src/main/java/com/tsmobile/app/ui/navigation/NavGraph.kt +++ b/android/app/src/main/java/com/tsmobile/app/ui/navigation/NavGraph.kt @@ -17,6 +17,7 @@ import androidx.navigation.compose.composable import com.tsmobile.app.data.ConnectionState import com.tsmobile.app.data.Repository import com.tsmobile.app.ui.components.PokeNotification +import com.tsmobile.app.ui.components.ReconnectOverlay import com.tsmobile.app.ui.screens.ChannelListScreen import com.tsmobile.app.ui.screens.ChatScreen import com.tsmobile.app.ui.screens.KickedScreen @@ -186,6 +187,17 @@ fun AppNavGraph( } } + // 重连全屏遮罩(阻止用户操作,覆盖所有页面包括聊天页) + val connState = connectionState + if (connState is ConnectionState.WaitingForNetwork || + connState is ConnectionState.Reconnecting + ) { + ReconnectOverlay( + connectionState = connState, + onAbandon = { serverViewModel.abandonReconnect() }, + ) + } + // Poke 气泡通知(全局覆盖层) PokeNotification( pokeEvent = pokeNotification, diff --git a/android/app/src/main/java/com/tsmobile/app/ui/screens/ChannelListScreen.kt b/android/app/src/main/java/com/tsmobile/app/ui/screens/ChannelListScreen.kt index 6524926..b78d0ab 100644 --- a/android/app/src/main/java/com/tsmobile/app/ui/screens/ChannelListScreen.kt +++ b/android/app/src/main/java/com/tsmobile/app/ui/screens/ChannelListScreen.kt @@ -85,12 +85,17 @@ fun ChannelListScreen( // ViewModel 重建保护:如果 syncState 不是 Synchronized(ViewModel 被系统回收后重建), // 重新触发首次同步,否则频道列表页会永远停在加载态。 + // 仅在连接已建立或正在重连时才同步,避免断联后无用的同步尝试。 LaunchedEffect(Unit) { android.util.Log.i("ChannelListScreen", "Screen appeared: syncState=$syncState, " + - "channels=${channelViewModel.channels.value.size}, clients=${channelViewModel.clients.value.size}") - if (syncState !is SyncState.Synchronized) { + "channels=${channelViewModel.channels.value.size}, clients=${channelViewModel.clients.value.size}, " + + "connectionState=$connectionState") + val canSync = connectionState is ConnectionState.Connected + if (syncState !is SyncState.Synchronized && canSync) { android.util.Log.w("ChannelListScreen", "ViewModel was recreated (syncState=$syncState), re-triggering sync") channelViewModel.performInitialSyncWithRetry() + } else if (syncState !is SyncState.Synchronized) { + android.util.Log.w("ChannelListScreen", "Not connected (connectionState=$connectionState), skipping futile sync") } } @@ -128,15 +133,6 @@ fun ChannelListScreen( onToggleTheme = { serverViewModel.toggleTheme() }, ) - // 重连横幅 - val connState = connectionState - if (connState is ConnectionState.Reconnecting) { - ReconnectBanner( - reconnectState = connState, - onManualReconnect = { serverViewModel.manualReconnect() }, - onAbandon = { serverViewModel.abandonReconnect() }, - ) - } // 切换状态指示器 if (switchState != ChannelSwitchState.Idle) { diff --git a/android/app/src/main/java/com/tsmobile/app/viewmodel/ChannelViewModel.kt b/android/app/src/main/java/com/tsmobile/app/viewmodel/ChannelViewModel.kt index 4f228d3..3600d1c 100644 --- a/android/app/src/main/java/com/tsmobile/app/viewmodel/ChannelViewModel.kt +++ b/android/app/src/main/java/com/tsmobile/app/viewmodel/ChannelViewModel.kt @@ -6,10 +6,12 @@ import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.viewModelScope import com.tsmobile.app.TSBridge import com.tsmobile.app.data.* +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.delay import kotlinx.coroutines.flow.* import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import kotlinx.serialization.json.Json /** @@ -142,7 +144,9 @@ class ChannelViewModel(application: Application) : AndroidViewModel(application) fun fetchChannelDetail(channelId: String) { viewModelScope.launch { try { - val detailJson = TSBridge.getChannelDetailInfoJSON(channelId) + val detailJson = withContext(Dispatchers.IO) { + TSBridge.getChannelDetailInfoJSON(channelId) + } if (detailJson.isNotEmpty() && detailJson != "{}") { _channelDetailInfo.value = json.decodeFromString(detailJson) } @@ -271,7 +275,9 @@ class ChannelViewModel(application: Application) : AndroidViewModel(application) try { Log.d(TAG, "Channel list stale, refreshing...") - val channelsJson = TSBridge.getChannelsJSON() + val channelsJson = withContext(Dispatchers.IO) { + TSBridge.getChannelsJSON() + } val channels = json.decodeFromString>(channelsJson) Repository.updateChannels(channels) lastChannelRefreshTime = System.currentTimeMillis() @@ -508,7 +514,9 @@ class ChannelViewModel(application: Application) : AndroidViewModel(application) try { // 发送 ClientMove 命令 - val error = TSBridge.moveToChannel(targetChannelId, password) + val error = withContext(Dispatchers.IO) { + TSBridge.moveToChannel(targetChannelId, password) + } if (error.isEmpty()) { // 命令成功。但服务端的 OnClientMoved 通知可能先于命令响应到达 diff --git a/android/app/src/main/java/com/tsmobile/app/viewmodel/ChatViewModel.kt b/android/app/src/main/java/com/tsmobile/app/viewmodel/ChatViewModel.kt index f0096f4..934c88f 100644 --- a/android/app/src/main/java/com/tsmobile/app/viewmodel/ChatViewModel.kt +++ b/android/app/src/main/java/com/tsmobile/app/viewmodel/ChatViewModel.kt @@ -11,6 +11,7 @@ import com.tsmobile.app.data.MessageSendState import com.tsmobile.app.data.MessageType import com.tsmobile.app.data.Repository import com.tsmobile.app.data.parseFileMessageMeta +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow @@ -18,7 +19,9 @@ import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import java.util.concurrent.ConcurrentHashMap +import java.util.concurrent.atomic.AtomicLong class ChatViewModel(application: Application) : AndroidViewModel(application) { @@ -26,6 +29,8 @@ class ChatViewModel(application: Application) : AndroidViewModel(application) { private const val TAG = "ChatViewModel" /** 消息送达确认超时(毫秒):超时未收到回显则标记为 FAILED */ private const val DELIVERY_TIMEOUT_MS = 10_000L + /** 系统消息 ID 计数器,避免同毫秒并发调用产生重复 key */ + private val sysMsgSeq = AtomicLong(0) } // 当前会话的消息列表 @@ -86,7 +91,7 @@ class ChatViewModel(application: Application) : AndroidViewModel(application) { */ fun addSystemMessage(content: String) { val message = ChatMessage( - id = "sys_${System.currentTimeMillis()}", + id = "sys_${System.currentTimeMillis()}_${sysMsgSeq.incrementAndGet()}", targetMode = 2, targetId = Repository.currentChannelId.value.toLongOrNull() ?: 0L, senderId = 0, @@ -146,11 +151,13 @@ class ChatViewModel(application: Application) : AndroidViewModel(application) { // 2. 异步发送命令 viewModelScope.launch { try { - val error = TSBridge.sendTextMessage( - currentTargetMode, - currentTargetId.toString(), - text - ) + val error = withContext(Dispatchers.IO) { + TSBridge.sendTextMessage( + currentTargetMode, + currentTargetId.toString(), + text + ) + } if (error.isEmpty()) { Log.d(TAG, "SendTextMessage accepted, waiting for echo") diff --git a/android/app/src/main/java/com/tsmobile/app/viewmodel/ServerViewModel.kt b/android/app/src/main/java/com/tsmobile/app/viewmodel/ServerViewModel.kt index 65f28c3..715f4db 100644 --- a/android/app/src/main/java/com/tsmobile/app/viewmodel/ServerViewModel.kt +++ b/android/app/src/main/java/com/tsmobile/app/viewmodel/ServerViewModel.kt @@ -4,6 +4,7 @@ import android.app.Application import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.viewModelScope import com.tsmobile.app.ConnectionService +import com.tsmobile.app.NetworkMonitor import com.tsmobile.app.TSBridge import com.tsmobile.app.data.* import com.tsmobile.app.ui.theme.ThemeMode @@ -145,6 +146,12 @@ class ServerViewModel(application: Application) : AndroidViewModel(application) private var reconnectJob: Job? = null private var lastConnectParams: ConnectParams? = null + /** 断联前的频道 ID,用于伪重连后自动回到原频道(空字符串=不自动移动) */ + private var lastChannelId: String = "" + + // ── 网络监控 ── + private val networkMonitor = NetworkMonitor(application) + /** 保存连接参数,供重连使用 */ private data class ConnectParams( val host: String, @@ -155,8 +162,55 @@ class ServerViewModel(application: Application) : AndroidViewModel(application) ) init { + // 启动网络监控(持续运行,检测网络切换) + networkMonitor.start() + // 启动时自动检查更新 checkForUpdate() + + // 网络变动检测 — 简单原则: + // 任何 NetworkCallback 触发 + 已连接 → 网络一定变了 → 必须重连 + // (UDP socket 绑定在旧 IP 上,即使 isAvailable 不变也已死) + // + // 两层 collector: + // 1. networkChangeCount → 任何网络事件 → Connected 就重连 + // 2. isAvailable false→true → WaitingForNetwork 时网络恢复 → 重连 + viewModelScope.launch { + var firstEmission = true + networkMonitor.networkChangeCount.collect { _ -> + if (firstEmission) { firstEmission = false; return@collect } + if (_connectionState.value is ConnectionState.Connected) { + android.util.Log.w(TAG, "Network changed while connected, reconnecting") + val chId = Repository.currentChannelId.value + if (chId != "0" && chId.isNotEmpty()) { + lastChannelId = chId + } + _connectionState.value = ConnectionState.WaitingForNetwork() + if (networkMonitor.isAvailable.value) { + startReconnect("网络变化,正在重连...") + } + // 若当前不可用 → 等 isAvailable 恢复 → 第二个 collector 触发 + } + } + } + + viewModelScope.launch { + var wasAvailable = networkMonitor.isAvailable.value + networkMonitor.isAvailable.collect { available -> + if (available && !wasAvailable && + _connectionState.value is ConnectionState.WaitingForNetwork + ) { + android.util.Log.i(TAG, "Network recovered, starting reconnect") + startReconnect("网络变化,正在重连...") + } + wasAvailable = available + } + } + } + + override fun onCleared() { + super.onCleared() + networkMonitor.stop() } // --- 更新检测 --- @@ -492,7 +546,9 @@ class ServerViewModel(application: Application) : AndroidViewModel(application) fun fetchServerInfo() { viewModelScope.launch { try { - val json = TSBridge.getServerInfoJSON() + val json = withContext(Dispatchers.IO) { + TSBridge.getServerInfoJSON() + } if (json.isNotEmpty() && json != "{}") { _serverInfo.value = Json.decodeFromString(json) } @@ -508,7 +564,9 @@ class ServerViewModel(application: Application) : AndroidViewModel(application) fun pokeClient(clientId: Int, message: String) { viewModelScope.launch { try { - val error = TSBridge.poke(clientId.toString(), message) + val error = withContext(Dispatchers.IO) { + TSBridge.poke(clientId.toString(), message) + } if (error.isNotEmpty()) { android.util.Log.w(TAG, "Poke failed: $error") } else { @@ -529,7 +587,9 @@ class ServerViewModel(application: Application) : AndroidViewModel(application) fun kickClient(clientId: Int, reasonID: Int, reasonMsg: String = "") { viewModelScope.launch { try { - val error = TSBridge.kickClient(clientId.toString(), reasonID, reasonMsg) + val error = withContext(Dispatchers.IO) { + TSBridge.kickClient(clientId.toString(), reasonID, reasonMsg) + } if (error.isNotEmpty()) { android.util.Log.w(TAG, "Kick failed: $error") } @@ -683,6 +743,9 @@ class ServerViewModel(application: Application) : AndroidViewModel(application) // 0. 停止前台服务 ConnectionService.stop(getApplication()) + // 0.5 重置网络监控(主动断线不需要自动重连) + networkMonitor.reset() + // 1. 停止重连 reconnectJob?.let { it.cancel() } reconnectJob = null @@ -693,11 +756,13 @@ class ServerViewModel(application: Application) : AndroidViewModel(application) // 3. 停止语音 voiceViewModel?.stopVoice() - // 4. 调用 SDK 断开 - try { - TSBridge.disconnect() - } catch (e: Exception) { - android.util.Log.e(TAG, "Disconnect error", e) + // 4. 调用 SDK 断开(IO 线程,避免阻塞 UI) + viewModelScope.launch(Dispatchers.IO) { + try { + TSBridge.disconnect() + } catch (e: Exception) { + android.util.Log.e(TAG, "Disconnect error", e) + } } // 5. 清理会话 @@ -737,6 +802,8 @@ class ServerViewModel(application: Application) : AndroidViewModel(application) fun backToHome() { reconnectJob?.let { it.cancel() } reconnectJob = null + lastChannelId = "" + networkMonitor.reset() _kickReason.value = "" _connectionState.value = null lastConnectParams = null @@ -846,9 +913,13 @@ class ServerViewModel(application: Application) : AndroidViewModel(application) reconnectJob = null reconnectAttempt = 0 + lastChannelId = "" + networkMonitor.reset() Repository.clearSession() channelViewModel?.clearChannels() - _connectionState.value = null + _connectionState.value = ConnectionState.Disconnected( + reason = "重连已放弃", wasKicked = false + ) lastConnectParams = null _state.update { it.copy(connectState = ConnectState.IDLE) } } @@ -900,17 +971,36 @@ class ServerViewModel(application: Application) : AndroidViewModel(application) } if (syncSuccess) { - android.util.Log.i(TAG, "Sync succeeded, navigating to channel list") - // 启动前台服务保活,防止锁屏/后台时 Android 杀死进程 + android.util.Log.i(TAG, "Sync succeeded, starting post-reconnect automation") + // 启动前台服务保活 ConnectionService.start( getApplication(), _state.value.address.trim(), ) _state.update { it.copy(connectState = ConnectState.SUCCESS) } - _connectionState.value = ConnectionState.Connected - // 异步预加载服务器详情,打开详情卡时可直接展示 + // 异步预加载服务器详情 fetchServerInfo() + + // 伪重连:回到断联前的频道(避开僵尸清理窗口) + // 注意:此时不设置 Connected —— 遮罩保持显示,防止用户干扰自动操作 + val targetChannel = lastChannelId + lastChannelId = "" // 一次性消费 + if (targetChannel.isNotEmpty() && targetChannel != "0") { + // 等待 4 秒:Go 侧 cleanupDuplicateIdentitySessions 在 3 秒后 Kick 僵尸 + delay(4_000L) + android.util.Log.i(TAG, "Pseudo-reconnect: moving back to channel $targetChannel") + val error = withContext(Dispatchers.IO) { + TSBridge.moveToChannel(targetChannel, "") + } + if (error.isNotEmpty()) { + android.util.Log.w(TAG, "Pseudo-reconnect moveToChannel failed: $error") + } + } + + // 所有自动操作完成 → 关闭遮罩,允许用户操作 + android.util.Log.i(TAG, "Post-reconnect automation complete, showing Connected") + _connectionState.value = ConnectionState.Connected } else { android.util.Log.e(TAG, "Sync failed after 3 attempts") _state.update { @@ -946,19 +1036,51 @@ class ServerViewModel(application: Application) : AndroidViewModel(application) return } + // 已在 WaitingForNetwork 或 Reconnecting 状态 → 我们的响应式监控已处理 + if (_connectionState.value is ConnectionState.WaitingForNetwork || + _connectionState.value is ConnectionState.Reconnecting + ) { + android.util.Log.d(TAG, "onDisconnected while already handling reconnect, ignoring") + return + } + // 语音断开处理 voiceViewModel?.onDisconnected() // 停止前台服务 ConnectionService.stop(getApplication()) - // 自动重连已禁用 — 频繁重连会导致服务器判定为高频攻击并封禁。 - // 用户可通过手动重连按钮自行重试。 - Repository.clearSession() - channelViewModel?.clearChannels() - _connectionState.value = ConnectionState.Disconnected( - reason = message, wasKicked = false - ) + // 判断断线原因:网络丢失 vs 服务器主动断线 + // - ConnectivityManager 明确检测到网络切换 → 网络丢失 + // - 断线原因为空或 timeout → TCP 静默断开(NAT 超时、运营商丢弃等), + // 此时网络接口正常但连接已死,也视为网络丢失 + // - 服务器主动断线(被踢、封禁等)会有明确的错误消息 + val isNetworkLoss = networkMonitor.consumeNetworkLossDisconnect() || + message.isEmpty() || + message.contains("timeout", ignoreCase = true) + + if (isNetworkLoss) { + // 记录当前频道,供重连后自动回到原频道 + val currentChId = Repository.currentChannelId.value + if (currentChId != "0" && currentChId.isNotEmpty()) { + lastChannelId = currentChId + android.util.Log.i(TAG, "Saved lastChannelId=$lastChannelId for pseudo-reconnect") + } + + // 网络丢失 — 启动重连(保留会话数据,不清除频道/成员信息) + // 注:正常情况下响应式监控(init block)已处理,此分支为 Go idle timeout 等兜底 + android.util.Log.i(TAG, "Network-loss disconnect detected (fallback path)") + startReconnect("网络变化,正在重连...") + } else { + // 服务器主动断线 — 清理会话,回到首页 + android.util.Log.w(TAG, "Server-initiated disconnect: $message") + lastChannelId = "" + Repository.clearSession() + channelViewModel?.clearChannels() + _connectionState.value = ConnectionState.Disconnected( + reason = message, wasKicked = false + ) + } } override fun onTextMessage(msg: TextMsg) { diff --git a/android/app/src/main/java/com/tsmobile/app/viewmodel/VoiceViewModel.kt b/android/app/src/main/java/com/tsmobile/app/viewmodel/VoiceViewModel.kt index e27da72..4383049 100644 --- a/android/app/src/main/java/com/tsmobile/app/viewmodel/VoiceViewModel.kt +++ b/android/app/src/main/java/com/tsmobile/app/viewmodel/VoiceViewModel.kt @@ -10,6 +10,7 @@ import com.tsmobile.app.data.VoiceOutputDevice import com.tsmobile.app.data.VoicePreferences import com.tsmobile.app.data.VoiceState import com.tsmobile.app.voice.VoiceService +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.launch @@ -208,7 +209,9 @@ class VoiceViewModel(application: Application) : AndroidViewModel(application) { val newEnabled = !_speakerEnabled.value _speakerEnabled.value = newEnabled voiceService.setSpeakerEnabled(newEnabled) - if (newEnabled) TSBridge.startReceiveAudio() else TSBridge.stopReceiveAudio() + viewModelScope.launch(Dispatchers.IO) { + if (newEnabled) TSBridge.startReceiveAudio() else TSBridge.stopReceiveAudio() + } Log.d(TAG, "Speaker toggled: $newEnabled") } @@ -238,7 +241,9 @@ class VoiceViewModel(application: Application) : AndroidViewModel(application) { /** Removes Go's timeline and local transient mute/speaking state for this client. */ fun removeRemoteClient(clientID: Long, moved: Boolean = false) { val clientId = clientID.toInt() - TSBridge.removeRemoteAudioClient(clientId) + viewModelScope.launch(Dispatchers.IO) { + TSBridge.removeRemoteAudioClient(clientId) + } synchronized(audioStateLock) { _remoteAudioSettings.value = _remoteAudioSettings.value - clientId _speakingClients.value = _speakingClients.value - clientId @@ -249,21 +254,27 @@ class VoiceViewModel(application: Application) : AndroidViewModel(application) { synchronized(audioStateLock) { _remoteAudioSettings.value = _remoteAudioSettings.value + (clientId to RemoteAudioSettings(muted)) } - TSBridge.setRemoteClientMuted(clientId, muted) + viewModelScope.launch(Dispatchers.IO) { + TSBridge.setRemoteClientMuted(clientId, muted) + } } fun toggleRemoteClientMuted(clientId: Int) { synchronized(audioStateLock) { val muted = !(_remoteAudioSettings.value[clientId]?.muted ?: false) _remoteAudioSettings.value = _remoteAudioSettings.value + (clientId to RemoteAudioSettings(muted)) - TSBridge.setRemoteClientMuted(clientId, muted) + viewModelScope.launch(Dispatchers.IO) { + TSBridge.setRemoteClientMuted(clientId, muted) + } } } fun onClientMoved(clientId: Long, targetChannelId: String) { val id = clientId.toInt() if (id == Repository.selfClientId.value) { - TSBridge.clearRemoteAudioClients() + viewModelScope.launch(Dispatchers.IO) { + TSBridge.clearRemoteAudioClients() + } synchronized(audioStateLock) { _remoteAudioSettings.value = emptyMap() _speakingClients.value = emptyMap() @@ -279,8 +290,11 @@ class VoiceViewModel(application: Application) : AndroidViewModel(application) { fun stopVoice() { Log.i(TAG, "stopVoice: stopping all voice activity") stopTransmit() - TSBridge.clearRemoteAudioClients() - TSBridge.stopReceiveAudio() + // Go 调用放到 IO 线程,避免主线程阻塞 + viewModelScope.launch(Dispatchers.IO) { + TSBridge.clearRemoteAudioClients() + TSBridge.stopReceiveAudio() + } voiceService.stopReceivePlayback("voice stopped") _remoteAudioSettings.value = emptyMap() _speakingClients.value = emptyMap() @@ -291,8 +305,11 @@ class VoiceViewModel(application: Application) : AndroidViewModel(application) { fun onDisconnected() { Log.w(TAG, "onDisconnected: voice blocked") endTransmit(VoiceState.Blocked("连接已断开")) - TSBridge.clearRemoteAudioClients() - TSBridge.stopReceiveAudio() + // Go 调用放到 IO 线程,避免阻塞回调线程 + viewModelScope.launch(Dispatchers.IO) { + TSBridge.clearRemoteAudioClients() + TSBridge.stopReceiveAudio() + } voiceService.stopReceivePlayback("disconnected") _remoteAudioSettings.value = emptyMap() _speakingClients.value = emptyMap() @@ -302,7 +319,10 @@ class VoiceViewModel(application: Application) : AndroidViewModel(application) { fun onReconnected() { Log.i(TAG, "onReconnected: voice idle") voiceService.enableReceivePlayback() - TSBridge.startReceiveAudio() + // Go 调用放到 IO 线程,避免阻塞回调线程 + viewModelScope.launch(Dispatchers.IO) { + TSBridge.startReceiveAudio() + } _voiceState.value = VoiceState.Idle } diff --git a/go/teamspeak/.opus/build/arm64-v8a/.ninja_log b/go/teamspeak/.opus/build/arm64-v8a/.ninja_log index 0d24f51..744b2da 100644 --- a/go/teamspeak/.opus/build/arm64-v8a/.ninja_log +++ b/go/teamspeak/.opus/build/arm64-v8a/.ninja_log @@ -1,59 +1,59 @@ # ninja log v5 +1 567 8060178312333911 CMakeFiles/opus.dir/src/opus_encoder.c.o 7334019e34b0d0ee 1646 2202 8060178324552392 CMakeFiles/opus.dir/silk/inner_prod_aligned.c.o fe717bb5f6a4c88c 174 746 8060178310692677 CMakeFiles/opus.dir/src/repacketizer.c.o 2f1d9180fb22e7dc -1 567 8060178312333911 CMakeFiles/opus.dir/src/opus_encoder.c.o 7334019e34b0d0ee 25 594 8060178308974789 CMakeFiles/opus.dir/src/extensions.c.o cdb2630ea562c274 -466 1027 8060178312960736 CMakeFiles/opus.dir/silk/decode_pulses.c.o 6ec85f3457da1ba8 -148 719 8060178310143249 CMakeFiles/opus.dir/src/opus_projection_encoder.c.o 2e07ffa4f5efa99 542 1110 8060178313594946 CMakeFiles/opus.dir/silk/decoder_set_fs.c.o 939b400a78cbec50 48 621 8060178311106444 CMakeFiles/opus.dir/src/opus_multistream_encoder.c.o e82d38a58ae86f53 +466 1027 8060178312960736 CMakeFiles/opus.dir/silk/decode_pulses.c.o 6ec85f3457da1ba8 +148 719 8060178310143249 CMakeFiles/opus.dir/src/opus_projection_encoder.c.o 2e07ffa4f5efa99 98 669 8060178309301738 CMakeFiles/opus.dir/src/opus_multistream.c.o 188791cb7ff471fc -1392 1941 8060178322065033 CMakeFiles/opus.dir/silk/init_encoder.c.o f05657b2fa99d97d 74 645 8060178309724216 CMakeFiles/opus.dir/src/opus_multistream_decoder.c.o c182378fd3b5a89e +1392 1941 8060178322065033 CMakeFiles/opus.dir/silk/init_encoder.c.o f05657b2fa99d97d +440 1001 8060178312600945 CMakeFiles/opus.dir/silk/decode_frame.c.o 60d3a48a22283c86 123 694 8060178310016862 CMakeFiles/opus.dir/src/opus_projection_decoder.c.o 1a03b821c5ba0e02 720 1294 8060178315444215 CMakeFiles/opus.dir/silk/gain_quant.c.o 77050b8d0b01fde6 -440 1001 8060178312600945 CMakeFiles/opus.dir/silk/decode_frame.c.o 60d3a48a22283c86 -974 1542 8060178317862750 CMakeFiles/opus.dir/silk/tables_pulses_per_block.c.o 17ffd3eec46866ae 199 770 8060178310672776 CMakeFiles/opus.dir/src/mapping_matrix.c.o 54afcf0c20f1b95b -283 846 8060178311499340 CMakeFiles/opus.dir/src/mlp.c.o ce1e823d5ad623f4 +974 1542 8060178317862750 CMakeFiles/opus.dir/silk/tables_pulses_per_block.c.o 17ffd3eec46866ae 226 796 8060178310340543 CMakeFiles/opus.dir/src/mlp_data.c.o ff793f0c3b8c6a2e +283 846 8060178311499340 CMakeFiles/opus.dir/src/mlp.c.o ce1e823d5ad623f4 256 823 8060178313012750 CMakeFiles/opus.dir/src/analysis.c.o 898c65bc3cc721f3 -1111 1671 8060178319364664 CMakeFiles/opus.dir/silk/HP_variable_cutoff.c.o 7de7a0607884c2e9 2971 3891 8060178337950173 CMakeFiles/opus.dir/silk/float/sort_FLP.c.o d6117b9068ca4823 310 871 8060178311509583 CMakeFiles/opus.dir/silk/code_signs.c.o 3b84c49138ae4faf -897 1467 8060178317051651 CMakeFiles/opus.dir/silk/tables_NLSF_CB_NB_MB.c.o 497d874edb02d04f +1111 1671 8060178319364664 CMakeFiles/opus.dir/silk/HP_variable_cutoff.c.o 7de7a0607884c2e9 335 896 8060178311529858 CMakeFiles/opus.dir/silk/init_decoder.c.o ca42965a7b53f3be -1193 1744 8060178320164632 CMakeFiles/opus.dir/silk/process_NLSFs.c.o addaf662d95a0245 +897 1467 8060178317051651 CMakeFiles/opus.dir/silk/tables_NLSF_CB_NB_MB.c.o 497d874edb02d04f +669 1244 8060178315353553 CMakeFiles/opus.dir/silk/encode_pulses.c.o 37f0b0687a46ceb3 364 922 8060178312253528 CMakeFiles/opus.dir/silk/CNG.c.o c751320ac875aa37 1139 1695 8060178319701143 CMakeFiles/opus.dir/silk/quant_LTP_gains.c.o 7efe4d869d9bcfff -669 1244 8060178315353553 CMakeFiles/opus.dir/silk/encode_pulses.c.o 37f0b0687a46ceb3 +1193 1744 8060178320164632 CMakeFiles/opus.dir/silk/process_NLSFs.c.o addaf662d95a0245 387 948 8060178312133650 CMakeFiles/opus.dir/silk/decode_parameters.c.o 2e2525b2036b18b3 695 1268 8060178315183572 CMakeFiles/opus.dir/silk/encode_indices.c.o debcbaad9c7566c 2638 3352 8060178334585586 CMakeFiles/opus.dir/silk/float/find_LTP_FLP.c.o 7f4e674c3afd127b 412 974 8060178312990145 CMakeFiles/opus.dir/silk/decode_core.c.o 30f1687094bfe8cd -1367 1916 8060178321793736 CMakeFiles/opus.dir/silk/control_SNR.c.o 1c37a1f5251122b9 491 1055 8060178313171259 CMakeFiles/opus.dir/silk/decode_indices.c.o 9fe5e13689624ee4 +1367 1916 8060178321793736 CMakeFiles/opus.dir/silk/control_SNR.c.o 1c37a1f5251122b9 +518 1083 8060178313382564 CMakeFiles/opus.dir/silk/NLSF_decode.c.o 9f1feabee547c1fc 2867 3727 8060178338262006 CMakeFiles/opus.dir/celt/kiss_fft.c.o 86c190a032dfd3c6 1843 2403 8060178326712557 CMakeFiles/opus.dir/silk/NLSF2A.c.o 49e4fddb34f5518e 1571 2122 8060178323834200 CMakeFiles/opus.dir/silk/decode_pitch.c.o d6cced4c812a2cc8 -518 1083 8060178313382564 CMakeFiles/opus.dir/silk/NLSF_decode.c.o 9f1feabee547c1fc 569 1138 8060178315008170 CMakeFiles/opus.dir/silk/enc_API.c.o b4e265eb0aa75cca 3686 4265 8060178345064271 CMakeFiles/opus.dir/silk/float/k2a_FLP.c.o 54ab4d6698af5d8 594 1164 8060178314761423 CMakeFiles/opus.dir/silk/dec_API.c.o 5e6e344e864f6076 +621 1193 8060178314332550 CMakeFiles/opus.dir/silk/interpolate.c.o dbebc1284f35a96 +645 1219 8060178314636500 CMakeFiles/opus.dir/silk/LP_variable_cutoff.c.o 3f1fb9848c24692a 3227 4168 8060178341085711 CMakeFiles/opus.dir/silk/float/noise_shape_analysis_FLP.c.o e0468a3580ec5115 1268 1818 8060178321102887 CMakeFiles/opus.dir/silk/NLSF_del_dec_quant.c.o 60ebae195f42ee8c -645 1219 8060178314636500 CMakeFiles/opus.dir/silk/LP_variable_cutoff.c.o 3f1fb9848c24692a -621 1193 8060178314332550 CMakeFiles/opus.dir/silk/interpolate.c.o dbebc1284f35a96 746 1318 8060178315530302 CMakeFiles/opus.dir/silk/tables_gain.c.o e4526a0162a4196f 770 1342 8060178316735356 CMakeFiles/opus.dir/silk/NSQ.c.o e1458c749667c973 797 1367 8060178316243956 CMakeFiles/opus.dir/silk/shell_coder.c.o 1dc86b43ca555195 -871 1442 8060178316800353 CMakeFiles/opus.dir/silk/tables_pitch_lag.c.o 6ec29395594f8ec 823 1392 8060178317842769 CMakeFiles/opus.dir/silk/NSQ_del_dec.c.o e44d8b8986df957d +871 1442 8060178316800353 CMakeFiles/opus.dir/silk/tables_pitch_lag.c.o 6ec29395594f8ec 847 1416 8060178317399749 CMakeFiles/opus.dir/silk/PLC.c.o 997988d0eed008c3 -1083 1646 8060178319162565 CMakeFiles/opus.dir/silk/VQ_WMat_EC.c.o 4b1b179d2178b369 922 1493 8060178317313574 CMakeFiles/opus.dir/silk/tables_other.c.o 342155a8eb0a826a -1493 2041 8060178323023467 CMakeFiles/opus.dir/silk/bwexpander_32.c.o 94b0aa14d830ac9b +1083 1646 8060178319162565 CMakeFiles/opus.dir/silk/VQ_WMat_EC.c.o 4b1b179d2178b369 948 1517 8060178317621463 CMakeFiles/opus.dir/silk/tables_NLSF_CB_WB.c.o 28d304a459269c5b +1493 2041 8060178323023467 CMakeFiles/opus.dir/silk/bwexpander_32.c.o 94b0aa14d830ac9b 1002 1571 8060178318154660 CMakeFiles/opus.dir/silk/tables_LTP.c.o 67691bd4135bd253 1028 1596 8060178319147518 CMakeFiles/opus.dir/silk/VAD.c.o 532230768284b55c 1055 1621 8060178318845528 CMakeFiles/opus.dir/silk/control_audio_bandwidth.c.o d296f28341e31a51 @@ -64,17 +64,17 @@ 1294 1842 8060178321263185 CMakeFiles/opus.dir/silk/stereo_MS_to_LR.c.o ad03d6fcc28416dd 1318 1867 8060178321864025 CMakeFiles/opus.dir/silk/stereo_LR_to_MS.c.o c03955267f99752a 1343 1891 8060178321563538 CMakeFiles/opus.dir/silk/check_control_input.c.o 847f90c609426a62 -1417 1966 8060178322994279 CMakeFiles/opus.dir/silk/A2NLSF.c.o 3f4d6aa04ccba757 1597 2150 8060178324031002 CMakeFiles/opus.dir/silk/lin2log.c.o f98af146ccb975de +1417 1966 8060178322994279 CMakeFiles/opus.dir/silk/A2NLSF.c.o 3f4d6aa04ccba757 1442 1990 8060178322904250 CMakeFiles/opus.dir/silk/control_codec.c.o 55481cfeee1d63d3 1468 2016 8060178322884303 CMakeFiles/opus.dir/silk/biquad_alt.c.o a668b0011cd6ba1f 1517 2067 8060178323272829 CMakeFiles/opus.dir/silk/bwexpander.c.o c677bd69628976ec 1543 2094 8060178323573577 CMakeFiles/opus.dir/silk/ana_filt_bank_1.c.o 1815d195d01e6866 1621 2176 8060178324271558 CMakeFiles/opus.dir/silk/log2lin.c.o 1c52e59197ccec08 -1768 2328 8060178325914481 CMakeFiles/opus.dir/silk/NLSF_stabilize.c.o 63e27ded427b5b79 1671 2227 8060178324532350 CMakeFiles/opus.dir/silk/debug.c.o 37b9f76e73b8b29d -3602 4263 8060178344263704 CMakeFiles/opus.dir/silk/float/energy_FLP.c.o ef209c71636e68ff +1768 2328 8060178325914481 CMakeFiles/opus.dir/silk/NLSF_stabilize.c.o 63e27ded427b5b79 1695 2253 8060178325214693 CMakeFiles/opus.dir/silk/LPC_analysis_filter.c.o f064181a3667c6ec +3602 4263 8060178344263704 CMakeFiles/opus.dir/silk/float/energy_FLP.c.o ef209c71636e68ff 1720 2279 8060178325551045 CMakeFiles/opus.dir/silk/LPC_inv_pred_gain.c.o 9a417474d59a6cba 1744 2303 8060178325480896 CMakeFiles/opus.dir/silk/table_LSF_cos.c.o ede65ed370ea9536 1794 2353 8060178325964294 CMakeFiles/opus.dir/silk/pitch_est_tables.c.o 5cf190ab65b376a3 @@ -90,8 +90,8 @@ 2067 2637 8060178329011099 CMakeFiles/opus.dir/silk/LPC_fit.c.o 7fe90686de65937d 2094 2666 8060178329222074 CMakeFiles/opus.dir/silk/stereo_quant_pred.c.o 3a2df6f2d17f639c 2122 2693 8060178329515463 CMakeFiles/opus.dir/silk/stereo_find_predictor.c.o aec71ffdb602a69a -2480 3088 8060178334003049 CMakeFiles/opus.dir/celt/quant_bands.c.o 7f621ae15555683b 2150 2718 8060178329701873 CMakeFiles/opus.dir/silk/sort.c.o d61518d689124c71 +2480 3088 8060178334003049 CMakeFiles/opus.dir/celt/quant_bands.c.o 7f621ae15555683b 2177 2743 8060178329852570 CMakeFiles/opus.dir/silk/sigm_Q15.c.o 9c7372545e8a85e2 2202 2767 8060178330210943 CMakeFiles/opus.dir/silk/resampler_private_up2_HQ.c.o 71bb203f012debab 2227 2793 8060178330322385 CMakeFiles/opus.dir/silk/resampler_rom.c.o 9031e896fa811e5b @@ -100,12 +100,12 @@ 2304 2867 8060178331181310 CMakeFiles/opus.dir/silk/stereo_decode_pred.c.o cef6923bba7b6aaa 2353 2919 8060178333245793 CMakeFiles/opus.dir/src/opus_decoder.c.o a229e41358adc695 2378 2944 8060178332842048 CMakeFiles/opus.dir/celt/vq.c.o c60125861663133a -4587 4766 8060178354345351 libopus.a 9d24d521f1963680 2403 2971 8060178333092398 CMakeFiles/opus.dir/celt/celt_lpc.c.o 6cfdb595104cf06c -2842 3686 8060178337334702 CMakeFiles/opus.dir/celt/entenc.c.o ed4e771efa684593 +4587 4766 8060178354345351 libopus.a 9d24d521f1963680 2428 2998 8060178332464150 CMakeFiles/opus.dir/silk/float/apply_sine_window_FLP.c.o 39b59b9c5272c051 -3138 4058 8060178339592262 CMakeFiles/opus.dir/celt/arm/arm_celt_map.c.o dc7c66beda86867e +2842 3686 8060178337334702 CMakeFiles/opus.dir/celt/entenc.c.o ed4e771efa684593 2454 3041 8060178333690864 CMakeFiles/opus.dir/celt/rate.c.o 72c5db4ae06922b1 +3138 4058 8060178339592262 CMakeFiles/opus.dir/celt/arm/arm_celt_map.c.o dc7c66beda86867e 2506 3138 8060178333361251 CMakeFiles/opus.dir/silk/float/corrMatrix_FLP.c.o 253b376fbffbeca5 2534 3186 8060178334253770 CMakeFiles/opus.dir/silk/float/encode_frame_FLP.c.o 1de3a9842b8b8526 2561 3226 8060178333872570 CMakeFiles/opus.dir/silk/float/find_LPC_FLP.c.o d5cdcc9d98c31cb8 @@ -122,8 +122,8 @@ 2919 3810 8060178338342717 CMakeFiles/opus.dir/celt/pitch.c.o 976ffd0dc45af6cc 2944 3851 8060178337691638 CMakeFiles/opus.dir/celt/modes.c.o deb23cae3ce83043 2999 3934 8060178338322686 CMakeFiles/opus.dir/celt/arm/armcpu.c.o b5d7b28c7af163fd -4169 4587 8060178353062614 CMakeFiles/opus.dir/silk/arm/NSQ_del_dec_neon_intr.c.o 2a226889e013e24c 3041 3974 8060178338772527 CMakeFiles/opus.dir/silk/float/scale_vector_FLP.c.o d17fa52401551171 +4169 4587 8060178353062614 CMakeFiles/opus.dir/silk/arm/NSQ_del_dec_neon_intr.c.o 2a226889e013e24c 3088 4018 8060178339261426 CMakeFiles/opus.dir/silk/float/schur_FLP.c.o 196fb8d9398104d6 3186 4125 8060178340231394 CMakeFiles/opus.dir/silk/float/process_gains_FLP.c.o c3a05b92aca87324 3271 4210 8060178340975415 CMakeFiles/opus.dir/silk/float/LTP_analysis_filter_FLP.c.o 54f5bbe8300210b4 @@ -140,8 +140,8 @@ 3810 4269 8060178346314358 CMakeFiles/opus.dir/silk/float/LPC_inv_pred_gain_FLP.c.o 848f6af980050476 3851 4271 8060178348412294 CMakeFiles/opus.dir/silk/float/pitch_analysis_core_FLP.c.o 2778318011eda48e 3892 4272 8060178347160595 CMakeFiles/opus.dir/silk/float/scale_copy_vector_FLP.c.o f96f0a4ef249b324 -3975 4274 8060178348821282 CMakeFiles/opus.dir/celt/arm/celt_neon_intr.c.o c91c33c147ac876a 3934 4273 8060178348705270 CMakeFiles/opus.dir/celt/arm/pitch_neon_intr.c.o 91b118319dd53062 +3975 4274 8060178348821282 CMakeFiles/opus.dir/celt/arm/celt_neon_intr.c.o c91c33c147ac876a 4019 4275 8060178349073340 CMakeFiles/opus.dir/silk/arm/biquad_alt_neon_intr.c.o 3fafe906977f036c 4059 4276 8060178349032837 CMakeFiles/opus.dir/silk/arm/arm_silk_map.c.o 1776d1cc628a2a57 4126 4319 8060178350424213 CMakeFiles/opus.dir/silk/arm/LPC_inv_pred_gain_neon_intr.c.o 16ac2cd63ac781d0 diff --git a/go/teamspeak/.opus/build/armeabi-v7a/.ninja_log b/go/teamspeak/.opus/build/armeabi-v7a/.ninja_log index fb0a113..7a2af65 100644 --- a/go/teamspeak/.opus/build/armeabi-v7a/.ninja_log +++ b/go/teamspeak/.opus/build/armeabi-v7a/.ninja_log @@ -1,59 +1,59 @@ # ninja log v5 -147 776 8060178171416023 CMakeFiles/opus.dir/src/repacketizer.c.o fd4b89cf35aa4c2d 2 640 8060178172775128 CMakeFiles/opus.dir/src/opus_encoder.c.o 70119e632077448a +147 776 8060178171416023 CMakeFiles/opus.dir/src/repacketizer.c.o fd4b89cf35aa4c2d 25 667 8060178170009259 CMakeFiles/opus.dir/src/extensions.c.o e8054a8c4c17a24d -536 1108 8060178174331205 CMakeFiles/opus.dir/silk/decode_pulses.c.o b011173bb86b9308 -176 801 8060178171224200 CMakeFiles/opus.dir/src/opus_projection_encoder.c.o c6f5de09620c93bc 642 1211 8060178175350578 CMakeFiles/opus.dir/silk/decoder_set_fs.c.o 4375468832cec411 48 701 8060178171914837 CMakeFiles/opus.dir/src/opus_multistream_encoder.c.o fa9b4ca8234791c3 +536 1108 8060178174331205 CMakeFiles/opus.dir/silk/decode_pulses.c.o b011173bb86b9308 +176 801 8060178171224200 CMakeFiles/opus.dir/src/opus_projection_encoder.c.o c6f5de09620c93bc 71 726 8060178170516183 CMakeFiles/opus.dir/src/opus_multistream_decoder.c.o 711693a083c2be05 1364 1913 8060178182422224 CMakeFiles/opus.dir/silk/init_encoder.c.o b0ced2921f63136e 107 751 8060178170274931 CMakeFiles/opus.dir/src/opus_multistream.c.o 6a9587d2d3debb38 +512 1083 8060178173961602 CMakeFiles/opus.dir/silk/decode_frame.c.o a55fecff34a30217 209 828 8060178171211089 CMakeFiles/opus.dir/src/opus_projection_decoder.c.o c35c0650ff605327 726 1290 8060178176136250 CMakeFiles/opus.dir/silk/gain_quant.c.o 3640b6f17f0da71c -512 1083 8060178173961602 CMakeFiles/opus.dir/silk/decode_frame.c.o a55fecff34a30217 -1083 1641 8060178179533215 CMakeFiles/opus.dir/silk/tables_pulses_per_block.c.o 1d1f4303d6532ab8 235 853 8060178171863248 CMakeFiles/opus.dir/src/mapping_matrix.c.o 8131381c5c42942 -303 903 8060178172184788 CMakeFiles/opus.dir/src/mlp.c.o e55e01be506a9aab +1083 1641 8060178179533215 CMakeFiles/opus.dir/silk/tables_pulses_per_block.c.o 1d1f4303d6532ab8 269 877 8060178171344781 CMakeFiles/opus.dir/src/mlp_data.c.o d960d90a028324c8 +303 903 8060178172184788 CMakeFiles/opus.dir/src/mlp.c.o e55e01be506a9aab 344 928 8060178174053425 CMakeFiles/opus.dir/src/analysis.c.o 29c6817b4e42ad8 -1212 1765 8060178180975563 CMakeFiles/opus.dir/silk/HP_variable_cutoff.c.o abbc4cd3fd3422a3 3596 4365 8060178204884749 CMakeFiles/opus.dir/silk/float/sort_FLP.c.o 3d725320fc54c45 380 953 8060178172807065 CMakeFiles/opus.dir/silk/code_signs.c.o 4f77c4598676b7d6 -1004 1567 8060178178771698 CMakeFiles/opus.dir/silk/tables_NLSF_CB_NB_MB.c.o ae6c528e321b4345 +1212 1765 8060178180975563 CMakeFiles/opus.dir/silk/HP_variable_cutoff.c.o abbc4cd3fd3422a3 412 979 8060178172907511 CMakeFiles/opus.dir/silk/init_decoder.c.o d46d9f864b2584f6 -1465 2015 8060178183504465 CMakeFiles/opus.dir/silk/process_NLSFs.c.o 77f3efb58ca552df +1004 1567 8060178178771698 CMakeFiles/opus.dir/silk/tables_NLSF_CB_NB_MB.c.o ae6c528e321b4345 +751 1315 8060178176744309 CMakeFiles/opus.dir/silk/encode_pulses.c.o 2a4091eeeb1cef31 437 1003 8060178173597967 CMakeFiles/opus.dir/silk/CNG.c.o 4bcfc09ad2eedb5 1157 1716 8060178180584371 CMakeFiles/opus.dir/silk/quant_LTP_gains.c.o bd40378bd65a8218 -751 1315 8060178176744309 CMakeFiles/opus.dir/silk/encode_pulses.c.o 2a4091eeeb1cef31 +1465 2015 8060178183504465 CMakeFiles/opus.dir/silk/process_NLSFs.c.o 77f3efb58ca552df 2747 3555 8060178196313991 CMakeFiles/opus.dir/silk/float/find_LTP_FLP.c.o c10aa719cd2091b9 462 1030 8060178173971464 CMakeFiles/opus.dir/silk/decode_core.c.o 6f10bfeb5d8cbd4e 487 1056 8060178173751854 CMakeFiles/opus.dir/silk/decode_parameters.c.o be576a88e7850a90 802 1364 8060178176925851 CMakeFiles/opus.dir/silk/encode_indices.c.o e31022d4b56d83b3 -1265 1814 8060178181450656 CMakeFiles/opus.dir/silk/control_SNR.c.o 8afb9a53bfcfca52 564 1133 8060178174485023 CMakeFiles/opus.dir/silk/decode_indices.c.o 6e6f7f33a32da6a3 +1265 1814 8060178181450656 CMakeFiles/opus.dir/silk/control_SNR.c.o 8afb9a53bfcfca52 590 1157 8060178175981773 CMakeFiles/opus.dir/silk/enc_API.c.o cf4f552d8ce423f7 +616 1183 8060178174983782 CMakeFiles/opus.dir/silk/NLSF_decode.c.o 9e7641deb975742 2957 3884 8060178198922811 CMakeFiles/opus.dir/celt/kiss_fft.c.o 7d9709c07e0ff1de 1839 2388 8060178187375040 CMakeFiles/opus.dir/silk/NLSF2A.c.o 6379907f0df339fc 1692 2238 8060178185677549 CMakeFiles/opus.dir/silk/decode_pitch.c.o b1da1f4199c3c1db -616 1183 8060178174983782 CMakeFiles/opus.dir/silk/NLSF_decode.c.o 9e7641deb975742 3473 4361 8060178203564902 CMakeFiles/opus.dir/silk/float/k2a_FLP.c.o b82c94e840930703 667 1238 8060178176171420 CMakeFiles/opus.dir/silk/dec_API.c.o 3c21158e3748c5c9 +702 1265 8060178175818000 CMakeFiles/opus.dir/silk/interpolate.c.o 9da3594d16981f0f +777 1339 8060178176638093 CMakeFiles/opus.dir/silk/LP_variable_cutoff.c.o 7d344499621f6892 3762 4370 8060178206846777 CMakeFiles/opus.dir/silk/float/noise_shape_analysis_FLP.c.o e5f4f329b69388dc 1439 1991 8060178183434650 CMakeFiles/opus.dir/silk/NLSF_del_dec_quant.c.o 765e7988e6215bb3 -777 1339 8060178176638093 CMakeFiles/opus.dir/silk/LP_variable_cutoff.c.o 7d344499621f6892 -702 1265 8060178175818000 CMakeFiles/opus.dir/silk/interpolate.c.o 9da3594d16981f0f -1030 1591 8060178179044688 CMakeFiles/opus.dir/silk/tables_pitch_lag.c.o 2db4bacf64222ba7 829 1388 8060178178654110 CMakeFiles/opus.dir/silk/NSQ_del_dec.c.o b4c1814643938396 +1030 1591 8060178179044688 CMakeFiles/opus.dir/silk/tables_pitch_lag.c.o 2db4bacf64222ba7 853 1413 8060178177249313 CMakeFiles/opus.dir/silk/tables_gain.c.o b101181362feb1e9 878 1439 8060178178622937 CMakeFiles/opus.dir/silk/NSQ.c.o ff9912290fb67a3a 903 1464 8060178178674688 CMakeFiles/opus.dir/silk/PLC.c.o 6c9c338461bbe7b9 928 1491 8060178178214019 CMakeFiles/opus.dir/silk/shell_coder.c.o b7f4808377887553 953 1515 8060178178305830 CMakeFiles/opus.dir/silk/tables_LTP.c.o 8dafd306f9430b32 -1616 2163 8060178184905762 CMakeFiles/opus.dir/silk/bwexpander_32.c.o 81b066dc4788b731 979 1541 8060178178526332 CMakeFiles/opus.dir/silk/tables_NLSF_CB_WB.c.o 101b9d0ea3afd9db -1108 1666 8060178179960872 CMakeFiles/opus.dir/silk/VQ_WMat_EC.c.o ff5a4058b843daa7 +1616 2163 8060178184905762 CMakeFiles/opus.dir/silk/bwexpander_32.c.o 81b066dc4788b731 1057 1616 8060178179291952 CMakeFiles/opus.dir/silk/tables_other.c.o efd7b52a8f87e8a8 +1108 1666 8060178179960872 CMakeFiles/opus.dir/silk/VQ_WMat_EC.c.o ff5a4058b843daa7 1133 1691 8060178180203982 CMakeFiles/opus.dir/silk/control_audio_bandwidth.c.o b43a25a76e12ff40 1183 1741 8060178181199845 CMakeFiles/opus.dir/silk/VAD.c.o 971d512f48aeffa3 1238 1789 8060178181440919 CMakeFiles/opus.dir/silk/NLSF_encode.c.o cedd174ceaccbd42 @@ -70,11 +70,11 @@ 1567 2114 8060178184505415 CMakeFiles/opus.dir/silk/biquad_alt.c.o 7f89742a0550d3df 1592 2138 8060178184636392 CMakeFiles/opus.dir/silk/bwexpander.c.o cb127ddaa13582a4 1666 2214 8060178185373053 CMakeFiles/opus.dir/silk/log2lin.c.o 118a4404faf6a740 -1889 2437 8060178187763494 CMakeFiles/opus.dir/silk/NLSF_stabilize.c.o 8744ae9376b8ec1 1716 2264 8060178185649146 CMakeFiles/opus.dir/silk/debug.c.o 6bc009a3246bcb6b +1889 2437 8060178187763494 CMakeFiles/opus.dir/silk/NLSF_stabilize.c.o 8744ae9376b8ec1 1741 2290 8060178186135398 CMakeFiles/opus.dir/silk/inner_prod_aligned.c.o 459dec630376dcab -3175 4103 8060178200662617 CMakeFiles/opus.dir/silk/float/energy_FLP.c.o 614c9fb3162fa7d1 1766 2314 8060178186535524 CMakeFiles/opus.dir/silk/LPC_analysis_filter.c.o 24e7ca6767f715c3 +3175 4103 8060178200662617 CMakeFiles/opus.dir/silk/float/energy_FLP.c.o 614c9fb3162fa7d1 1790 2339 8060178186904214 CMakeFiles/opus.dir/silk/LPC_inv_pred_gain.c.o cc5e13b9d26c0455 1814 2364 8060178186913945 CMakeFiles/opus.dir/silk/NLSF_VQ_weights_laroia.c.o d994b7b35c4e1dd4 1865 2412 8060178187336956 CMakeFiles/opus.dir/silk/pitch_est_tables.c.o ee43c9c2109a520d @@ -88,8 +88,8 @@ 2089 2642 8060178189684064 CMakeFiles/opus.dir/silk/sum_sqr_shift.c.o c9c7dda7fb3f494e 2114 2668 8060178189864155 CMakeFiles/opus.dir/silk/sigm_Q15.c.o b3232dfafb574bf2 2138 2695 8060178190072329 CMakeFiles/opus.dir/silk/resampler_rom.c.o c5e879b9930d23a9 -2593 3305 8060178195561975 CMakeFiles/opus.dir/celt/quant_bands.c.o 8bf746e7419347b6 2164 2721 8060178190472628 CMakeFiles/opus.dir/silk/sort.c.o f97c815307b36a92 +2593 3305 8060178195561975 CMakeFiles/opus.dir/celt/quant_bands.c.o 8bf746e7419347b6 2189 2747 8060178190684512 CMakeFiles/opus.dir/silk/resampler_private_up2_HQ.c.o 7e074fce8273c44e 2214 2772 8060178190902144 CMakeFiles/opus.dir/silk/stereo_encode_pred.c.o d003f3231cb3b2ed 2239 2797 8060178191325264 CMakeFiles/opus.dir/silk/stereo_find_predictor.c.o f1d25a59f515f1ee @@ -103,13 +103,13 @@ 2437 3034 8060178193484985 CMakeFiles/opus.dir/celt/mdct.c.o 9e4d2d2fa5dfddc5 2463 3084 8060178193430908 CMakeFiles/opus.dir/celt/mathops.c.o e4dfd284155df9a4 2489 3133 8060178193792784 CMakeFiles/opus.dir/celt/modes.c.o 43b5fdee8f0e4ff9 -3636 4366 8060178205222601 CMakeFiles/opus.dir/celt/arm/arm_celt_map.c.o 43da05bd6d3df067 2515 3175 8060178194805974 CMakeFiles/opus.dir/celt/rate.c.o ba6e63f982111390 -4702 7916 8060178224514732 libopus.a 9d24d521f1963680 +3636 4366 8060178205222601 CMakeFiles/opus.dir/celt/arm/arm_celt_map.c.o 43da05bd6d3df067 2540 3222 8060178194805974 CMakeFiles/opus.dir/celt/celt_lpc.c.o e6e822a9075898dc +4702 7916 8060178224514732 libopus.a 9d24d521f1963680 2568 3265 8060178195081157 CMakeFiles/opus.dir/celt/vq.c.o de718f872c85d6ff -2928 3843 8060178198861380 CMakeFiles/opus.dir/celt/entenc.c.o 5a2f66a043438766 2618 3347 8060178195015444 CMakeFiles/opus.dir/silk/float/apply_sine_window_FLP.c.o 95e0f50c30c02843 +2928 3843 8060178198861380 CMakeFiles/opus.dir/celt/entenc.c.o 5a2f66a043438766 2643 3390 8060178195324095 CMakeFiles/opus.dir/silk/float/corrMatrix_FLP.c.o 268c455fa9d329db 2668 3432 8060178196107030 CMakeFiles/opus.dir/silk/float/encode_frame_FLP.c.o 61c6629afa5aedbf 2695 3472 8060178195824374 CMakeFiles/opus.dir/silk/float/find_LPC_FLP.c.o ead76ff8a25ef8d2 @@ -130,8 +130,8 @@ 3391 4319 8060178202795685 CMakeFiles/opus.dir/silk/float/LPC_inv_pred_gain_FLP.c.o 88e61de9d4df0e36 3432 4360 8060178203161825 CMakeFiles/opus.dir/silk/float/inner_product_FLP.c.o ae70476840a2b744 3515 4363 8060178204005075 CMakeFiles/opus.dir/celt/arm/armcpu.c.o 67c7378b9a7684ec -4320 4702 8060178214865098 CMakeFiles/opus.dir/silk/arm/NSQ_del_dec_neon_intr.c.o 490fdb898adc8515 3555 4364 8060178204391311 CMakeFiles/opus.dir/silk/float/scale_vector_FLP.c.o 7374493d5e691ab2 +4320 4702 8060178214865098 CMakeFiles/opus.dir/silk/arm/NSQ_del_dec_neon_intr.c.o 490fdb898adc8515 3678 4367 8060178205648337 CMakeFiles/opus.dir/silk/float/schur_FLP.c.o ad1f964b63be55d7 3720 4368 8060178206302376 CMakeFiles/opus.dir/silk/float/LPC_analysis_filter_FLP.c.o 164e67ae9b01019b 3803 4371 8060178206875059 CMakeFiles/opus.dir/silk/float/LTP_scale_ctrl_FLP.c.o 27a58218e811f011 @@ -141,8 +141,8 @@ 3980 4376 8060178208726690 CMakeFiles/opus.dir/silk/float/residual_energy_FLP.c.o afa122e9a89a38cb 4022 4377 8060178209116958 CMakeFiles/opus.dir/silk/float/warped_autocorrelation_FLP.c.o dde295a535fb36c7 4063 4378 8060178210030707 CMakeFiles/opus.dir/silk/arm/biquad_alt_neon_intr.c.o a75a88319bf3419e -4196 4382 8060178211223262 CMakeFiles/opus.dir/celt/arm/pitch_neon_intr.c.o 33f5fd7828541ea1 4104 4380 8060178210371318 CMakeFiles/opus.dir/celt/arm/celt_neon_intr.c.o e46159b661cd3ab0 +4196 4382 8060178211223262 CMakeFiles/opus.dir/celt/arm/pitch_neon_intr.c.o 33f5fd7828541ea1 4145 4381 8060178211110886 CMakeFiles/opus.dir/silk/arm/LPC_inv_pred_gain_neon_intr.c.o f4e2bb134db06dbf 4237 4383 8060178211260877 CMakeFiles/opus.dir/silk/arm/arm_silk_map.c.o 2d9331697b9b36f8 4279 4415 8060178212033747 CMakeFiles/opus.dir/silk/arm/NSQ_neon.c.o 41b40861792fd4c9 diff --git a/go/teamspeak/.opus/build/x86/.ninja_log b/go/teamspeak/.opus/build/x86/.ninja_log index 9c70617..a0ce78d 100644 --- a/go/teamspeak/.opus/build/x86/.ninja_log +++ b/go/teamspeak/.opus/build/x86/.ninja_log @@ -1,61 +1,61 @@ # ninja log v5 +2 686 8060178452513590 CMakeFiles/opus.dir/src/opus_encoder.c.o d433c6d329e13c1f 1680 2240 8060178464061710 CMakeFiles/opus.dir/silk/inner_prod_aligned.c.o 3530672d0c0ce45a 138 832 8060178449971231 CMakeFiles/opus.dir/src/repacketizer.c.o e6aa2bba361d7ff7 -2 686 8060178452513590 CMakeFiles/opus.dir/src/opus_encoder.c.o d433c6d329e13c1f 26 715 8060178448332089 CMakeFiles/opus.dir/src/extensions.c.o b9edb7f94fe2db92 +51 744 8060178448141003 CMakeFiles/opus.dir/src/opus_multistream.c.o 9532e21ff751e992 1532 2091 8060178462693677 CMakeFiles/opus.dir/silk/init_encoder.c.o 1663731b81ae5be7 111 801 8060178449528398 CMakeFiles/opus.dir/src/opus_multistream_decoder.c.o e37c26e38113d27c -51 744 8060178448141003 CMakeFiles/opus.dir/src/opus_multistream.c.o 9532e21ff751e992 551 1216 8060178453085249 CMakeFiles/opus.dir/silk/decode_pulses.c.o ecfb28c86158af2c 172 863 8060178449823976 CMakeFiles/opus.dir/src/opus_projection_encoder.c.o 7fbff6da95dedce1 -688 1331 8060178454254672 CMakeFiles/opus.dir/silk/decoder_set_fs.c.o 7aab1c15f38f81fa 83 772 8060178450920794 CMakeFiles/opus.dir/src/opus_multistream_encoder.c.o 252040dd6ee392e9 +688 1331 8060178454254672 CMakeFiles/opus.dir/silk/decoder_set_fs.c.o 7aab1c15f38f81fa +490 1160 8060178452421937 CMakeFiles/opus.dir/silk/decode_frame.c.o 274e1173b7fcc22 206 892 8060178450010837 CMakeFiles/opus.dir/src/opus_projection_decoder.c.o c2b58dd1d4f23da6 801 1434 8060178455550153 CMakeFiles/opus.dir/silk/gain_quant.c.o 91a3658a9cca4d9e -490 1160 8060178452421937 CMakeFiles/opus.dir/silk/decode_frame.c.o 274e1173b7fcc22 -1189 1761 8060178459133660 CMakeFiles/opus.dir/silk/tables_pulses_per_block.c.o 252257776cbbea69 235 922 8060178450617638 CMakeFiles/opus.dir/src/mapping_matrix.c.o ee24677f3ad22f47 -328 1009 8060178450597667 CMakeFiles/opus.dir/src/mlp_data.c.o 10fe12ee61dbaec +1189 1761 8060178459133660 CMakeFiles/opus.dir/silk/tables_pulses_per_block.c.o 252257776cbbea69 264 950 8060178450597667 CMakeFiles/opus.dir/src/mlp.c.o d1b22393557987af +328 1009 8060178450597667 CMakeFiles/opus.dir/src/mlp_data.c.o 10fe12ee61dbaec 296 981 8060178452745431 CMakeFiles/opus.dir/src/analysis.c.o 8e71dae96fe7e5e8 -1408 1961 8060178461334809 CMakeFiles/opus.dir/silk/process_NLSFs.c.o 8c6ab1c08f884fc2 +833 1459 8060178456282587 CMakeFiles/opus.dir/silk/encode_pulses.c.o f6b98a9479b52cb3 369 1038 8060178451714766 CMakeFiles/opus.dir/silk/CNG.c.o 86cf438ba0b9d894 1275 1838 8060178460161812 CMakeFiles/opus.dir/silk/quant_LTP_gains.c.o ce64267baf821f -833 1459 8060178456282587 CMakeFiles/opus.dir/silk/encode_pulses.c.o f6b98a9479b52cb3 -1132 1706 8060178458633500 CMakeFiles/opus.dir/silk/tables_NLSF_CB_NB_MB.c.o b2b644da248bd67a +1408 1961 8060178461334809 CMakeFiles/opus.dir/silk/process_NLSFs.c.o 8c6ab1c08f884fc2 4572 4905 8060178494482917 CMakeFiles/opus.dir/silk/x86/NSQ_sse4_1.c.o 959bae52677ac897 402 1071 8060178451403936 CMakeFiles/opus.dir/silk/init_decoder.c.o 4c4e0f71d0efe870 -1303 1862 8060178460512426 CMakeFiles/opus.dir/silk/HP_variable_cutoff.c.o 91b1ee4ee4b451cd +1132 1706 8060178458633500 CMakeFiles/opus.dir/silk/tables_NLSF_CB_NB_MB.c.o b2b644da248bd67a 3482 4444 8060178482302341 CMakeFiles/opus.dir/silk/float/sort_FLP.c.o 655e278942a3b0b7 432 1102 8060178451922233 CMakeFiles/opus.dir/silk/code_signs.c.o 2bbef151260acae7 +1303 1862 8060178460512426 CMakeFiles/opus.dir/silk/HP_variable_cutoff.c.o 91b1ee4ee4b451cd 462 1132 8060178452110861 CMakeFiles/opus.dir/silk/decode_parameters.c.o 3ea07076ec2559ac 863 1483 8060178456091125 CMakeFiles/opus.dir/silk/encode_indices.c.o d67f10f0b6d4578 2867 3748 8060178476181876 CMakeFiles/opus.dir/silk/float/find_LTP_FLP.c.o bb6f4bec4142814 520 1189 8060178453384747 CMakeFiles/opus.dir/silk/decode_core.c.o f88eaf3d1ddb8bee -1507 2061 8060178462270400 CMakeFiles/opus.dir/silk/control_SNR.c.o aa51daf48538f8f 577 1245 8060178453373475 CMakeFiles/opus.dir/silk/decode_indices.c.o de8e3138ca96908b +1507 2061 8060178462270400 CMakeFiles/opus.dir/silk/control_SNR.c.o aa51daf48538f8f 614 1274 8060178455422492 CMakeFiles/opus.dir/silk/enc_API.c.o f2b775c6d8dfc08a 3998 4890 8060178487503139 CMakeFiles/opus.dir/silk/float/k2a_FLP.c.o 5bf8efe5b3806425 656 1302 8060178454802211 CMakeFiles/opus.dir/silk/dec_API.c.o e153b4cefa0e0978 715 1357 8060178454622710 CMakeFiles/opus.dir/silk/NLSF_decode.c.o ef971693c1f9392e +744 1382 8060178454974220 CMakeFiles/opus.dir/silk/LP_variable_cutoff.c.o 166118f110bf9826 +773 1408 8060178455145328 CMakeFiles/opus.dir/silk/interpolate.c.o 114acadab5cbe4ba 3565 4527 8060178483904279 CMakeFiles/opus.dir/silk/float/noise_shape_analysis_FLP.c.o ae544877ae1bb426 1435 1986 8060178461782401 CMakeFiles/opus.dir/silk/NLSF_del_dec_quant.c.o 3a994e4002921855 -773 1408 8060178455145328 CMakeFiles/opus.dir/silk/interpolate.c.o 114acadab5cbe4ba -744 1382 8060178454974220 CMakeFiles/opus.dir/silk/LP_variable_cutoff.c.o 166118f110bf9826 892 1507 8060178456181803 CMakeFiles/opus.dir/silk/tables_gain.c.o b6711b1636c0f495 923 1531 8060178457599306 CMakeFiles/opus.dir/silk/PLC.c.o 34c839824206c346 951 1557 8060178457093825 CMakeFiles/opus.dir/silk/shell_coder.c.o 6c9b7dac8aafbbf6 -1761 2316 8060178465084506 CMakeFiles/opus.dir/silk/LPC_inv_pred_gain.c.o 931de74408e7f9bf 981 1581 8060178458161554 CMakeFiles/opus.dir/silk/NSQ.c.o f94f8c988382cc8e -1160 1733 8060178458835283 CMakeFiles/opus.dir/silk/tables_pitch_lag.c.o 19aaf9c12288009e +1761 2316 8060178465084506 CMakeFiles/opus.dir/silk/LPC_inv_pred_gain.c.o 931de74408e7f9bf 1009 1605 8060178459234272 CMakeFiles/opus.dir/silk/NSQ_del_dec.c.o 6ec0be0db11f318d -1216 1787 8060178459593213 CMakeFiles/opus.dir/silk/VQ_WMat_EC.c.o 6e687e7abbaf98e0 +1160 1733 8060178458835283 CMakeFiles/opus.dir/silk/tables_pitch_lag.c.o 19aaf9c12288009e 1038 1630 8060178457704649 CMakeFiles/opus.dir/silk/tables_other.c.o 85c656323f81829a -1838 2393 8060178465535180 CMakeFiles/opus.dir/silk/bwexpander_32.c.o da1c83017a14886f +1216 1787 8060178459593213 CMakeFiles/opus.dir/silk/VQ_WMat_EC.c.o 6e687e7abbaf98e0 1071 1654 8060178458011036 CMakeFiles/opus.dir/silk/tables_NLSF_CB_WB.c.o 5b22bc8109c9075a +1838 2393 8060178465535180 CMakeFiles/opus.dir/silk/bwexpander_32.c.o da1c83017a14886f +1102 1680 8060178458354551 CMakeFiles/opus.dir/silk/tables_LTP.c.o eac964d949ef8c7e 4131 4893 8060178488782028 CMakeFiles/opus.dir/silk/float/energy_FLP.c.o e37af5d5a7fe2c2 1734 2292 8060178464731163 CMakeFiles/opus.dir/silk/LPC_analysis_filter.c.o e65adb5c39abaa1f -1102 1680 8060178458354551 CMakeFiles/opus.dir/silk/tables_LTP.c.o eac964d949ef8c7e 1245 1813 8060178460301955 CMakeFiles/opus.dir/silk/VAD.c.o 1b0458f42d871ba9 1331 1886 8060178460562201 CMakeFiles/opus.dir/silk/control_audio_bandwidth.c.o 3c6cc765a5825616 1357 1913 8060178460925754 CMakeFiles/opus.dir/silk/NLSF_encode.c.o bf3bb3b0e4bcdbb3 @@ -65,18 +65,18 @@ 1483 2035 8060178462054576 CMakeFiles/opus.dir/silk/check_control_input.c.o ae01a2a5dd1ca6cb 1558 2115 8060178462964640 CMakeFiles/opus.dir/silk/stereo_MS_to_LR.c.o 17578cc2b14b6f71 1582 2141 8060178463603494 CMakeFiles/opus.dir/silk/stereo_LR_to_MS.c.o 59a7e214443c6fe0 -1605 2166 8060178463831241 CMakeFiles/opus.dir/silk/A2NLSF.c.o 5c66f409e3369883 1707 2267 8060178464304181 CMakeFiles/opus.dir/silk/lin2log.c.o 9f0842ed0f866446 +1605 2166 8060178463831241 CMakeFiles/opus.dir/silk/A2NLSF.c.o 5c66f409e3369883 1630 2189 8060178464163665 CMakeFiles/opus.dir/silk/control_codec.c.o 5d7ff39e592d09d1 1655 2214 8060178463775096 CMakeFiles/opus.dir/silk/log2lin.c.o 4fc4e33a41cce6b5 1788 2341 8060178465033351 CMakeFiles/opus.dir/silk/bwexpander.c.o ecc54cd6b2e2f816 1813 2368 8060178465435288 CMakeFiles/opus.dir/silk/biquad_alt.c.o 63061acd91d694a3 1862 2418 8060178465802067 CMakeFiles/opus.dir/silk/ana_filt_bank_1.c.o a225d14a9ebf013d -2166 2735 8060178469001715 CMakeFiles/opus.dir/silk/NLSF_stabilize.c.o 22f4ff524d2ab6d1 1887 2444 8060178465792056 CMakeFiles/opus.dir/silk/debug.c.o 8317a5ed86d4a877 -3180 4131 8060178481285525 CMakeFiles/opus.dir/celt/kiss_fft.c.o 627e4c8cf56875c0 -2141 2708 8060178468781951 CMakeFiles/opus.dir/silk/NLSF2A.c.o 479f73ba24ce610 +2166 2735 8060178469001715 CMakeFiles/opus.dir/silk/NLSF_stabilize.c.o 22f4ff524d2ab6d1 1913 2472 8060178466331381 CMakeFiles/opus.dir/silk/decode_pitch.c.o a4749a267296f1d3 +2141 2708 8060178468781951 CMakeFiles/opus.dir/silk/NLSF2A.c.o 479f73ba24ce610 +3180 4131 8060178481285525 CMakeFiles/opus.dir/celt/kiss_fft.c.o 627e4c8cf56875c0 1938 2497 8060178466591868 CMakeFiles/opus.dir/silk/resampler_private_IIR_FIR.c.o c3e4070d2f95c4ff 1961 2522 8060178467203674 CMakeFiles/opus.dir/silk/resampler_private_down_FIR.c.o c5cf5b0678204b4e 1986 2549 8060178467002818 CMakeFiles/opus.dir/silk/resampler_private_AR2.c.o 14710dcff62ba433 @@ -92,8 +92,8 @@ 2292 2867 8060178470295136 CMakeFiles/opus.dir/silk/stereo_find_predictor.c.o 6244578617db08a1 2316 2897 8060178470822573 CMakeFiles/opus.dir/celt/celt.c.o cc3ecdb776d6d69e 2341 2923 8060178470581056 CMakeFiles/opus.dir/silk/sigm_Q15.c.o 35d006a1574f2dd6 -2654 3396 8060178474762472 CMakeFiles/opus.dir/celt/quant_bands.c.o 9a28c06d792a19ef 2369 2950 8060178470993615 CMakeFiles/opus.dir/silk/sort.c.o 64a7ee3b54555f8f +2654 3396 8060178474762472 CMakeFiles/opus.dir/celt/quant_bands.c.o 9a28c06d792a19ef 2394 2977 8060178471074033 CMakeFiles/opus.dir/silk/resampler_rom.c.o 825f38953c35a75e 2418 3011 8060178471455511 CMakeFiles/opus.dir/silk/sum_sqr_shift.c.o 8c2b28ea0ec3d27a 2445 3053 8060178471731782 CMakeFiles/opus.dir/silk/resampler_private_up2_HQ.c.o 2154acb9469b9454 @@ -106,11 +106,11 @@ 2629 3354 8060178473805312 CMakeFiles/opus.dir/celt/laplace.c.o 7fd7cb6a476cb226 2681 3438 8060178475034995 CMakeFiles/opus.dir/celt/rate.c.o dc8b436f1c8bb6f5 2708 3481 8060178475385360 CMakeFiles/opus.dir/celt/vq.c.o b236cff564220013 -3 181 8060179564060421 libopus.a cec7a724d895812e 2735 3523 8060178475271909 CMakeFiles/opus.dir/celt/celt_lpc.c.o ec93f47ee8c17d76 +3 181 8060179564060421 libopus.a cec7a724d895812e 2763 3565 8060178475201475 CMakeFiles/opus.dir/silk/float/corrMatrix_FLP.c.o ff6b4e625e58acb0 -3138 4088 8060178479294987 CMakeFiles/opus.dir/celt/entenc.c.o 90cb65300697bf4f 2788 3606 8060178475430578 CMakeFiles/opus.dir/silk/float/apply_sine_window_FLP.c.o 2cb8059300cbc29d +3138 4088 8060178479294987 CMakeFiles/opus.dir/celt/entenc.c.o 90cb65300697bf4f 2813 3649 8060178475647125 CMakeFiles/opus.dir/silk/float/find_pitch_lags_FLP.c.o 8a930ee7eb9919f9 2840 3692 8060178476412917 CMakeFiles/opus.dir/silk/float/encode_frame_FLP.c.o ea023138ed9a1844 2897 3792 8060178476535372 CMakeFiles/opus.dir/silk/float/find_LPC_FLP.c.o ed77d72d04289604 diff --git a/go/teamspeak/.opus/build/x86_64/.ninja_log b/go/teamspeak/.opus/build/x86_64/.ninja_log index fc5ea58..e34b20e 100644 --- a/go/teamspeak/.opus/build/x86_64/.ninja_log +++ b/go/teamspeak/.opus/build/x86_64/.ninja_log @@ -1,61 +1,61 @@ # ninja log v5 1 567 8060178586872692 CMakeFiles/opus.dir/src/extensions.c.o a6d1b3a5654703f2 +24 593 8060178591075214 CMakeFiles/opus.dir/src/opus_encoder.c.o 6184ae1fd51d802d 1854 2420 8060178604863662 CMakeFiles/opus.dir/silk/inner_prod_aligned.c.o db718e1a218f4ff3 146 720 8060178588841040 CMakeFiles/opus.dir/src/repacketizer.c.o 7f71572a0323fbc9 -24 593 8060178591075214 CMakeFiles/opus.dir/src/opus_encoder.c.o 6184ae1fd51d802d -95 668 8060178587591933 CMakeFiles/opus.dir/src/opus_multistream.c.o b3283a0fad13df1d 1203 2011 8060178598605430 CMakeFiles/opus.dir/silk/init_encoder.c.o 750f434d74c05435 47 618 8060178587773814 CMakeFiles/opus.dir/src/opus_multistream_decoder.c.o 5591de1cda1d2bc3 +95 668 8060178587591933 CMakeFiles/opus.dir/src/opus_multistream.c.o b3283a0fad13df1d 464 1029 8060178591204184 CMakeFiles/opus.dir/silk/decode_pulses.c.o 7a293c759683eb95 121 693 8060178588064841 CMakeFiles/opus.dir/src/opus_projection_encoder.c.o 61655af5fa5a04cb -515 1078 8060178591563923 CMakeFiles/opus.dir/silk/decoder_set_fs.c.o 709b548a11bb18f2 71 643 8060178589692045 CMakeFiles/opus.dir/src/opus_multistream_encoder.c.o 94287f7b93795d3 +515 1078 8060178591563923 CMakeFiles/opus.dir/silk/decoder_set_fs.c.o 709b548a11bb18f2 +438 1005 8060178590819475 CMakeFiles/opus.dir/silk/decode_frame.c.o 2b9bb517ae5c641f 171 747 8060178588513608 CMakeFiles/opus.dir/src/opus_projection_decoder.c.o 5ba8fe88726b9edf 694 1254 8060178593448839 CMakeFiles/opus.dir/silk/gain_quant.c.o a7bdc48541424ca2 -438 1005 8060178590819475 CMakeFiles/opus.dir/silk/decode_frame.c.o 2b9bb517ae5c641f -1005 1799 8060178596342048 CMakeFiles/opus.dir/silk/tables_pulses_per_block.c.o dfbb8908e201f843 198 772 8060178589104126 CMakeFiles/opus.dir/src/mapping_matrix.c.o 3a0a89a947f2d9e3 +1005 1799 8060178596342048 CMakeFiles/opus.dir/silk/tables_pulses_per_block.c.o dfbb8908e201f843 223 801 8060178590915222 CMakeFiles/opus.dir/src/analysis.c.o 8661ae202795ae17 -277 854 8060178589617447 CMakeFiles/opus.dir/src/mlp.c.o 50f05034a4a8b932 251 830 8060178588782656 CMakeFiles/opus.dir/src/mlp_data.c.o f30c886b723f7359 -955 1711 8060178595836437 CMakeFiles/opus.dir/silk/tables_NLSF_CB_NB_MB.c.o b8820240853dcb38 +277 854 8060178589617447 CMakeFiles/opus.dir/src/mlp.c.o 50f05034a4a8b932 4646 4996 8060178634363628 CMakeFiles/opus.dir/silk/x86/NSQ_sse4_1.c.o 5d7675aa548984ae 303 878 8060178589564207 CMakeFiles/opus.dir/silk/init_decoder.c.o 5e66128ba9edb808 -1129 1930 8060178597855284 CMakeFiles/opus.dir/silk/HP_variable_cutoff.c.o 4669c7eb185578ff +955 1711 8060178595836437 CMakeFiles/opus.dir/silk/tables_NLSF_CB_NB_MB.c.o b8820240853dcb38 3660 4602 8060178623296552 CMakeFiles/opus.dir/silk/float/sort_FLP.c.o 5d5e5fb3672d13c2 332 903 8060178589936631 CMakeFiles/opus.dir/silk/code_signs.c.o 47cf2a34f5506ea3 -1363 2159 8060178600178943 CMakeFiles/opus.dir/silk/process_NLSFs.c.o 5ceae2eabb73837f +1129 1930 8060178597855284 CMakeFiles/opus.dir/silk/HP_variable_cutoff.c.o 4669c7eb185578ff +668 1227 8060178593727426 CMakeFiles/opus.dir/silk/encode_pulses.c.o f48f9fe9aaf25af4 359 929 8060178590529657 CMakeFiles/opus.dir/silk/CNG.c.o 27020e420688ec29 1055 1854 8060178597029452 CMakeFiles/opus.dir/silk/quant_LTP_gains.c.o 5b7dda862624b9bd -668 1227 8060178593727426 CMakeFiles/opus.dir/silk/encode_pulses.c.o f48f9fe9aaf25af4 +1363 2159 8060178600178943 CMakeFiles/opus.dir/silk/process_NLSFs.c.o 5ceae2eabb73837f 387 954 8060178590346976 CMakeFiles/opus.dir/silk/decode_parameters.c.o c7b4fec334207f23 643 1202 8060178592932583 CMakeFiles/opus.dir/silk/encode_indices.c.o 2cf12e3d350b9ec0 2715 3528 8060178613837028 CMakeFiles/opus.dir/silk/float/find_LTP_FLP.c.o 49a49d8671d9fb9 412 978 8060178591234034 CMakeFiles/opus.dir/silk/decode_core.c.o 42e6ae5a65009dee -1254 2061 8060178599001660 CMakeFiles/opus.dir/silk/control_SNR.c.o 68cf4fe3ea1c67be 489 1054 8060178591360974 CMakeFiles/opus.dir/silk/decode_indices.c.o fe2d9226933c88df +1254 2061 8060178599001660 CMakeFiles/opus.dir/silk/control_SNR.c.o 68cf4fe3ea1c67be +542 1104 8060178591835699 CMakeFiles/opus.dir/silk/NLSF_decode.c.o 91b49fae3c1f6b6b 2898 3827 8060178617954638 CMakeFiles/opus.dir/celt/kiss_fft.c.o e71bc8b5e66a367 2062 2634 8060178607407024 CMakeFiles/opus.dir/silk/NLSF2A.c.o 4b0842b7a4bfdabd 1879 2447 8060178605163427 CMakeFiles/opus.dir/silk/decode_pitch.c.o 5b1160578ca19448 -542 1104 8060178591835699 CMakeFiles/opus.dir/silk/NLSF_decode.c.o 91b49fae3c1f6b6b 3485 4431 8060178621604647 CMakeFiles/opus.dir/silk/float/k2a_FLP.c.o 84da029a5478a2d6 568 1128 8060178592863837 CMakeFiles/opus.dir/silk/dec_API.c.o a9c32ea3f833e6df 593 1153 8060178593727426 CMakeFiles/opus.dir/silk/enc_API.c.o cae99634232a9d66 +618 1178 8060178592652468 CMakeFiles/opus.dir/silk/LP_variable_cutoff.c.o f4f976a22172e38 +720 1282 8060178593676744 CMakeFiles/opus.dir/silk/interpolate.c.o 7bb6937ea84dd0ee 3996 4939 8060178627344225 CMakeFiles/opus.dir/silk/float/noise_shape_analysis_FLP.c.o 3d73c3ceb19fd5db 1307 2110 8060178599914035 CMakeFiles/opus.dir/silk/NLSF_del_dec_quant.c.o bb1432c47281c60d -720 1282 8060178593676744 CMakeFiles/opus.dir/silk/interpolate.c.o 7bb6937ea84dd0ee -618 1178 8060178592652468 CMakeFiles/opus.dir/silk/LP_variable_cutoff.c.o f4f976a22172e38 748 1307 8060178594720312 CMakeFiles/opus.dir/silk/NSQ.c.o daff5baa26dea090 772 1335 8060178594314172 CMakeFiles/opus.dir/silk/shell_coder.c.o 56c6a85598c4f980 802 1362 8060178595273830 CMakeFiles/opus.dir/silk/PLC.c.o 7d6c519a999c2781 830 1391 8060178594584949 CMakeFiles/opus.dir/silk/tables_gain.c.o 599ccf690e1e0fe2 -903 1657 8060178595337148 CMakeFiles/opus.dir/silk/tables_pitch_lag.c.o 7769e3e07cac9ee4 854 1418 8060178596461506 CMakeFiles/opus.dir/silk/NSQ_del_dec.c.o 693bdc1c92938b3c -1657 2262 8060178603960929 CMakeFiles/opus.dir/silk/bwexpander_32.c.o 2dd34705260646e2 +903 1657 8060178595337148 CMakeFiles/opus.dir/silk/tables_pitch_lag.c.o 7769e3e07cac9ee4 878 1446 8060178595084936 CMakeFiles/opus.dir/silk/tables_NLSF_CB_WB.c.o 79f27fb12d3f69c6 +1657 2262 8060178603960929 CMakeFiles/opus.dir/silk/bwexpander_32.c.o 2dd34705260646e2 930 1686 8060178595576410 CMakeFiles/opus.dir/silk/tables_LTP.c.o f179ff2f31edf444 -1079 1879 8060178597234988 CMakeFiles/opus.dir/silk/VQ_WMat_EC.c.o fae7710137c4c95b 979 1773 8060178596093163 CMakeFiles/opus.dir/silk/tables_other.c.o 5f3080336a497398 +1079 1879 8060178597234988 CMakeFiles/opus.dir/silk/VQ_WMat_EC.c.o fae7710137c4c95b 1030 1826 8060178596686433 CMakeFiles/opus.dir/silk/control_audio_bandwidth.c.o a223efc73d6bf8c0 1104 1905 8060178597983332 CMakeFiles/opus.dir/silk/VAD.c.o 7ae8614e7686e301 1153 1954 8060178598046045 CMakeFiles/opus.dir/silk/NLSF_encode.c.o 166abcf28cee5b15 @@ -63,8 +63,8 @@ 1178 1979 8060178599114326 CMakeFiles/opus.dir/silk/A2NLSF.c.o 92d0b11f7efe72eb 1227 2036 8060178598711640 CMakeFiles/opus.dir/silk/check_control_input.c.o 2a04b594bce74b20 1282 2086 8060178599894571 CMakeFiles/opus.dir/silk/control_codec.c.o c4fc9d2aa107bd53 -2608 3328 8060178612984648 CMakeFiles/opus.dir/src/opus.c.o e035b65bf4ef9b69 1336 2134 8060178599852914 CMakeFiles/opus.dir/silk/NLSF_unpack.c.o 6730d95a67bd8834 +2608 3328 8060178612984648 CMakeFiles/opus.dir/src/opus.c.o e035b65bf4ef9b69 1391 2185 8060178600404472 CMakeFiles/opus.dir/silk/NLSF_VQ.c.o d71f178c3a2f3a32 1418 2210 8060178600822849 CMakeFiles/opus.dir/silk/stereo_MS_to_LR.c.o 5264dc817adae413 1447 2236 8060178603326483 CMakeFiles/opus.dir/silk/stereo_LR_to_MS.c.o fc6cc175a5a521 @@ -72,11 +72,11 @@ 1711 2315 8060178604084864 CMakeFiles/opus.dir/silk/biquad_alt.c.o f899f9a808bbc494 1773 2342 8060178604152995 CMakeFiles/opus.dir/silk/bwexpander.c.o a3e568a62df779f2 1799 2368 8060178604327993 CMakeFiles/opus.dir/silk/log2lin.c.o 14002062da071421 -1979 2556 8060178606627546 CMakeFiles/opus.dir/silk/NLSF_stabilize.c.o f91bbf0cce049400 1827 2394 8060178604361720 CMakeFiles/opus.dir/silk/debug.c.o 777351516905c9ad +1979 2556 8060178606627546 CMakeFiles/opus.dir/silk/NLSF_stabilize.c.o f91bbf0cce049400 1930 2503 8060178605907123 CMakeFiles/opus.dir/silk/LPC_inv_pred_gain.c.o b0d96e51a3d9534b -4297 4986 8060178629645916 CMakeFiles/opus.dir/silk/float/energy_FLP.c.o 2fd9c0c6d099a6fe 1955 2530 8060178606105940 CMakeFiles/opus.dir/silk/LPC_analysis_filter.c.o d9acc35ce7a508d0 +4297 4986 8060178629645916 CMakeFiles/opus.dir/silk/float/energy_FLP.c.o 2fd9c0c6d099a6fe 2012 2582 8060178606415448 CMakeFiles/opus.dir/silk/pitch_est_tables.c.o fc6504fb669c1e91 2036 2608 8060178606716877 CMakeFiles/opus.dir/silk/NLSF_VQ_weights_laroia.c.o 9aec4983f5e09568 2086 2662 8060178607144758 CMakeFiles/opus.dir/silk/table_LSF_cos.c.o 450e290795b0f65f @@ -89,8 +89,8 @@ 2262 2849 8060178609081405 CMakeFiles/opus.dir/silk/sum_sqr_shift.c.o 6d69eda01ef830f1 2290 2875 8060178609302874 CMakeFiles/opus.dir/silk/stereo_encode_pred.c.o 633c381c5ee601e5 2316 2898 8060178609512951 CMakeFiles/opus.dir/silk/sigm_Q15.c.o 63a52f8ca7d19859 -3186 4164 8060178619430289 CMakeFiles/opus.dir/celt/quant_bands.c.o e31157bb9482d2d5 2342 2924 8060178609915860 CMakeFiles/opus.dir/silk/sort.c.o d6df62df8775896 +3186 4164 8060178619430289 CMakeFiles/opus.dir/celt/quant_bands.c.o e31157bb9482d2d5 2368 2952 8060178610072825 CMakeFiles/opus.dir/silk/stereo_decode_pred.c.o 8d943088148701d9 2394 2979 8060178610785531 CMakeFiles/opus.dir/celt/celt.c.o e88cdedf137c0860 2421 3014 8060178610814744 CMakeFiles/opus.dir/silk/stereo_find_predictor.c.o 78f850b828cc43fa @@ -110,14 +110,14 @@ 2849 3744 8060178615263148 CMakeFiles/opus.dir/celt/entdec.c.o a9ae398b5ae702d 2875 3784 8060178615382570 CMakeFiles/opus.dir/celt/cwrs.c.o 89f0da52cd9eff1b 2925 3869 8060178616041329 CMakeFiles/opus.dir/celt/mdct.c.o 8dea860fdaad69f5 -3329 4296 8060178620444779 CMakeFiles/opus.dir/silk/float/apply_sine_window_FLP.c.o 96246070676c3b60 2953 3910 8060178616548968 CMakeFiles/opus.dir/celt/entenc.c.o b6740ed302114e4c +3329 4296 8060178620444779 CMakeFiles/opus.dir/silk/float/apply_sine_window_FLP.c.o 96246070676c3b60 2979 3954 8060178616232988 CMakeFiles/opus.dir/celt/mathops.c.o 273135263669ed01 3015 3996 8060178616794382 CMakeFiles/opus.dir/celt/laplace.c.o 5129c0917f4c6066 3058 4038 8060178617153459 CMakeFiles/opus.dir/celt/modes.c.o 3706ee6a2d467b76 3100 4080 8060178618503838 CMakeFiles/opus.dir/celt/rate.c.o 1ac205d3a5b76a2f -3 175 8060179571838127 libopus.a cec7a724d895812e 3143 4122 8060178618601783 CMakeFiles/opus.dir/celt/celt_lpc.c.o 3dbdb0cfb4918dd7 +3 175 8060179571838127 libopus.a cec7a724d895812e 3228 4206 8060178619720805 CMakeFiles/opus.dir/celt/pitch.c.o 7a5542cf7aba6d7f 3278 4247 8060178620626456 CMakeFiles/opus.dir/celt/vq.c.o dc6ad39f07bf62b8 3381 4345 8060178620781345 CMakeFiles/opus.dir/silk/float/corrMatrix_FLP.c.o 16a6964e26a69e1e