diff options
author | Rick Kern <kernrj@gmail.com> | 2016-04-27 17:53:14 +0300 |
---|---|---|
committer | wm4 <nfxjfg@googlemail.com> | 2016-05-04 19:40:40 +0300 |
commit | c356b6865d373642685a6b445341ebb37ecbcc91 (patch) | |
tree | eacd829ef396c29d8468579ddcddf7d49e021a70 /libavcodec/videotoolboxenc.c | |
parent | 9d8a38d20b4057a140e132284def9263d8ca80a8 (diff) |
lavc/videotoolboxenc: Support pixel aspect ratio
Signed-off-by: Rick Kern <kernrj@gmail.com>
Diffstat (limited to 'libavcodec/videotoolboxenc.c')
-rw-r--r-- | libavcodec/videotoolboxenc.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/libavcodec/videotoolboxenc.c b/libavcodec/videotoolboxenc.c index 5f027560cd..4a40f3507f 100644 --- a/libavcodec/videotoolboxenc.c +++ b/libavcodec/videotoolboxenc.c @@ -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) { status = VTSessionSetProperty(vtctx->session, kVTCompressionPropertyKey_AllowFrameReordering, |