|
|
|
@ -85,6 +85,85 @@ |
|
|
|
|
#define OUTPUT_DEQUEUE_TIMEOUT_US 8000 |
|
|
|
|
#define OUTPUT_DEQUEUE_BLOCK_TIMEOUT_US 1000000 |
|
|
|
|
|
|
|
|
|
enum { |
|
|
|
|
COLOR_RANGE_FULL = 0x1, |
|
|
|
|
COLOR_RANGE_LIMITED = 0x2, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
static enum AVColorRange mcdec_get_color_range(int color_range) |
|
|
|
|
{ |
|
|
|
|
switch (color_range) { |
|
|
|
|
case COLOR_RANGE_FULL: |
|
|
|
|
return AVCOL_RANGE_JPEG; |
|
|
|
|
case COLOR_RANGE_LIMITED: |
|
|
|
|
return AVCOL_RANGE_MPEG; |
|
|
|
|
default: |
|
|
|
|
return AVCOL_RANGE_UNSPECIFIED; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
enum { |
|
|
|
|
COLOR_STANDARD_BT709 = 0x1, |
|
|
|
|
COLOR_STANDARD_BT601_PAL = 0x2, |
|
|
|
|
COLOR_STANDARD_BT601_NTSC = 0x4, |
|
|
|
|
COLOR_STANDARD_BT2020 = 0x6, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
static enum AVColorSpace mcdec_get_color_space(int color_standard) |
|
|
|
|
{ |
|
|
|
|
switch (color_standard) { |
|
|
|
|
case COLOR_STANDARD_BT709: |
|
|
|
|
return AVCOL_SPC_BT709; |
|
|
|
|
case COLOR_STANDARD_BT601_PAL: |
|
|
|
|
return AVCOL_SPC_BT470BG; |
|
|
|
|
case COLOR_STANDARD_BT601_NTSC: |
|
|
|
|
return AVCOL_SPC_SMPTE170M; |
|
|
|
|
case COLOR_STANDARD_BT2020: |
|
|
|
|
return AVCOL_SPC_BT2020_NCL; |
|
|
|
|
default: |
|
|
|
|
return AVCOL_SPC_UNSPECIFIED; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static enum AVColorPrimaries mcdec_get_color_pri(int color_standard) |
|
|
|
|
{ |
|
|
|
|
switch (color_standard) { |
|
|
|
|
case COLOR_STANDARD_BT709: |
|
|
|
|
return AVCOL_PRI_BT709; |
|
|
|
|
case COLOR_STANDARD_BT601_PAL: |
|
|
|
|
return AVCOL_PRI_BT470BG; |
|
|
|
|
case COLOR_STANDARD_BT601_NTSC: |
|
|
|
|
return AVCOL_PRI_SMPTE170M; |
|
|
|
|
case COLOR_STANDARD_BT2020: |
|
|
|
|
return AVCOL_PRI_BT2020; |
|
|
|
|
default: |
|
|
|
|
return AVCOL_PRI_UNSPECIFIED; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
enum { |
|
|
|
|
COLOR_TRANSFER_LINEAR = 0x1, |
|
|
|
|
COLOR_TRANSFER_SDR_VIDEO = 0x3, |
|
|
|
|
COLOR_TRANSFER_ST2084 = 0x6, |
|
|
|
|
COLOR_TRANSFER_HLG = 0x7, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
static enum AVColorTransferCharacteristic mcdec_get_color_trc(int color_transfer) |
|
|
|
|
{ |
|
|
|
|
switch (color_transfer) { |
|
|
|
|
case COLOR_TRANSFER_LINEAR: |
|
|
|
|
return AVCOL_TRC_LINEAR; |
|
|
|
|
case COLOR_TRANSFER_SDR_VIDEO: |
|
|
|
|
return AVCOL_TRC_SMPTE170M; |
|
|
|
|
case COLOR_TRANSFER_ST2084: |
|
|
|
|
return AVCOL_TRC_SMPTEST2084; |
|
|
|
|
case COLOR_TRANSFER_HLG: |
|
|
|
|
return AVCOL_TRC_ARIB_STD_B67; |
|
|
|
|
default: |
|
|
|
|
return AVCOL_TRC_UNSPECIFIED; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
enum { |
|
|
|
|
COLOR_FormatYUV420Planar = 0x13, |
|
|
|
|
COLOR_FormatYUV420SemiPlanar = 0x15, |
|
|
|
@ -220,6 +299,10 @@ FF_DISABLE_DEPRECATION_WARNINGS |
|
|
|
|
FF_ENABLE_DEPRECATION_WARNINGS |
|
|
|
|
#endif |
|
|
|
|
frame->pkt_dts = AV_NOPTS_VALUE; |
|
|
|
|
frame->color_range = avctx->color_range; |
|
|
|
|
frame->color_primaries = avctx->color_primaries; |
|
|
|
|
frame->color_trc = avctx->color_trc; |
|
|
|
|
frame->colorspace = avctx->colorspace; |
|
|
|
|
|
|
|
|
|
buffer = av_mallocz(sizeof(AVMediaCodecBuffer)); |
|
|
|
|
if (!buffer) { |
|
|
|
@ -368,6 +451,9 @@ static int mediacodec_dec_parse_format(AVCodecContext *avctx, MediaCodecDecConte |
|
|
|
|
int ret = 0; |
|
|
|
|
int width = 0; |
|
|
|
|
int height = 0; |
|
|
|
|
int color_range = 0; |
|
|
|
|
int color_standard = 0; |
|
|
|
|
int color_transfer = 0; |
|
|
|
|
char *format = NULL; |
|
|
|
|
|
|
|
|
|
if (!s->format) { |
|
|
|
@ -426,6 +512,20 @@ static int mediacodec_dec_parse_format(AVCodecContext *avctx, MediaCodecDecConte |
|
|
|
|
ff_set_sar(avctx, sar); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
AMEDIAFORMAT_GET_INT32(color_range, "color-range", 0); |
|
|
|
|
if (color_range) |
|
|
|
|
avctx->color_range = mcdec_get_color_range(color_range); |
|
|
|
|
|
|
|
|
|
AMEDIAFORMAT_GET_INT32(color_standard, "color-standard", 0); |
|
|
|
|
if (color_standard) { |
|
|
|
|
avctx->colorspace = mcdec_get_color_space(color_standard); |
|
|
|
|
avctx->color_primaries = mcdec_get_color_pri(color_standard); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
AMEDIAFORMAT_GET_INT32(color_transfer, "color-transfer", 0); |
|
|
|
|
if (color_transfer) |
|
|
|
|
avctx->color_trc = mcdec_get_color_trc(color_transfer); |
|
|
|
|
|
|
|
|
|
av_log(avctx, AV_LOG_INFO, |
|
|
|
|
"Output crop parameters top=%d bottom=%d left=%d right=%d, " |
|
|
|
|
"resulting dimensions width=%d height=%d\n", |
|
|
|
|