avcodec: add avpriv_color_frame()
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
af882e1819
commit
a53b144ec0
@ -124,6 +124,9 @@ unsigned int avpriv_toupper4(unsigned int x);
|
||||
*/
|
||||
void ff_init_buffer_info(AVCodecContext *s, AVFrame *frame);
|
||||
|
||||
|
||||
void avpriv_color_frame(AVFrame *frame, const int color[4]);
|
||||
|
||||
/**
|
||||
* Remove and free all side data from packet.
|
||||
*/
|
||||
|
@ -501,6 +501,28 @@ static int video_get_buffer(AVCodecContext *s, AVFrame *pic)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void avpriv_color_frame(AVFrame *frame, const int c[4])
|
||||
{
|
||||
const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(frame->format);
|
||||
int p, y, x;
|
||||
|
||||
av_assert0(desc->flags & PIX_FMT_PLANAR);
|
||||
|
||||
for (p = 0; p<desc->nb_components; p++) {
|
||||
uint8_t *dst = frame->data[p];
|
||||
int is_chroma = p == 1 || p == 2;
|
||||
int bytes = -((-frame->width) >> (is_chroma ? desc->log2_chroma_w : 0));
|
||||
for (y = 0; y<-((-frame->height) >> (is_chroma ? desc->log2_chroma_h : 0)); y++){
|
||||
if (desc->comp[0].depth_minus1 >= 8) {
|
||||
for (x = 0; x<bytes; x++)
|
||||
((uint16_t*)dst)[x] = c[p];
|
||||
}else
|
||||
memset(dst, c[p], bytes);
|
||||
dst += frame->linesize[p];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int avcodec_default_get_buffer(AVCodecContext *avctx, AVFrame *frame)
|
||||
{
|
||||
frame->type = FF_BUFFER_TYPE_INTERNAL;
|
||||
|
Loading…
Reference in New Issue
Block a user