Merge commit '9301486408a480629336af4d7fd873c0f28fb2d5'
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 28 Aug 2014 20:23:01 +0000 (22:23 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 28 Aug 2014 20:23:01 +0000 (22:23 +0200)
* commit '9301486408a480629336af4d7fd873c0f28fb2d5':
  avcodec: add stream-level stereo3d side data

Conflicts:
doc/APIchanges
libavcodec/avcodec.h
libavcodec/utils.c
libavcodec/version.h

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
doc/APIchanges
libavcodec/avcodec.h
libavcodec/utils.c
libavcodec/version.h
libavformat/dump.c

diff --cc doc/APIchanges
@@@ -15,27 -13,16 +15,30 @@@ libavutil:     2014-08-0
  
  API changes, most recent first:
  
 -2014-08-xx - xxxxxxx - lavf 56.03.0 - avformat.h
+ 2014-08-xx - xxxxxxx - lavc 56.1.0 - avcodec.h
+   Add AV_PKT_DATA_STEREO3D to export container-level stereo3d information.
 +2014-08-25 - 215db29 / b263f8f - lavf 56.3.100 / 56.3.0 - avformat.h
    Add AVFormatContext.max_ts_probe.
  
 -2014-08-13 - 8ddc326 - lavu 54.03.0 - mem.h
 +2014-08-23 - 8fc9bd0 - lavu 54.7.100 - dict.h
 +  AV_DICT_DONT_STRDUP_KEY and AV_DICT_DONT_STRDUP_VAL arguments are now
 +  freed even on error. This is consistent with the behaviour all users
 +  of it we could find expect.
 +
 +2014-08-21 - 980a5b0 - lavu 54.6.100 - frame.h motion_vector.h
 +  Add AV_FRAME_DATA_MOTION_VECTORS side data and AVMotionVector structure
 +
 +2014-08-16 - b7d5e01 - lswr 1.1.100 - swresample.h
 +  Add AVFrame based API
 +
 +2014-08-16 - c2829dc - lavu 54.4.100 - dict.h
 +  Add av_dict_set_int helper function.
 +
 +2014-08-13 - c8571c6 / 8ddc326 - lavu 54.3.100 / 54.3.0 - mem.h
    Add av_strndup().
  
 -2014-08-13 - a8c104a - lavu 54.02.0 - opt.h
 +2014-08-13 - 2ba4577 / a8c104a - lavu 54.2.100 / 54.2.0 - opt.h
    Add av_opt_get_dict_val/set_dict_val with AV_OPT_TYPE_DICT to support
    dictionary types being set as options.
  
@@@ -1027,69 -912,11 +1027,75 @@@ enum AVPacketSideDataType 
       */
      AV_PKT_DATA_DISPLAYMATRIX,
  
+     /*
+      * This side data should be associated with a video stream and contains
+      * Stereoscopic 3D information in form of the AVStereo3D struct.
+      */
+     AV_PKT_DATA_STEREO3D,
++
 +    /**
 +     * Recommmends skipping the specified number of samples
 +     * @code
 +     * u32le number of samples to skip from start of this packet
 +     * u32le number of samples to skip from end of this packet
 +     * u8    reason for start skip
 +     * u8    reason for end   skip (0=padding silence, 1=convergence)
 +     * @endcode
 +     */
 +    AV_PKT_DATA_SKIP_SAMPLES=70,
 +
 +    /**
 +     * An AV_PKT_DATA_JP_DUALMONO side data packet indicates that
 +     * the packet may contain "dual mono" audio specific to Japanese DTV
 +     * and if it is true, recommends only the selected channel to be used.
 +     * @code
 +     * u8    selected channels (0=mail/left, 1=sub/right, 2=both)
 +     * @endcode
 +     */
 +    AV_PKT_DATA_JP_DUALMONO,
 +
 +    /**
 +     * A list of zero terminated key/value strings. There is no end marker for
 +     * the list, so it is required to rely on the side data size to stop.
 +     */
 +    AV_PKT_DATA_STRINGS_METADATA,
 +
 +    /**
 +     * Subtitle event position
 +     * @code
 +     * u32le x1
 +     * u32le y1
 +     * u32le x2
 +     * u32le y2
 +     * @endcode
 +     */
 +    AV_PKT_DATA_SUBTITLE_POSITION,
 +
 +    /**
 +     * Data found in BlockAdditional element of matroska container. There is
 +     * no end marker for the data, so it is required to rely on the side data
 +     * size to recognize the end. 8 byte id (as found in BlockAddId) followed
 +     * by data.
 +     */
 +    AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL,
 +
 +    /**
 +     * The optional first identifier line of a WebVTT cue.
 +     */
 +    AV_PKT_DATA_WEBVTT_IDENTIFIER,
 +
 +    /**
 +     * The optional settings (rendering instructions) that immediately
 +     * follow the timestamp specifier of a WebVTT cue.
 +     */
 +    AV_PKT_DATA_WEBVTT_SETTINGS,
 +
 +    /**
 +     * A list of zero terminated key/value strings. There is no end marker for
 +     * the list, so it is required to rely on the side data size to stop. This
 +     * side data includes updated metadata which appeared in the stream.
 +     */
 +    AV_PKT_DATA_METADATA_UPDATE,
  };
  
  typedef struct AVPacketSideData {
@@@ -724,60 -529,101 +724,70 @@@ FF_ENABLE_DEPRECATION_WARNING
      }
  }
  
 -#if FF_API_GET_BUFFER
 -FF_DISABLE_DEPRECATION_WARNINGS
 -int avcodec_default_get_buffer(AVCodecContext *avctx, AVFrame *frame)
 -{
 -    return avcodec_default_get_buffer2(avctx, frame, 0);
 -}
 -
 -typedef struct CompatReleaseBufPriv {
 -    AVCodecContext avctx;
 -    AVFrame frame;
 -} CompatReleaseBufPriv;
 -
 -static void compat_free_buffer(void *opaque, uint8_t *data)
 -{
 -    CompatReleaseBufPriv *priv = opaque;
 -    if (priv->avctx.release_buffer)
 -        priv->avctx.release_buffer(&priv->avctx, &priv->frame);
 -    av_freep(&priv);
 -}
 -
 -static void compat_release_buffer(void *opaque, uint8_t *data)
 -{
 -    AVBufferRef *buf = opaque;
 -    av_buffer_unref(&buf);
 -}
 -FF_ENABLE_DEPRECATION_WARNINGS
 -#endif
 -
 -int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame)
 +int ff_init_buffer_info(AVCodecContext *avctx, AVFrame *frame)
  {
      AVPacket *pkt = avctx->internal->pkt;
 -    uint8_t *packet_sd;
 -    int size;
 -    AVFrameSideData *frame_sd;
 -
 -    frame->color_primaries = avctx->color_primaries;
 -    frame->color_trc       = avctx->color_trc;
 -    frame->colorspace      = avctx->colorspace;
 -    frame->color_range     = avctx->color_range;
 -    frame->chroma_location = avctx->chroma_sample_location;
  
 -    frame->reordered_opaque = avctx->reordered_opaque;
 -    if (!pkt) {
 -        frame->pkt_pts = AV_NOPTS_VALUE;
 -        return 0;
 -    }
 +    if (pkt) {
 +        uint8_t *packet_sd;
 +        AVFrameSideData *frame_sd;
 +        int size;
 +        frame->pkt_pts = pkt->pts;
 +        av_frame_set_pkt_pos     (frame, pkt->pos);
 +        av_frame_set_pkt_duration(frame, pkt->duration);
 +        av_frame_set_pkt_size    (frame, pkt->size);
 +
 +        /* copy the replaygain data to the output frame */
 +        packet_sd = av_packet_get_side_data(pkt, AV_PKT_DATA_REPLAYGAIN, &size);
 +        if (packet_sd) {
 +            frame_sd = av_frame_new_side_data(frame, AV_FRAME_DATA_REPLAYGAIN, size);
 +            if (!frame_sd)
 +                return AVERROR(ENOMEM);
 +
 +            memcpy(frame_sd->data, packet_sd, size);
 +        }
  
 -    frame->pkt_pts = pkt->pts;
 +        /* copy the displaymatrix to the output frame */
 +        packet_sd = av_packet_get_side_data(pkt, AV_PKT_DATA_DISPLAYMATRIX, &size);
 +        if (packet_sd) {
 +            frame_sd = av_frame_new_side_data(frame, AV_FRAME_DATA_DISPLAYMATRIX, size);
 +            if (!frame_sd)
 +                return AVERROR(ENOMEM);
  
 -    /* copy the replaygain data to the output frame */
 -    packet_sd = av_packet_get_side_data(pkt, AV_PKT_DATA_REPLAYGAIN, &size);
 -    if (packet_sd) {
 -        frame_sd = av_frame_new_side_data(frame, AV_FRAME_DATA_REPLAYGAIN, size);
 -        if (!frame_sd)
 -            return AVERROR(ENOMEM);
 -
 -        memcpy(frame_sd->data, packet_sd, size);
 -    }
 -    /* copy the displaymatrix to the output frame */
 -    packet_sd = av_packet_get_side_data(pkt, AV_PKT_DATA_DISPLAYMATRIX, &size);
 -    if (packet_sd) {
 -        frame_sd = av_frame_new_side_data(frame, AV_FRAME_DATA_DISPLAYMATRIX, size);
 -        if (!frame_sd)
 -            return AVERROR(ENOMEM);
 +            memcpy(frame_sd->data, packet_sd, size);
 +        }
 -        memcpy(frame_sd->data, packet_sd, size);
 -    }
 -    /* copy the stereo3d format to the output frame */
 -    packet_sd = av_packet_get_side_data(pkt, AV_PKT_DATA_STEREO3D, &size);
 -    if (packet_sd) {
 -        frame_sd = av_frame_new_side_data(frame, AV_FRAME_DATA_STEREO3D, size);
 -        if (!frame_sd)
 -            return AVERROR(ENOMEM);
++        /* copy the stereo3d format to the output frame */
++        packet_sd = av_packet_get_side_data(pkt, AV_PKT_DATA_STEREO3D, &size);
++        if (packet_sd) {
++            frame_sd = av_frame_new_side_data(frame, AV_FRAME_DATA_STEREO3D, size);
++            if (!frame_sd)
++                return AVERROR(ENOMEM);
 -        memcpy(frame_sd->data, packet_sd, size);
++            memcpy(frame_sd->data, packet_sd, size);
++        }
 +    } else {
 +        frame->pkt_pts = AV_NOPTS_VALUE;
 +        av_frame_set_pkt_pos     (frame, -1);
 +        av_frame_set_pkt_duration(frame, 0);
 +        av_frame_set_pkt_size    (frame, -1);
      }
 +    frame->reordered_opaque = avctx->reordered_opaque;
  
 -    return 0;
 -}
 -
 -int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
 -{
 -    const AVHWAccel *hwaccel = avctx->hwaccel;
 -    int override_dimensions = 1;
 -    int ret;
 -
 -    switch (avctx->codec_type) {
 +    if (frame->color_primaries == AVCOL_PRI_UNSPECIFIED)
 +        frame->color_primaries = avctx->color_primaries;
 +    if (frame->color_trc == AVCOL_TRC_UNSPECIFIED)
 +        frame->color_trc = avctx->color_trc;
 +    if (av_frame_get_colorspace(frame) == AVCOL_SPC_UNSPECIFIED)
 +        av_frame_set_colorspace(frame, avctx->colorspace);
 +    if (av_frame_get_color_range(frame) == AVCOL_RANGE_UNSPECIFIED)
 +        av_frame_set_color_range(frame, avctx->color_range);
 +    if (frame->chroma_location == AVCHROMA_LOC_UNSPECIFIED)
 +        frame->chroma_location = avctx->chroma_sample_location;
 +
 +    switch (avctx->codec->type) {
      case AVMEDIA_TYPE_VIDEO:
 -        if (frame->width <= 0 || frame->height <= 0) {
 -            frame->width  = FFMAX(avctx->width, avctx->coded_width);
 -            frame->height = FFMAX(avctx->height, avctx->coded_height);
 -            override_dimensions = 0;
 -        }
 -        if (frame->format < 0)
 -            frame->format              = avctx->pix_fmt;
 +        frame->format              = avctx->pix_fmt;
          if (!frame->sample_aspect_ratio.num)
              frame->sample_aspect_ratio = avctx->sample_aspect_ratio;
  
@@@ -29,8 -29,8 +29,8 @@@
  #include "libavutil/version.h"
  
  #define LIBAVCODEC_VERSION_MAJOR 56
- #define LIBAVCODEC_VERSION_MINOR  0
- #define LIBAVCODEC_VERSION_MICRO 101
+ #define LIBAVCODEC_VERSION_MINOR  1
 -#define LIBAVCODEC_VERSION_MICRO  0
++#define LIBAVCODEC_VERSION_MICRO 100
  
  #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
                                                 LIBAVCODEC_VERSION_MINOR, \
@@@ -27,8 -26,8 +27,9 @@@
  #include "libavutil/intreadwrite.h"
  #include "libavutil/log.h"
  #include "libavutil/mathematics.h"
 +#include "libavutil/avstring.h"
  #include "libavutil/replaygain.h"
+ #include "libavutil/stereo3d.h"
  
  #include "avformat.h"