|
|
|
@@ -421,13 +421,19 @@ void ff_color_frame(AVFrame *frame, const int c[4]) |
|
|
|
int is_chroma = p == 1 || p == 2; |
|
|
|
int bytes = is_chroma ? AV_CEIL_RSHIFT(frame->width, desc->log2_chroma_w) : frame->width; |
|
|
|
int height = is_chroma ? AV_CEIL_RSHIFT(frame->height, desc->log2_chroma_h) : frame->height; |
|
|
|
for (y = 0; y < height; y++) { |
|
|
|
if (desc->comp[0].depth >= 9) { |
|
|
|
((uint16_t*)dst)[0] = c[p]; |
|
|
|
av_memcpy_backptr(dst + 2, 2, bytes - 2); |
|
|
|
}else |
|
|
|
memset(dst, c[p], bytes); |
|
|
|
if (desc->comp[0].depth >= 9) { |
|
|
|
((uint16_t*)dst)[0] = c[p]; |
|
|
|
av_memcpy_backptr(dst + 2, 2, bytes - 2); |
|
|
|
dst += frame->linesize[p]; |
|
|
|
for (y = 1; y < height; y++) { |
|
|
|
memcpy(dst, frame->data[p], 2*bytes); |
|
|
|
dst += frame->linesize[p]; |
|
|
|
} |
|
|
|
} else { |
|
|
|
for (y = 0; y < height; y++) { |
|
|
|
memset(dst, c[p], bytes); |
|
|
|
dst += frame->linesize[p]; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|