You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
vp9: add profile names
Reviewed-by: Ronald S. Bultje <rsbultje@gmail.com> Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
@@ -15,6 +15,9 @@ libavutil: 2014-08-09
|
|||||||
|
|
||||||
API changes, most recent first:
|
API changes, most recent first:
|
||||||
|
|
||||||
|
2015-05-04 - xxxxxxx - 56.37.100 - avcodec.h
|
||||||
|
Add FF_PROFILE_VP9_0 and FF_PROFILE_VP9_1.
|
||||||
|
|
||||||
2015-xx-xx - xxxxxxx - lavf 56.xx.xxx - avformat.h
|
2015-xx-xx - xxxxxxx - lavf 56.xx.xxx - avformat.h
|
||||||
Add AVFMT_FLAG_FAST_SEEK flag. Some formats (initially mp3) use it to enable
|
Add AVFMT_FLAG_FAST_SEEK flag. Some formats (initially mp3) use it to enable
|
||||||
fast, but inaccurate seeking.
|
fast, but inaccurate seeking.
|
||||||
|
@@ -2912,6 +2912,9 @@ typedef struct AVCodecContext {
|
|||||||
#define FF_PROFILE_HEVC_MAIN_STILL_PICTURE 3
|
#define FF_PROFILE_HEVC_MAIN_STILL_PICTURE 3
|
||||||
#define FF_PROFILE_HEVC_REXT 4
|
#define FF_PROFILE_HEVC_REXT 4
|
||||||
|
|
||||||
|
#define FF_PROFILE_VP9_0 0
|
||||||
|
#define FF_PROFILE_VP9_1 1
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* level
|
* level
|
||||||
* - encoding: Set by user.
|
* - encoding: Set by user.
|
||||||
|
@@ -29,7 +29,7 @@
|
|||||||
#include "libavutil/version.h"
|
#include "libavutil/version.h"
|
||||||
|
|
||||||
#define LIBAVCODEC_VERSION_MAJOR 56
|
#define LIBAVCODEC_VERSION_MAJOR 56
|
||||||
#define LIBAVCODEC_VERSION_MINOR 36
|
#define LIBAVCODEC_VERSION_MINOR 37
|
||||||
#define LIBAVCODEC_VERSION_MICRO 100
|
#define LIBAVCODEC_VERSION_MICRO 100
|
||||||
|
|
||||||
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
||||||
|
@@ -107,7 +107,6 @@ typedef struct VP9Context {
|
|||||||
ptrdiff_t y_stride, uv_stride;
|
ptrdiff_t y_stride, uv_stride;
|
||||||
|
|
||||||
// bitstream header
|
// bitstream header
|
||||||
uint8_t profile;
|
|
||||||
uint8_t keyframe, last_keyframe;
|
uint8_t keyframe, last_keyframe;
|
||||||
uint8_t invisible;
|
uint8_t invisible;
|
||||||
uint8_t use_last_frame_mvs;
|
uint8_t use_last_frame_mvs;
|
||||||
@@ -481,7 +480,7 @@ static enum AVPixelFormat read_colorspace_details(AVCodecContext *ctx)
|
|||||||
|
|
||||||
ctx->colorspace = colorspaces[get_bits(&s->gb, 3)];
|
ctx->colorspace = colorspaces[get_bits(&s->gb, 3)];
|
||||||
if (ctx->colorspace == AVCOL_SPC_RGB) { // RGB = profile 1
|
if (ctx->colorspace == AVCOL_SPC_RGB) { // RGB = profile 1
|
||||||
if (s->profile == 1) {
|
if (ctx->profile == 1) {
|
||||||
s->ss_h = s->ss_v = 1;
|
s->ss_h = s->ss_v = 1;
|
||||||
res = AV_PIX_FMT_GBRP;
|
res = AV_PIX_FMT_GBRP;
|
||||||
ctx->color_range = AVCOL_RANGE_JPEG;
|
ctx->color_range = AVCOL_RANGE_JPEG;
|
||||||
@@ -495,7 +494,7 @@ static enum AVPixelFormat read_colorspace_details(AVCodecContext *ctx)
|
|||||||
{ AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV420P },
|
{ AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV420P },
|
||||||
};
|
};
|
||||||
ctx->color_range = get_bits1(&s->gb) ? AVCOL_RANGE_JPEG : AVCOL_RANGE_MPEG;
|
ctx->color_range = get_bits1(&s->gb) ? AVCOL_RANGE_JPEG : AVCOL_RANGE_MPEG;
|
||||||
if (s->profile == 1) {
|
if (ctx->profile == 1) {
|
||||||
s->ss_h = get_bits1(&s->gb);
|
s->ss_h = get_bits1(&s->gb);
|
||||||
s->ss_v = get_bits1(&s->gb);
|
s->ss_v = get_bits1(&s->gb);
|
||||||
if ((res = pix_fmt_for_ss[s->ss_v][s->ss_h]) == AV_PIX_FMT_YUV420P) {
|
if ((res = pix_fmt_for_ss[s->ss_v][s->ss_h]) == AV_PIX_FMT_YUV420P) {
|
||||||
@@ -532,10 +531,10 @@ static int decode_frame_header(AVCodecContext *ctx,
|
|||||||
av_log(ctx, AV_LOG_ERROR, "Invalid frame marker\n");
|
av_log(ctx, AV_LOG_ERROR, "Invalid frame marker\n");
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
}
|
}
|
||||||
s->profile = get_bits1(&s->gb);
|
ctx->profile = get_bits1(&s->gb);
|
||||||
s->profile |= get_bits1(&s->gb) << 1;
|
ctx->profile |= get_bits1(&s->gb) << 1;
|
||||||
if (s->profile > 1) {
|
if (ctx->profile > 1) {
|
||||||
av_log(ctx, AV_LOG_ERROR, "Profile %d is not yet supported\n", s->profile);
|
av_log(ctx, AV_LOG_ERROR, "Profile %d is not yet supported\n", ctx->profile);
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
}
|
}
|
||||||
if (get_bits1(&s->gb)) {
|
if (get_bits1(&s->gb)) {
|
||||||
@@ -569,7 +568,7 @@ static int decode_frame_header(AVCodecContext *ctx,
|
|||||||
av_log(ctx, AV_LOG_ERROR, "Invalid sync code\n");
|
av_log(ctx, AV_LOG_ERROR, "Invalid sync code\n");
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
}
|
}
|
||||||
if (s->profile == 1) {
|
if (ctx->profile == 1) {
|
||||||
if ((fmt = read_colorspace_details(ctx)) < 0)
|
if ((fmt = read_colorspace_details(ctx)) < 0)
|
||||||
return fmt;
|
return fmt;
|
||||||
} else {
|
} else {
|
||||||
@@ -4080,6 +4079,12 @@ static int vp9_decode_update_thread_context(AVCodecContext *dst, const AVCodecCo
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const AVProfile profiles[] = {
|
||||||
|
{ FF_PROFILE_VP9_0, "Profile 0" },
|
||||||
|
{ FF_PROFILE_VP9_1, "Profile 1" },
|
||||||
|
{ FF_PROFILE_UNKNOWN },
|
||||||
|
};
|
||||||
|
|
||||||
AVCodec ff_vp9_decoder = {
|
AVCodec ff_vp9_decoder = {
|
||||||
.name = "vp9",
|
.name = "vp9",
|
||||||
.long_name = NULL_IF_CONFIG_SMALL("Google VP9"),
|
.long_name = NULL_IF_CONFIG_SMALL("Google VP9"),
|
||||||
@@ -4093,4 +4098,5 @@ AVCodec ff_vp9_decoder = {
|
|||||||
.flush = vp9_decode_flush,
|
.flush = vp9_decode_flush,
|
||||||
.init_thread_copy = ONLY_IF_THREADS_ENABLED(vp9_decode_init_thread_copy),
|
.init_thread_copy = ONLY_IF_THREADS_ENABLED(vp9_decode_init_thread_copy),
|
||||||
.update_thread_context = ONLY_IF_THREADS_ENABLED(vp9_decode_update_thread_context),
|
.update_thread_context = ONLY_IF_THREADS_ENABLED(vp9_decode_update_thread_context),
|
||||||
|
.profiles = NULL_IF_CONFIG_SMALL(profiles),
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user