diff mpegvideo.c @ 9155:9e66ada64b76 libavcodec

Add private HW accel data infrastructure.
author gb
date Mon, 09 Mar 2009 08:04:41 +0000
parents 7f0d34340349
children 3a54ad453dbf
line wrap: on
line diff
--- a/mpegvideo.c	Sun Mar 08 17:43:12 2009 +0000
+++ b/mpegvideo.c	Mon Mar 09 08:04:41 2009 +0000
@@ -170,6 +170,7 @@
 static void free_frame_buffer(MpegEncContext *s, Picture *pic)
 {
     s->avctx->release_buffer(s->avctx, (AVFrame*)pic);
+    av_freep(&pic->hwaccel_data_private);
 }
 
 /**
@@ -179,10 +180,22 @@
 {
     int r;
 
+    if (s->avctx->hwaccel) {
+        assert(!pic->hwaccel_data_private);
+        if (s->avctx->hwaccel->priv_data_size) {
+            pic->hwaccel_data_private = av_malloc(s->avctx->hwaccel->priv_data_size);
+            if (!pic->hwaccel_data_private) {
+                av_log(s->avctx, AV_LOG_ERROR, "alloc_frame_buffer() failed (hwaccel private data allocation)\n");
+                return -1;
+            }
+        }
+    }
+
     r = s->avctx->get_buffer(s->avctx, (AVFrame*)pic);
 
     if (r<0 || !pic->age || !pic->type || !pic->data[0]) {
         av_log(s->avctx, AV_LOG_ERROR, "get_buffer() failed (%d %d %d %p)\n", r, pic->age, pic->type, pic->data[0]);
+        av_freep(&pic->hwaccel_data_private);
         return -1;
     }