Merge commit 'dd2d3b766b20196d0b65a82e3d897ccecbf7adb8'
authorMichael Niedermayer <michaelni@gmx.at>
Sun, 11 May 2014 22:21:44 +0000 (00:21 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 11 May 2014 22:21:44 +0000 (00:21 +0200)
* commit 'dd2d3b766b20196d0b65a82e3d897ccecbf7adb8':
  lavc: Add hwaccel private data and init/uninit callbacks

Conflicts:
libavcodec/avcodec.h
libavcodec/internal.h
libavcodec/pthread_frame.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/avcodec.h
libavcodec/internal.h
libavcodec/pthread_frame.c
libavcodec/utils.c

@@@ -3298,15 -3001,27 +3298,38 @@@ typedef struct AVHWAccel 
      int frame_priv_data_size;
  
      /**
 +     * Called for every Macroblock in a slice.
 +     *
 +     * XvMC uses it to replace the ff_MPV_decode_mb().
 +     * Instead of decoding to raw picture, MB parameters are
 +     * stored in an array provided by the video driver.
 +     *
 +     * @param s the mpeg context
 +     */
 +    void (*decode_mb)(struct MpegEncContext *s);
++
++    /**
+      * Initialize the hwaccel private data.
+      *
+      * This will be called from ff_get_format(), after hwaccel and
+      * hwaccel_context are set and the hwaccel private data in AVCodecInternal
+      * is allocated.
+      */
+     int (*init)(AVCodecContext *avctx);
+     /**
+      * Uninitialize the hwaccel private data.
+      *
+      * This will be called from get_format() or avcodec_close(), after hwaccel
+      * and hwaccel_context are already uninitialized.
+      */
+     int (*uninit)(AVCodecContext *avctx);
+     /**
+      * Size of the private data to allocate in
+      * AVCodecInternal.hwaccel_priv_data.
+      */
+     int priv_data_size;
  } AVHWAccel;
  
  /**
@@@ -111,17 -97,9 +111,22 @@@ typedef struct AVCodecInternal 
      AVPacket *pkt;
  
      /**
 +     * temporary buffer used for encoders to store their bitstream
 +     */
 +    uint8_t *byte_buffer;
 +    unsigned int byte_buffer_size;
 +
 +    void *frame_thread_encoder;
 +
 +    /**
 +     * Number of audio samples to skip at the start of the next decoded frame
 +     */
 +    int skip_samples;
++
++    /**
+      * hwaccel-specific private data
+      */
+     void *hwaccel_priv_data;
  } AVCodecInternal;
  
  struct AVCodecDefault {
@@@ -221,11 -206,7 +221,12 @@@ static int update_context_from_thread(A
  
          dst->hwaccel = src->hwaccel;
          dst->hwaccel_context = src->hwaccel_context;
 +
 +        dst->channels       = src->channels;
 +        dst->sample_rate    = src->sample_rate;
 +        dst->sample_fmt     = src->sample_fmt;
 +        dst->channel_layout = src->channel_layout;
+         dst->internal->hwaccel_priv_data = src->internal->hwaccel_priv_data;
      }
  
      if (for_user) {
Simple merge