新增服务器重连机制,由于ts服务端不支持断线重连机制,本机制是新建与服务端连接的伪重连

This commit is contained in:
sansen
2026-07-23 23:54:01 +08:00
parent d961c9ec2d
commit 2898d9d874
17 changed files with 691 additions and 171 deletions
+2 -2
View File
@@ -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 {
@@ -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<Boolean> = _isAvailable.asStateFlow()
/** 网络变化计数器:任何网络回调触发时自增(用于检测 isAvailable 不变但底层网络已切换的场景) */
private val _networkChangeCount = MutableStateFlow(0L)
val networkChangeCount: StateFlow<Long> = _networkChangeCount.asStateFlow()
/** 最近是否检测到网络丢失(60 秒窗口内) */
private val _wasNetworkLostRecently = MutableStateFlow(false)
val wasNetworkLostRecently: StateFlow<Boolean> = _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")
}
}
@@ -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 = "",
@@ -59,17 +59,20 @@ object Repository {
// 并发执行 channellist/clientlist/clientinfo 会导致数据行错配,频道列表为空。
val channels = fetchChannels()
val clients = fetchClients()
val selfId = TSBridge.getClientID().toInt()
var channelId = TSBridge.getChannelID()
val (selfId, channelId) = withContext(Dispatchers.IO) {
val id = TSBridge.getClientID().toInt()
var cid = TSBridge.getChannelID()
// 备用方案:如果 GetChannelID() 返回 "0"GetClientInfo 可能失败),
// 从客户端列表中获取自身所在的频道 ID
if (channelId == "0" && selfId > 0) {
val selfChannel = clients.find { it.id == selfId }?.channelId
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")
channelId = 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<ClientInfo>, 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)
}
/** 查询成员是否存在 */
@@ -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 "未连接"
@@ -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("放弃")
}
}
}
}
}
}
@@ -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 -> "未连接"
@@ -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,
@@ -85,12 +85,17 @@ fun ChannelListScreen(
// ViewModel 重建保护:如果 syncState 不是 SynchronizedViewModel 被系统回收后重建),
// 重新触发首次同步,否则频道列表页会永远停在加载态。
// 仅在连接已建立或正在重连时才同步,避免断联后无用的同步尝试。
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) {
@@ -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<ChannelDetailInfo>(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<List<ChannelInfo>>(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 通知可能先于命令响应到达
@@ -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(
val error = withContext(Dispatchers.IO) {
TSBridge.sendTextMessage(
currentTargetMode,
currentTargetId.toString(),
text
)
}
if (error.isEmpty()) {
Log.d(TAG, "SendTextMessage accepted, waiting for echo")
@@ -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<ServerInfo>(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,12 +756,14 @@ class ServerViewModel(application: Application) : AndroidViewModel(application)
// 3. 停止语音
voiceViewModel?.stopVoice()
// 4. 调用 SDK 断开
// 4. 调用 SDK 断开IO 线程,避免阻塞 UI
viewModelScope.launch(Dispatchers.IO) {
try {
TSBridge.disconnect()
} catch (e: Exception) {
android.util.Log.e(TAG, "Disconnect error", e)
}
}
// 5. 清理会话
Repository.clearSession()
@@ -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,20 +1036,52 @@ 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())
// 自动重连已禁用 — 频繁重连会导致服务器判定为高频攻击并封禁。
// 用户可通过手动重连按钮自行重试。
// 判断断线原因:网络丢失 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) {
android.util.Log.d(TAG, "onTextMessage: targetMode=${msg.targetMode}, targetID=${msg.targetID}, " +
@@ -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)
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()
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))
}
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))
viewModelScope.launch(Dispatchers.IO) {
TSBridge.setRemoteClientMuted(clientId, muted)
}
}
}
fun onClientMoved(clientId: Long, targetChannelId: String) {
val id = clientId.toInt()
if (id == Repository.selfClientId.value) {
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()
// 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("连接已断开"))
// 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()
// Go 调用放到 IO 线程,避免阻塞回调线程
viewModelScope.launch(Dispatchers.IO) {
TSBridge.startReceiveAudio()
}
_voiceState.value = VoiceState.Idle
}
+27 -27
View File
@@ -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
+25 -25
View File
@@ -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
+25 -25
View File
@@ -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
+23 -23
View File
@@ -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