Browse Source

avcodec/videotoolboxenc: add rc_max_bitrate control into videotoolbox

add kVTCompressionPropertyKey_DataRateLimits support by rc_max_bitrate

Reviewed-by: Rick Kern <kernrj@gmail.com>
Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
tags/n3.3
Steven Liu Rick Kern 8 years ago
parent
commit
0052f3f527
1 changed files with 47 additions and 0 deletions
  1. +47
    -0
      libavcodec/videotoolboxenc.c

+ 47
- 0
libavcodec/videotoolboxenc.c View File

@@ -898,7 +898,14 @@ static int vtenc_create_encoder(AVCodecContext *avctx,
{
VTEncContext *vtctx = avctx->priv_data;
SInt32 bit_rate = avctx->bit_rate;
SInt32 max_rate = avctx->rc_max_rate;
CFNumberRef bit_rate_num;
CFNumberRef bytes_per_second;
CFNumberRef one_second;
CFArrayRef data_rate_limits;
int64_t bytes_per_second_value = 0;
int64_t one_second_value = 0;
void *nums[2];

int status = VTCompressionSessionCreate(kCFAllocatorDefault,
avctx->width,
@@ -938,6 +945,46 @@ static int vtenc_create_encoder(AVCodecContext *avctx,
return AVERROR_EXTERNAL;
}

bytes_per_second_value = max_rate >> 3;
bytes_per_second = CFNumberCreate(kCFAllocatorDefault,
kCFNumberSInt64Type,
&bytes_per_second_value);
if (!bytes_per_second) {
return AVERROR(ENOMEM);
}
one_second_value = 1;
one_second = CFNumberCreate(kCFAllocatorDefault,
kCFNumberSInt64Type,
&one_second_value);
if (!one_second) {
CFRelease(bytes_per_second);
return AVERROR(ENOMEM);
}
nums[0] = bytes_per_second;
nums[1] = one_second;
data_rate_limits = CFArrayCreate(kCFAllocatorDefault,
nums,
2,
&kCFTypeArrayCallBacks);

if (!data_rate_limits) {
CFRelease(bytes_per_second);
CFRelease(one_second);
return AVERROR(ENOMEM);
}
status = VTSessionSetProperty(vtctx->session,
kVTCompressionPropertyKey_DataRateLimits,
data_rate_limits);

CFRelease(bytes_per_second);
CFRelease(one_second);
CFRelease(data_rate_limits);

if (status) {
av_log(avctx, AV_LOG_ERROR, "Error setting max bitrate property: %d\n", status);
return AVERROR_EXTERNAL;
}

if (profile_level) {
status = VTSessionSetProperty(vtctx->session,
kVTCompressionPropertyKey_ProfileLevel,


Loading…
Cancel
Save