mirror of https://git.ffmpeg.org/ffmpeg.git
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 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.
|
* Remove and free all side data from packet.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -501,6 +501,28 @@ static int video_get_buffer(AVCodecContext *s, AVFrame *pic)
|
||||||
return 0;
|
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)
|
int avcodec_default_get_buffer(AVCodecContext *avctx, AVFrame *frame)
|
||||||
{
|
{
|
||||||
frame->type = FF_BUFFER_TYPE_INTERNAL;
|
frame->type = FF_BUFFER_TYPE_INTERNAL;
|
||||||
|
|
Loading…
Reference in New Issue