| 380 | } |
| 381 | |
| 382 | std::vector<pag::Layer*> ExportLayers(std::shared_ptr<PAGExportSession> session, |
| 383 | const AEGP_CompH& compHandle) { |
| 384 | bool hasSoloLayer = false; |
| 385 | std::vector<bool> soloFlags = {}; |
| 386 | std::vector<pag::Layer*> layers = {}; |
| 387 | |
| 388 | A_long numLayers = 0; |
| 389 | if (GetSuites()->LayerSuite6()->AEGP_GetCompNumLayers(compHandle, &numLayers) != A_Err_NONE) { |
| 390 | session->pushWarning(AlertInfoType::ExportAEError); |
| 391 | return layers; |
| 392 | } |
| 393 | |
| 394 | for (int index = 0; index < numLayers; index++) { |
| 395 | AEGP_LayerH layerHandle = nullptr; |
| 396 | if (GetSuites()->LayerSuite6()->AEGP_GetCompLayerByIndex(compHandle, index, &layerHandle) != |
| 397 | A_Err_NONE) { |
| 398 | session->pushWarning(AlertInfoType::ExportAEError); |
| 399 | continue; |
| 400 | } |
| 401 | |
| 402 | if (layerHandle == nullptr) { |
| 403 | continue; |
| 404 | } |
| 405 | |
| 406 | uint32_t layerID = GetLayerID(layerHandle); |
| 407 | session->layerHandleMap[layerID] = layerHandle; |
| 408 | ExportLayerType layerType = GetLayerType(layerHandle); |
| 409 | if (layerType == ExportLayerType::Audio && session->audioMarkers != nullptr && |
| 410 | session->configParam.isTagCodeSupport(pag::TagCode::MarkerList)) { |
| 411 | auto markers = ExportMarkers(session, layerHandle); |
| 412 | session->audioMarkers->insert(session->audioMarkers->end(), markers.begin(), markers.end()); |
| 413 | } |
| 414 | ScopedAssign<int> layerIndex(session->layerIndex, index); |
| 415 | auto layer = ExportLayer(layerHandle, session); |
| 416 | if (layer == nullptr) { |
| 417 | continue; |
| 418 | } |
| 419 | if (layer->trackMatteLayer != nullptr) { |
| 420 | soloFlags.push_back(false); |
| 421 | layers.push_back(layer->trackMatteLayer); |
| 422 | } |
| 423 | layers.push_back(layer); |
| 424 | |
| 425 | AEGP_LayerFlags layerFlags = GetLayerFlags(layerHandle); |
| 426 | if (layerType == ExportLayerType::Audio || layerType == ExportLayerType::Unknown) { |
| 427 | layer->isActive = false; |
| 428 | } else { |
| 429 | layer->isActive = layerFlags & AEGP_LayerFlag_VIDEO_ACTIVE; |
| 430 | } |
| 431 | bool soloFlag = layer->isActive && (layerFlags & AEGP_LayerFlag_SOLO) && |
| 432 | (layer->type() != pag::LayerType::Camera); |
| 433 | if (soloFlag) { |
| 434 | hasSoloLayer = true; |
| 435 | } |
| 436 | soloFlags.push_back(soloFlag); |
| 437 | } |
| 438 | if (session->stopExport) { |
| 439 | return layers; |
no test coverage detected