summaryrefslogtreecommitdiffstats
path: root/libhb/handbrake
diff options
context:
space:
mode:
Diffstat (limited to 'libhb/handbrake')
-rw-r--r--libhb/handbrake/qsv_common.h20
1 files changed, 13 insertions, 7 deletions
diff --git a/libhb/handbrake/qsv_common.h b/libhb/handbrake/qsv_common.h
index cdd48935a..7bca30aed 100644
--- a/libhb/handbrake/qsv_common.h
+++ b/libhb/handbrake/qsv_common.h
@@ -245,15 +245,16 @@ typedef struct QSVFrame {
struct QSVFrame *next;
} QSVFrame;
+#define HB_POOL_FFMPEG_SURFACE_SIZE (64)
#define HB_POOL_SURFACE_SIZE (64)
#define HB_POOL_ENCODER_SIZE (8)
-typedef struct EncQSVFramesContext {
+typedef struct HBQSVFramesContext {
AVBufferRef *hw_frames_ctx;
//void *logctx;
/* The memory ids for the external frames.
- * Refcounted, since we need one reference owned by the QSVFramesContext
+ * Refcounted, since we need one reference owned by the HBQSVFramesContext
* (i.e. by the encoder/decoder) and another one given to the MFX session
* from the frame allocator. */
AVBufferRef *mids_buf;
@@ -261,15 +262,20 @@ typedef struct EncQSVFramesContext {
int nb_mids;
int pool[HB_POOL_SURFACE_SIZE];
void *input_texture;
-} EncQSVFramesContext;
+} HBQSVFramesContext;
/* Full QSV pipeline helpers */
+int hb_qsv_init(int coded_width, int coded_height, enum AVPixelFormat sw_pix_fmt, int extra_hw_frames, AVBufferRef **out_hw_frames_ctx);
+int hb_create_ffmpeg_pool(int coded_width, int coded_height, enum AVPixelFormat sw_pix_fmt, int pool_size, int extra_hw_frames, AVBufferRef **out_hw_frames_ctx);
int hb_qsv_full_path_is_enabled(hb_job_t *job);
AVBufferRef *hb_qsv_create_mids(AVBufferRef *hw_frames_ref);
-hb_buffer_t* hb_qsv_copy_frame(AVFrame *frame, hb_qsv_context *qsv_ctx);
-void hb_qsv_get_free_surface_from_pool(const int start_index, const int end_index, QSVMid **out_mid, mfxFrameSurface1 **out_surface);
-int hb_qsv_replace_surface_mid(const QSVMid *mid, mfxFrameSurface1 *surface);
-int hb_qsv_release_surface_from_pool(const QSVMid *mid);
+hb_buffer_t* hb_qsv_copy_frame(HBQSVFramesContext* hb_qsv_frames_ctx, AVFrame *frame, hb_qsv_context *qsv_ctx, int is_vpp);
+int hb_qsv_get_free_surface_from_pool(HBQSVFramesContext* hb_enc_qsv_frames_ctx, AVFrame* frame, QSVMid** out_mid);
+void hb_qsv_get_free_surface_from_pool_with_range(HBQSVFramesContext* hb_enc_qsv_frames_ctx, const int start_index, const int end_index, QSVMid** out_mid, mfxFrameSurface1** out_surface);
+void hb_qsv_get_mid_by_surface_from_pool(HBQSVFramesContext* hb_enc_qsv_frames_ctx, mfxFrameSurface1 *surface, QSVMid **out_mid);
+int hb_qsv_replace_surface_mid(HBQSVFramesContext* hb_qsv_frames_ctx, const QSVMid *mid, mfxFrameSurface1 *surface);
+int hb_qsv_release_surface_from_pool(HBQSVFramesContext* hb_qsv_frames_ctx, const QSVMid *mid);
+int hb_qsv_release_surface_from_pool_by_surface_pointer(HBQSVFramesContext* hb_enc_qsv_frames_ctx, const mfxFrameSurface1 *surface);
int hb_qsv_get_buffer(AVCodecContext *s, AVFrame *frame, int flags);
enum AVPixelFormat hb_qsv_get_format(AVCodecContext *s, const enum AVPixelFormat *pix_fmts);
int hb_qsv_preset_is_zero_copy_enabled(const hb_dict_t *job_dict);