Давайте начнем с этого:Как скопировать байты из памяти, используя шаблон (YUYV упакованный в YUV420 планарный)
У меня есть блок памяти 16 байт, и мне нужно только скопировать даже байты на блок 8 байт Память.
Мой текущий алгоритм делает что-то вроде этого:
unsigned int source_size = 16, destination_size = 8, i;
unsigned char * source = new unsigned char[source_size];
unsigned char * destination = new unsigned char[destination_size];
// fill source
for(i = 0; i < source_size; ++i)
{
source[i] = 0xf + i;
}
// source :
// 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e
// copy
for(i = 0; i < destination_size; ++i)
{
destination[i] = source[i * 2];
}
// destination :
// 0f 11 13 15 17 19 1b 1d
Это просто пример, потому что я хотел бы знать, если есть лучший способ сделать это, когда мне нужно получить каждый 3-й байт или каждый 4-й байт, а не только четные байты.
Я знаю, используя цикл Я могу достичь этого, но мне нужно optmize это ... Я точно не знаю, как использовать SSE, поэтому я не знаю, можно ли использовать в этом случае, но что-то вроде memcpy волшебный вид было бы здорово.
Я также подумал об использовании макроса, чтобы избавиться от цикла, поскольку размер источника и места назначения являются постоянными, но это не похоже на большую сделку.
Возможно, вы можете придумать из коробки, если я скажу, что это для извлечения YCbCr байтов формата YUYV. Также мне нужно подчеркнуть, что я делаю это, чтобы избавиться от libswscale.
он ограничен полосой пропускания памяти в любом случае, зачем беспокоиться? – user3528438