版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dancing_night/article/details/80816268
1、流程介绍
openInput->openPic->InitOutput->readFrame->decode->operateAvframe->encode->writeFile->end
2、核心代码
核心代码为处理AVFrame如下:
for(int j = 0; j < m_markH; j++)
{
if ((m_y + j) < m_beMarkH)
{
for(int i = 0; i < m_markW; i++)
{
if ((m_x + i) < m_beMarkW)
{
if (0 == m_markFrame->data[0][(j) * m_markFrame->linesize[0] + (i * 4) + 3])
{
continue;
}
unsigned char A = /*(((float)m_markFrame->data[0][(j) * m_markFrame->linesize[0] + (i * 3) + 3]) / 255.0) * */
m_markFrame->data[0][(j) * m_markFrame->linesize[0] + (i * 4) + 3];
float logoAlpha = A / 255.0;
logoAlpha = logoAlpha * m_alpha;
unsigned char R =
m_markFrame->data[0][(j) * m_markFrame->linesize[0] + (i * 4) + 0];
unsigned char G =
m_markFrame->data[0][(j) * m_markFrame->linesize[0] + (i * 4) + 1];;
unsigned char B =
m_markFrame->data[0][(j) * m_markFrame->linesize[0] + (i * 4) + 2];
tmpMixFrame->data[0][(m_y + j) * tmpMixFrame->linesize[0] + (m_x + i) * 3 + 0] =
tmpMixFrame->data[0][(m_y + j) * tmpMixFrame->linesize[0] + (m_x + i) * 3 + 0] * (1- logoAlpha) +
R * logoAlpha;
tmpMixFrame->data[0][(m_y + j) * tmpMixFrame->linesize[0] + (m_x + i) * 3 + 1] =
tmpMixFrame->data[0][(m_y + j) * tmpMixFrame->linesize[0] + (m_x + i) * 3 + 1] * (1- logoAlpha) +
G * logoAlpha;
tmpMixFrame->data[0][(m_y + j) * tmpMixFrame->linesize[0] + (m_x + i) * 3 + 2] =
tmpMixFrame->data[0][(m_y + j) * tmpMixFrame->linesize[0] + (m_x + i) * 3 + 2] * (1- logoAlpha) +
B * logoAlpha;
}
}
}
}
3、工程下载