avcodec/vaapi_encode: introduce a base layer for vaapi encode
Since VAAPI and future D3D12VA implementation may share some common parameters, a base layer encode context is introduced as vaapi context's base. Signed-off-by: Tong Wu <tong1.wu@intel.com>
This commit is contained in:
56
libavcodec/hw_base_encode.h
Normal file
56
libavcodec/hw_base_encode.h
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of FFmpeg.
|
||||||
|
*
|
||||||
|
* FFmpeg is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* FFmpeg is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with FFmpeg; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef AVCODEC_HW_BASE_ENCODE_H
|
||||||
|
#define AVCODEC_HW_BASE_ENCODE_H
|
||||||
|
|
||||||
|
#define MAX_DPB_SIZE 16
|
||||||
|
#define MAX_PICTURE_REFERENCES 2
|
||||||
|
#define MAX_REORDER_DELAY 16
|
||||||
|
#define MAX_ASYNC_DEPTH 64
|
||||||
|
#define MAX_REFERENCE_LIST_NUM 2
|
||||||
|
|
||||||
|
enum {
|
||||||
|
PICTURE_TYPE_IDR = 0,
|
||||||
|
PICTURE_TYPE_I = 1,
|
||||||
|
PICTURE_TYPE_P = 2,
|
||||||
|
PICTURE_TYPE_B = 3,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
// Codec supports controlling the subdivision of pictures into slices.
|
||||||
|
FLAG_SLICE_CONTROL = 1 << 0,
|
||||||
|
// Codec only supports constant quality (no rate control).
|
||||||
|
FLAG_CONSTANT_QUALITY_ONLY = 1 << 1,
|
||||||
|
// Codec is intra-only.
|
||||||
|
FLAG_INTRA_ONLY = 1 << 2,
|
||||||
|
// Codec supports B-pictures.
|
||||||
|
FLAG_B_PICTURES = 1 << 3,
|
||||||
|
// Codec supports referencing B-pictures.
|
||||||
|
FLAG_B_PICTURE_REFERENCES = 1 << 4,
|
||||||
|
// Codec supports non-IDR key pictures (that is, key pictures do
|
||||||
|
// not necessarily empty the DPB).
|
||||||
|
FLAG_NON_IDR_KEY_PICTURES = 1 << 5,
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct FFHWBaseEncodeContext {
|
||||||
|
const AVClass *class;
|
||||||
|
} FFHWBaseEncodeContext;
|
||||||
|
|
||||||
|
#endif /* AVCODEC_HW_BASE_ENCODE_H */
|
||||||
|
|
@@ -33,34 +33,27 @@
|
|||||||
|
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "hwconfig.h"
|
#include "hwconfig.h"
|
||||||
|
#include "hw_base_encode.h"
|
||||||
|
|
||||||
struct VAAPIEncodeType;
|
struct VAAPIEncodeType;
|
||||||
struct VAAPIEncodePicture;
|
struct VAAPIEncodePicture;
|
||||||
|
|
||||||
|
// Codec output packet without timestamp delay, which means the
|
||||||
|
// output packet has same PTS and DTS.
|
||||||
|
#define FLAG_TIMESTAMP_NO_DELAY 1 << 6
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
MAX_CONFIG_ATTRIBUTES = 4,
|
MAX_CONFIG_ATTRIBUTES = 4,
|
||||||
MAX_GLOBAL_PARAMS = 4,
|
MAX_GLOBAL_PARAMS = 4,
|
||||||
MAX_DPB_SIZE = 16,
|
|
||||||
MAX_PICTURE_REFERENCES = 2,
|
|
||||||
MAX_REORDER_DELAY = 16,
|
|
||||||
MAX_PARAM_BUFFER_SIZE = 1024,
|
MAX_PARAM_BUFFER_SIZE = 1024,
|
||||||
// A.4.1: table A.6 allows at most 22 tile rows for any level.
|
// A.4.1: table A.6 allows at most 22 tile rows for any level.
|
||||||
MAX_TILE_ROWS = 22,
|
MAX_TILE_ROWS = 22,
|
||||||
// A.4.1: table A.6 allows at most 20 tile columns for any level.
|
// A.4.1: table A.6 allows at most 20 tile columns for any level.
|
||||||
MAX_TILE_COLS = 20,
|
MAX_TILE_COLS = 20,
|
||||||
MAX_ASYNC_DEPTH = 64,
|
|
||||||
MAX_REFERENCE_LIST_NUM = 2,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extern const AVCodecHWConfigInternal *const ff_vaapi_encode_hw_configs[];
|
extern const AVCodecHWConfigInternal *const ff_vaapi_encode_hw_configs[];
|
||||||
|
|
||||||
enum {
|
|
||||||
PICTURE_TYPE_IDR = 0,
|
|
||||||
PICTURE_TYPE_I = 1,
|
|
||||||
PICTURE_TYPE_P = 2,
|
|
||||||
PICTURE_TYPE_B = 3,
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct VAAPIEncodeSlice {
|
typedef struct VAAPIEncodeSlice {
|
||||||
int index;
|
int index;
|
||||||
int row_start;
|
int row_start;
|
||||||
@@ -193,7 +186,8 @@ typedef struct VAAPIEncodeRCMode {
|
|||||||
} VAAPIEncodeRCMode;
|
} VAAPIEncodeRCMode;
|
||||||
|
|
||||||
typedef struct VAAPIEncodeContext {
|
typedef struct VAAPIEncodeContext {
|
||||||
const AVClass *class;
|
// Base context.
|
||||||
|
FFHWBaseEncodeContext base;
|
||||||
|
|
||||||
// Codec-specific hooks.
|
// Codec-specific hooks.
|
||||||
const struct VAAPIEncodeType *codec;
|
const struct VAAPIEncodeType *codec;
|
||||||
@@ -397,25 +391,6 @@ typedef struct VAAPIEncodeContext {
|
|||||||
AVPacket *tail_pkt;
|
AVPacket *tail_pkt;
|
||||||
} VAAPIEncodeContext;
|
} VAAPIEncodeContext;
|
||||||
|
|
||||||
enum {
|
|
||||||
// Codec supports controlling the subdivision of pictures into slices.
|
|
||||||
FLAG_SLICE_CONTROL = 1 << 0,
|
|
||||||
// Codec only supports constant quality (no rate control).
|
|
||||||
FLAG_CONSTANT_QUALITY_ONLY = 1 << 1,
|
|
||||||
// Codec is intra-only.
|
|
||||||
FLAG_INTRA_ONLY = 1 << 2,
|
|
||||||
// Codec supports B-pictures.
|
|
||||||
FLAG_B_PICTURES = 1 << 3,
|
|
||||||
// Codec supports referencing B-pictures.
|
|
||||||
FLAG_B_PICTURE_REFERENCES = 1 << 4,
|
|
||||||
// Codec supports non-IDR key pictures (that is, key pictures do
|
|
||||||
// not necessarily empty the DPB).
|
|
||||||
FLAG_NON_IDR_KEY_PICTURES = 1 << 5,
|
|
||||||
// Codec output packet without timestamp delay, which means the
|
|
||||||
// output packet has same PTS and DTS.
|
|
||||||
FLAG_TIMESTAMP_NO_DELAY = 1 << 6,
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct VAAPIEncodeType {
|
typedef struct VAAPIEncodeType {
|
||||||
// List of supported profiles and corresponding VAAPI profiles.
|
// List of supported profiles and corresponding VAAPI profiles.
|
||||||
// (Must end with AV_PROFILE_UNKNOWN.)
|
// (Must end with AV_PROFILE_UNKNOWN.)
|
||||||
|
Reference in New Issue
Block a user