View difference between Paste ID: pbeQ2Kax and PMbpdzTN
SHOW: | | - or go back to the newest paste.
1
int sceMpegBaseCscVme(ScePVoid pRGBbuffer, ScePVoid pRGBbuffer2, SceInt32 width, SceMpegYCrCbBuffer *pYCrCbBuffer)
2
{
3
    uint uVar1;
4
    int ret;
5
    uint uVar2;
6
    uint uVar3;
7
    uint width1;
8
    int in_k1;
9
    
10
    uVar1 = in_k1 << 0xb;
11
    if (-1 < (int)(((uint)&pYCrCbBuffer->iFrameHeight | (uint)pYCrCbBuffer) & uVar1)) {
12
        ret = pYCrCbBuffer->iFrameBufferWidth16;
13
        uVar3 = pYCrCbBuffer->iFrameBufferHeight16 * ret * 0x80;
14
        uVar2 = uVar3 >> 2;
15
        width1 = width;
16
        if (width == 0) {
17
            width1 = DAT_000006e8;
18
        }
19
        if (width1 < (uint)(ret << 4)) {
20
            return -0x7ffffe02;
21
        }
22
        width1 = width1 * ret * 4;
23
        if ((((((-1 < (int)(uVar1 & ((uint)((int)pYCrCbBuffer->pYBuffer + uVar3) |
24
                                     (uint)pYCrCbBuffer->pYBuffer | uVar3))) &&
25
               (-1 < (int)(uVar1 & ((uint)((int)pYCrCbBuffer->pYBuffer2 + uVar3) |
26
                                    (uint)pYCrCbBuffer->pYBuffer2 | uVar3)))) &&
27
              (-1 < (int)(((int)pYCrCbBuffer->pCrBuffer + uVar2 | (uint)pYCrCbBuffer->pCrBuffer) &
28
                         uVar1))) &&
29
             ((-1 < (int)(((int)pYCrCbBuffer->pCbBuffer + uVar2 | (uint)pYCrCbBuffer->pCbBuffer) &
30
                         uVar1) &&
31
              (-1 < (int)(((int)pYCrCbBuffer->pCrBuffer2 + uVar2 | (uint)pYCrCbBuffer->pCrBuffer2) &
32
                         uVar1))))) &&
33
            ((-1 < (int)(((int)pYCrCbBuffer->pCbBuffer2 + uVar2 | (uint)pYCrCbBuffer->pCbBuffer2) &
34
                        uVar1) &&
35
             (-1 < (int)(uVar1 & ((uint)((int)pRGBbuffer + width1) | (uint)pRGBbuffer | width1))))))
36
           && ((pRGBbuffer2 == (ScePVoid)0x0 ||
37
               (-1 < (int)(uVar1 & ((uint)((int)pRGBbuffer2 + width1) | (uint)pRGBbuffer2 | width1))
38
               )))) {
39
            ret = trigger_dmacplus_memcpy4((int)DAT_000006e6,width,0);
40
            if (ret == 0) {
41
                ret = trigger_dmacplus_memcpy3(pRGBbuffer,pRGBbuffer2,pYCrCbBuffer);
42
            }
43
            sceKernelUnlockMutex(g_SceMpegBaseCSC_mutex,1);
44
            return ret;
45
        }
46
    }
47
    return -0x7fffffdd;
48
}
49
50
void trigger_dmacplus_memcpy4(int param_1,int param_2,int param_3)
51
{
52
    uint ret;
53
    
54
    if (param_2 == 0) {
55
        param_2 = DAT_000006e8;
56
    }
57
    if (param_3 == 0) {
58
        param_3 = 0x6d0;
59
    }
60
    sceKernelLockMutex(g_SceMpegBaseCSC_mutex,1,0);
61
    while (ret = sceDmacplus_driver_0xB269EAC9_memcpy4(param_1,param_2,param_3), ret == 0x80000021)
62
    {
63
        sceDmacplus_driver_0xBF0DB45E_sceDmacplusAvcSync(0, 0);
64-
        sceDmacplus_driver_0xBF0DB45E_sceDmacplusAvcSync();
64+
65
    return;
66
}
67
}
68
69
70
int trigger_dmacplus_memcpy3(ScePVoid pRGBbuffer, ScePVoid pRGBbuffer2, SceMpegYCrCbBuffer *pYCrCbBuffer)
71
{
72
    int iVar1;
73
    int iVar2;
74
    uint ret;
75
    
76
    iVar1 = sceKernelPollEventFlag(g_SceMpegBaseCSC_evflag,3,1,0);
77
    iVar2 = -0x7fffffff;
78
    if (-1 < iVar1) {
79
        do {
80
            ret = sceDmacplus_driver_0x9C492B9B(pRGBbuffer, pRGBbuffer2, pYCrCbBuffer);
81
            if ((ret != 0) && (ret != 0x80000021)) {
82
                return ret;
83
            }
84
            iVar2 = sceDmacplus_driver_0xBF0DB45E_sceDmacplusAvcSync();
85
        } while (ret != 0);
86
    }
87
    return iVar2;
88
}
89
90
uint sceDmacplus_driver_0xB269EAC9(int param_1,int width,ushort *param_3)
91
{
92
    undefined4 tmp;
93
    uint ret;
94
    
95
    tmp = sceKernelCpuSuspendIntr();
96
    if ((g_dmac_status & 2) == 0) {
97
        DAT_000012f4 = ((uint)param_3[2] & 0x3ff) << 0x14 | ((uint)param_3[1] & 0x3ff) << 10 |
98
                       (uint)*param_3 & 0x3ff;
99
        DAT_000012f8 = ((uint)param_3[5] & 0x3ff) << 0x14 | ((uint)param_3[4] & 0x3ff) << 10 |
100
                       (uint)param_3[3] & 0x3ff;
101
        DAT_000012fc = ((uint)param_3[8] & 0x3ff) << 0x14 | ((uint)param_3[7] & 0x3ff) << 10 |
102
                       (uint)param_3[6] & 0x3ff;
103
        DAT_00001300 = ((uint)param_3[10] & 1) << 8 | (uint)*(byte *)(param_3 + 9);
104
        DAT_00001304 = width;
105
        DAT_00001308 = param_1;
106
        _DAT_bc800150 = DAT_000012f4;
107
        _DAT_bc800154 = DAT_000012f8;
108
        _DAT_bc800158 = DAT_000012fc;
109
        _DAT_bc80015c = DAT_00001300;
110
        sceKernelCpuResumeIntr(tmp);
111
        ret = 0;
112
    }
113
    else {
114
        sceKernelCpuResumeIntr(tmp);
115
        ret = 0x80000021;
116
    }
117
    return ret;
118
}
119
120
uint sceDmacplus_driver_0x9C492B9B(ScePVoid pRGBbuffer, ScePVoid pRGBbuffer2, SceMpegYCrCbBuffer *pYCrCbBuffer)
121
{
122
    uint uVar1;
123
    undefined4 uVar2;
124
    ushort uVar3;
125
    int iVar4;
126
    uint in_k1;
127
    
128
    uVar1 = 0x80000103;
129
    if (pRGBbuffer != (ScePVoid)0x0) {
130
        uVar2 = sceKernelCpuSuspendIntr();
131
        uVar3 = 0x1a;
132
        if ((pYCrCbBuffer->iFrameBufferWidth16 & 7U | DAT_00001308) == 0) {
133
            uVar3 = 10;
134
        }
135
        iVar4 = (in_k1 >> 0x1f) << 0x1e;
136
        if ((g_dmac_status & uVar3) == 0) {
137
            if (pRGBbuffer2 == (ScePVoid)0x0) {
138
                _DAT_bc80014c = DAT_00001304 << 8 | DAT_00001308 << 1;
139
            }
140
            else {
141
                _DAT_bc80014c = DAT_00001304 << 8 | DAT_00001308 << 1 | 1;
142
            }
143
            _DAT_bc800140 =
144
                 (pYCrCbBuffer->iFrameBufferHeight16 & 0x3fU) << 0x10 |
145
                 (pYCrCbBuffer->iFrameBufferWidth16 & 0x3fU) << 8 |
146
                 (pYCrCbBuffer->iUnknown & 1U) << 2 | (pYCrCbBuffer->iUnknown2 & 1U) << 1 | 1;
147
            _DAT_bc800160 = 0xd;
148
            g_dmac_status = g_dmac_status | 0x8002;
149
            _DAT_bc800120 = iVar4;
150
            _DAT_bc800128 = iVar4;
151
            _DAT_bc800130 = iVar4;
152
            _DAT_bc800134 = iVar4;
153
            _DAT_bc800138 = iVar4;
154
            _DAT_bc80013c = iVar4;
155
            _DAT_bc800144 = iVar4;
156
            _DAT_bc800148 = iVar4;
157
            sceKernelClearEventFlag(g_SceDmacplusAvc_evflag,0xfffffffc);
158
            sceKernelCpuResumeIntrWithSync(uVar2);
159
            uVar1 = 0;
160
        }
161
        else {
162
            sceKernelCpuResumeIntr(uVar2);
163
            uVar1 = 0x80000021;
164
        }
165
    }
166
    return uVar1;
167
}
168
169
170
171
172