lavc/videotoolboxenc: Support pixel aspect ratio
Signed-off-by: Rick Kern <kernrj@gmail.com>
This commit is contained in:
parent
9d8a38d20b
commit
c356b6865d
@ -748,6 +748,69 @@ static av_cold int vtenc_init(AVCodecContext *avctx)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (avctx->sample_aspect_ratio.num != 0) {
|
||||||
|
CFNumberRef num;
|
||||||
|
CFNumberRef den;
|
||||||
|
CFMutableDictionaryRef par;
|
||||||
|
AVRational *avpar = &avctx->sample_aspect_ratio;
|
||||||
|
|
||||||
|
av_reduce(&avpar->num, &avpar->den,
|
||||||
|
avpar->num, avpar->den,
|
||||||
|
0xFFFFFFFF);
|
||||||
|
|
||||||
|
num = CFNumberCreate(kCFAllocatorDefault,
|
||||||
|
kCFNumberIntType,
|
||||||
|
&avpar->num);
|
||||||
|
|
||||||
|
den = CFNumberCreate(kCFAllocatorDefault,
|
||||||
|
kCFNumberIntType,
|
||||||
|
&avpar->den);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
par = CFDictionaryCreateMutable(kCFAllocatorDefault,
|
||||||
|
2,
|
||||||
|
&kCFCopyStringDictionaryKeyCallBacks,
|
||||||
|
&kCFTypeDictionaryValueCallBacks);
|
||||||
|
|
||||||
|
if (!par || !num || !den) {
|
||||||
|
if (par) CFRelease(par);
|
||||||
|
if (num) CFRelease(num);
|
||||||
|
if (den) CFRelease(den);
|
||||||
|
|
||||||
|
return AVERROR(ENOMEM);
|
||||||
|
}
|
||||||
|
|
||||||
|
CFDictionarySetValue(
|
||||||
|
par,
|
||||||
|
kCMFormatDescriptionKey_PixelAspectRatioHorizontalSpacing,
|
||||||
|
num);
|
||||||
|
|
||||||
|
CFDictionarySetValue(
|
||||||
|
par,
|
||||||
|
kCMFormatDescriptionKey_PixelAspectRatioVerticalSpacing,
|
||||||
|
den);
|
||||||
|
|
||||||
|
status = VTSessionSetProperty(vtctx->session,
|
||||||
|
kVTCompressionPropertyKey_PixelAspectRatio,
|
||||||
|
par);
|
||||||
|
|
||||||
|
CFRelease(par);
|
||||||
|
CFRelease(num);
|
||||||
|
CFRelease(den);
|
||||||
|
|
||||||
|
if (status) {
|
||||||
|
av_log(avctx,
|
||||||
|
AV_LOG_ERROR,
|
||||||
|
"Error setting pixel aspect ratio to %d:%d: %d.\n",
|
||||||
|
avctx->sample_aspect_ratio.num,
|
||||||
|
avctx->sample_aspect_ratio.den,
|
||||||
|
status);
|
||||||
|
|
||||||
|
return AVERROR_EXTERNAL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!vtctx->has_b_frames) {
|
if (!vtctx->has_b_frames) {
|
||||||
status = VTSessionSetProperty(vtctx->session,
|
status = VTSessionSetProperty(vtctx->session,
|
||||||
kVTCompressionPropertyKey_AllowFrameReordering,
|
kVTCompressionPropertyKey_AllowFrameReordering,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user