[FFmpeg-cvslog] vda: set destination image buffer attributes.
Sebastien Zwickert
git at videolan.org
Wed Nov 9 21:29:20 CET 2011
ffmpeg | branch: master | Sebastien Zwickert <dilaroga at free.fr> | Wed Nov 9 21:08:09 2011 +0100| [701e5348d44f22e3bcbb0987cc08f9b80f6af832] | committer: Michael Niedermayer
vda: set destination image buffer attributes.
Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=701e5348d44f22e3bcbb0987cc08f9b80f6af832
---
libavcodec/vda.c | 28 ++++++++++++++++++++++++++--
libavcodec/vda.h | 8 ++++++++
2 files changed, 34 insertions(+), 2 deletions(-)
diff --git a/libavcodec/vda.c b/libavcodec/vda.c
index 5fe8a48..61cb81e 100644
--- a/libavcodec/vda.c
+++ b/libavcodec/vda.c
@@ -114,7 +114,7 @@ static void vda_decoder_callback (void *vda_hw_ctx,
if (NULL == image_buffer)
return;
- if (kCVPixelFormatType_422YpCbCr8 != CVPixelBufferGetPixelFormatType(image_buffer))
+ if (vda_ctx->cv_pix_fmt_type != CVPixelBufferGetPixelFormatType(image_buffer))
return;
new_frame = (vda_frame *)av_mallocz(sizeof(vda_frame));
@@ -164,6 +164,9 @@ int ff_vda_create_decoder(struct vda_context *vda_ctx,
CFNumberRef format;
CFDataRef avc_data;
CFMutableDictionaryRef config_info;
+ CFMutableDictionaryRef buffer_attributes;
+ CFMutableDictionaryRef io_surface_properties;
+ CFNumberRef cv_pix_fmt;
if (av_lockmgr_register(vda_lock_operation))
return -1;
@@ -185,8 +188,26 @@ int ff_vda_create_decoder(struct vda_context *vda_ctx,
CFDictionarySetValue(config_info, kVDADecoderConfiguration_SourceFormat, format);
CFDictionarySetValue(config_info, kVDADecoderConfiguration_avcCData, avc_data);
+ buffer_attributes = (CFDictionaryCreateMutable(kCFAllocatorDefault,
+ 2,
+ &kCFTypeDictionaryKeyCallBacks,
+ &kCFTypeDictionaryValueCallBacks));
+ io_surface_properties = (CFDictionaryCreateMutable(kCFAllocatorDefault,
+ 0,
+ &kCFTypeDictionaryKeyCallBacks,
+ &kCFTypeDictionaryValueCallBacks));
+ cv_pix_fmt = CFNumberCreate(kCFAllocatorDefault,
+ kCFNumberSInt32Type,
+ &vda_ctx->cv_pix_fmt_type);
+ CFDictionarySetValue(buffer_attributes,
+ kCVPixelBufferPixelFormatTypeKey,
+ cv_pix_fmt);
+ CFDictionarySetValue(buffer_attributes,
+ kCVPixelBufferIOSurfacePropertiesKey,
+ io_surface_properties);
+
status = VDADecoderCreate( config_info,
- NULL,
+ buffer_attributes,
(VDADecoderOutputCallback *)vda_decoder_callback,
(void *)vda_ctx,
&vda_ctx->decoder );
@@ -196,6 +217,9 @@ int ff_vda_create_decoder(struct vda_context *vda_ctx,
CFRelease(format);
CFRelease(avc_data);
CFRelease(config_info);
+ CFRelease(io_surface_properties);
+ CFRelease(cv_pix_fmt);
+ CFRelease(buffer_attributes);
if (kVDADecoderNoErr != status)
return status;
diff --git a/libavcodec/vda.h b/libavcodec/vda.h
index 3f70cf2..518bb9b 100644
--- a/libavcodec/vda.h
+++ b/libavcodec/vda.h
@@ -121,6 +121,14 @@ struct vda_context {
* - decoding: Set/Unset by user.
*/
int format;
+
+ /**
+ * The pixel format for output image buffers.
+ *
+ * - encoding: unused
+ * - decoding: Set/Unset by user.
+ */
+ OSType cv_pix_fmt_type;
};
/** Creates the video decoder. */
More information about the ffmpeg-cvslog
mailing list