Skip to content

Commit

Permalink
Use AV_PIX_FMT_FLAG_ALPHA for detecting transparency where nb_compone…
Browse files Browse the repository at this point in the history
…nts was used

Temporarily keep the old method for ffmpeg_filters.c choose_pix_fmt and
avfiltergraph.c pick_format() until a paletted pixel format without alpha is
introduced.

Signed-off-by: Marton Balint <[email protected]>
  • Loading branch information
cus committed Apr 30, 2018
1 parent 56b081d commit 7033654
Show file tree
Hide file tree
Showing 4 changed files with 5 additions and 3 deletions.
1 change: 1 addition & 0 deletions fftools/ffmpeg_filter.c
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ enum AVPixelFormat choose_pixel_fmt(AVStream *st, AVCodecContext *enc_ctx, AVCod
if (codec && codec->pix_fmts) {
const enum AVPixelFormat *p = codec->pix_fmts;
const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(target);
//FIXME: This should check for AV_PIX_FMT_FLAG_ALPHA after PAL8 pixel format without alpha is implemented
int has_alpha = desc ? desc->nb_components % 2 == 0 : 0;
enum AVPixelFormat best= AV_PIX_FMT_NONE;

Expand Down
4 changes: 2 additions & 2 deletions libavcodec/ffv1enc.c
Original file line number Diff line number Diff line change
Expand Up @@ -624,7 +624,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
case AV_PIX_FMT_YUVA420P:
s->chroma_planes = desc->nb_components < 3 ? 0 : 1;
s->colorspace = 0;
s->transparency = desc->nb_components == 4 || desc->nb_components == 2;
s->transparency = !!(desc->flags & AV_PIX_FMT_FLAG_ALPHA);
if (!avctx->bits_per_raw_sample && !s->bits_per_raw_sample)
s->bits_per_raw_sample = 8;
else if (!s->bits_per_raw_sample)
Expand Down Expand Up @@ -676,7 +676,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
s->bits_per_raw_sample = 16;
else if (!s->bits_per_raw_sample)
s->bits_per_raw_sample = avctx->bits_per_raw_sample;
s->transparency = desc->nb_components == 4 || desc->nb_components == 2;
s->transparency = !!(desc->flags & AV_PIX_FMT_FLAG_ALPHA);
s->colorspace = 1;
s->chroma_planes = 1;
if (s->bits_per_raw_sample >= 16) {
Expand Down
1 change: 1 addition & 0 deletions libavfilter/avfiltergraph.c
Original file line number Diff line number Diff line change
Expand Up @@ -679,6 +679,7 @@ static int pick_format(AVFilterLink *link, AVFilterLink *ref)

if (link->type == AVMEDIA_TYPE_VIDEO) {
if(ref && ref->type == AVMEDIA_TYPE_VIDEO){
//FIXME: This should check for AV_PIX_FMT_FLAG_ALPHA after PAL8 pixel format without alpha is implemented
int has_alpha= av_pix_fmt_desc_get(ref->format)->nb_components % 2 == 0;
enum AVPixelFormat best= AV_PIX_FMT_NONE;
int i;
Expand Down
2 changes: 1 addition & 1 deletion libavutil/pixdesc.c
Original file line number Diff line number Diff line change
Expand Up @@ -2482,7 +2482,7 @@ enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt)
#define FF_COLOR_XYZ 4

#define pixdesc_has_alpha(pixdesc) \
((pixdesc)->nb_components == 2 || (pixdesc)->nb_components == 4 || (pixdesc)->flags & AV_PIX_FMT_FLAG_PAL)
((pixdesc)->flags & AV_PIX_FMT_FLAG_ALPHA)


static int get_color_type(const AVPixFmtDescriptor *desc) {
Expand Down

0 comments on commit 7033654

Please sign in to comment.