Runt
2025-04-13 8c0f96b20f4cf44d230b373f51261566af02de8e
app/src/main/cpp/server_global.cpp
@@ -395,15 +395,20 @@
 * @param mainData
 */
void waterYUV(uint8_t *mainData[3]) {
    waterYUV(pushMiniDatas.size(),mainData);
}
void waterYUV(int index,uint8_t *mainData[3]) {
    //LOGI("waterYUV 加水印(画中画)");
    int size = pushMiniDatas.size();
    for (int i = 0; i < pushMiniDatas.size(); ++i) {
    for (int i = 0; i < index; ++i) {
        MiniViewData *pData = pushMiniDatas[i];
        if(pData->streamCode == mainStreamCode){
            continue;
        }
        if(!pData->videoOn){
            continue;
        }
        if(pData->streamType == 6){
            jvmMainCall->drawText(pData->streamCode,mainData);
        }
        if(!pData->scaledYuvFrame && pData->scaledYuvFrames.size() == 0 ){
            //LOGE("小窗丢帧1");
@@ -428,10 +433,10 @@
        YUVData *scaledYuvFrame = pData->scaledYuvFrame;
        //位置
        int offsetY = (mainHeight - scaledYuvFrame->height) * scaledYuvFrame->pYrate;
        int offsetX = (mainWidth - scaledYuvFrame->width) * scaledYuvFrame->pXrate;
        int offsetY = (mainHeight - scaledYuvFrame->height) * (pData->streamType == 6 ? pData->pYrate : scaledYuvFrame->pYrate);
        int offsetX = (mainWidth - scaledYuvFrame->width) * (pData->streamType == 6 ? pData->pXrate : scaledYuvFrame->pXrate);
        //LOGI("waterYUV %dx%d x:%d,y:%d  x:%f,y:%f [0]:%d",pData->scaleWidth,miniHeight,pData->pYrate,pData->pXrate,offsetX,offsetY,pData->scaledYUVData[0]);
        LOGI("waterYUV %dx%d x:%d,y:%d  x:%d,y:%d ",scaledYuvFrame->width,scaledYuvFrame->height,pData->pYrate,pData->pXrate,offsetX,offsetY);
        // 边界检查,确保不会越界
        if (offsetX + scaledYuvFrame->width > mainWidth ) {
@@ -456,17 +461,14 @@
        for (int y = 0; y < scaledYuvFrame->height / 2; y++) {
            uint8_t* main_u_row = mainData[1] + ((offsetY / 2) + y) * (mainWidth / 2) + (offsetX / 2);
            uint8_t* mini_u_row = scaledYuvFrame->yuvData[1] + y * (scaledYuvFrame->width / 2);
            memcpy(main_u_row, mini_u_row, scaledYuvFrame->width / 2);
        }
        // 处理 V 平面
        for (int y = 0; y < scaledYuvFrame->height / 2; y++) {
            uint8_t* main_v_row = mainData[2] + ((offsetY / 2) + y) * (mainWidth / 2) + (offsetX / 2);
            uint8_t* mini_v_row = scaledYuvFrame->yuvData[2] + y * (scaledYuvFrame->width / 2);
            memcpy(main_v_row, mini_v_row, scaledYuvFrame->width / 2);
        }
    }
}
@@ -529,7 +531,7 @@
    if(!miniView){
        return;
    }
    if(miniView->videoOn || miniView->streamCode == mainStreamCode){
    if(miniView->videoOn || miniView->streamCode == mainStreamCode || miniView->streamType == 6){
        pthread_mutex_lock(&pushVideoMutex);
        YUVData *yuvFrame = new YUVData();
        yuvFrame->width = miniView->width;