]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/mediacodecdec_common.c
avutil/frame: Remove deprecated AVFrame.pkt_pts field
[ffmpeg] / libavcodec / mediacodecdec_common.c
index c4e87e270fa83cf195a334548a33eb9b31905859..cb18aed401a051f1bfe59b0f2d463d7f442c692c 100644 (file)
 #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,
@@ -214,12 +293,11 @@ static int mediacodec_wrap_hw_buffer(AVCodecContext *avctx,
     } else {
         frame->pts = info->presentationTimeUs;
     }
-#if FF_API_PKT_PTS
-FF_DISABLE_DEPRECATION_WARNINGS
-    frame->pkt_pts = frame->pts;
-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) {
@@ -303,11 +381,6 @@ static int mediacodec_wrap_sw_buffer(AVCodecContext *avctx,
     } else {
         frame->pts = info->presentationTimeUs;
     }
-#if FF_API_PKT_PTS
-FF_DISABLE_DEPRECATION_WARNINGS
-    frame->pkt_pts = frame->pts;
-FF_ENABLE_DEPRECATION_WARNINGS
-#endif
     frame->pkt_dts = AV_NOPTS_VALUE;
 
     av_log(avctx, AV_LOG_TRACE,
@@ -368,6 +441,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 +502,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",
@@ -525,8 +615,8 @@ int ff_mediacodec_dec_init(AVCodecContext *avctx, MediaCodecDecContext *s,
     if (status < 0) {
         char *desc = ff_AMediaFormat_toString(format);
         av_log(avctx, AV_LOG_ERROR,
-            "Failed to configure codec (status = %d) with format %s\n",
-            status, desc);
+            "Failed to configure codec %s (status = %d) with format %s\n",
+            s->codec_name, status, desc);
         av_freep(&desc);
 
         ret = AVERROR_EXTERNAL;
@@ -537,8 +627,8 @@ int ff_mediacodec_dec_init(AVCodecContext *avctx, MediaCodecDecContext *s,
     if (status < 0) {
         char *desc = ff_AMediaFormat_toString(format);
         av_log(avctx, AV_LOG_ERROR,
-            "Failed to start codec (status = %d) with format %s\n",
-            status, desc);
+            "Failed to start codec %s (status = %d) with format %s\n",
+            s->codec_name, status, desc);
         av_freep(&desc);
         ret = AVERROR_EXTERNAL;
         goto fail;