ffmpeg | branch: master | Mark Thompson <s...@jkqxz.net> | Mon Apr 13 16:33:15 
2020 +0100| [858eba0ca4b680ce23c4eebd1460db333989b0a4] | committer: Mark 
Thompson

lavc: Extend hardware config metadata to encoders

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=858eba0ca4b680ce23c4eebd1460db333989b0a4
---

 libavcodec/avcodec.h  | 11 ++++++++++-
 libavcodec/hwconfig.h | 18 ++++++++++++++++++
 2 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index b79b025e53..2bce39f94b 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -2541,6 +2541,10 @@ enum {
      * AVCodecContext.hw_frames_ctx should be set to a suitable frames
      * context inside the get_format() callback.  The frames context
      * must have been created on a device of the specified type.
+     *
+     * When selecting this format for an encoder,
+     * AVCodecContext.hw_frames_ctx should be set to the context which
+     * will be used for the input frames before calling avcodec_open2().
      */
     AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX = 0x02,
     /**
@@ -2563,7 +2567,12 @@ enum {
 
 typedef struct AVCodecHWConfig {
     /**
-     * A hardware pixel format which the codec can use.
+     * For decoders, a hardware pixel format which that decoder may be
+     * able to decode to if suitable hardware is available.
+     *
+     * For encoders, a pixel format which the encoder may be able to
+     * accept.  If set to AV_PIX_FMT_NONE, this applies to all pixel
+     * formats supported by the codec.
      */
     enum AVPixelFormat pix_fmt;
     /**
diff --git a/libavcodec/hwconfig.h b/libavcodec/hwconfig.h
index 4199ffdd50..f421dc909f 100644
--- a/libavcodec/hwconfig.h
+++ b/libavcodec/hwconfig.h
@@ -81,4 +81,22 @@ typedef struct AVCodecHWConfigInternal {
 #define HWACCEL_XVMC(codec) \
     HW_CONFIG_HWACCEL(0, 0, 1, XVMC,         NONE,         ff_ ## codec ## 
_xvmc_hwaccel)
 
+#define HW_CONFIG_ENCODER(device, frames, ad_hoc, format, device_type_) \
+    &(const AVCodecHWConfigInternal) { \
+        .public          = { \
+            .pix_fmt     = AV_PIX_FMT_ ## format, \
+            .methods     = (device ? AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX : 
0) | \
+                           (frames ? AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX : 
0) | \
+                           (ad_hoc ? AV_CODEC_HW_CONFIG_METHOD_AD_HOC        : 
0),  \
+            .device_type = AV_HWDEVICE_TYPE_ ## device_type_, \
+        }, \
+        .hwaccel         = NULL, \
+    }
+
+#define HW_CONFIG_ENCODER_DEVICE(format, device_type_) \
+    HW_CONFIG_ENCODER(1, 0, 0, format, device_type_)
+
+#define HW_CONFIG_ENCODER_FRAMES(format, device_type_) \
+    HW_CONFIG_ENCODER(0, 1, 0, format, device_type_)
+
 #endif /* AVCODEC_HWCONFIG_H */

_______________________________________________
ffmpeg-cvslog mailing list
ffmpeg-cvslog@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog

To unsubscribe, visit link above, or email
ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to