Merge remote-tracking branch 'qatar/master'
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 1 Mar 2012 22:11:31 +0000 (23:11 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 1 Mar 2012 22:11:31 +0000 (23:11 +0100)
* qatar/master:
  h264: error out on invalid bitdepth.
  aacsbr: use a swap index for the Y matrix rather than copy buffers.
  huffyuv: do not abort on unknown pix_fmt; instead, return an error.
  lcl: return negative error codes on decode_init() errors.
  rtpenc: Use MB info side data for splitting H263 packets for RFC 2190
  h263enc: Add an option for outputting info about MBs as side data
  avpacket: Add a function for shrinking already allocated side data
  nellymoserdec: Saner and faster IMDCT windowing

Conflicts:
doc/APIchanges
libavcodec/avpacket.c
libavcodec/version.h

Merged-by: Michael Niedermayer <michaelni@gmx.at>
14 files changed:
1  2 
doc/APIchanges
libavcodec/aacsbr.c
libavcodec/avcodec.h
libavcodec/avpacket.c
libavcodec/h264.c
libavcodec/huffyuv.c
libavcodec/lcldec.c
libavcodec/mpegvideo.h
libavcodec/mpegvideo_enc.c
libavcodec/nellymoserdec.c
libavcodec/sbr.h
libavcodec/version.h
libavformat/rtpenc.c
libavformat/rtpenc.h

diff --cc doc/APIchanges
@@@ -13,31 -12,9 +13,31 @@@ libavutil:   2011-04-1
  
  API changes, most recent first:
  
- <<<<<<< HEAD
 +2012-02-21 - xxxxxxx - lavc 54.4.100
 +  Add av_get_pcm_codec() function.
 +
 +2012-02-16 - xxxxxxx - libswr 0.7.100
 +  Add swr_set_matrix() function.
 +
 +2012-02-09 - xxxxxxx - lavu 51.39.100
 +  Add a new installed header libavutil/timestamp.h with timestamp
 +  utilities.
 +
 +2012-02-06 - xxxxxxx - lavu 51.38.100
 +  Add av_parse_ratio() function to parseutils.h.
 +
 +2012-02-06 - xxxxxxx - lavu 51.38.100
 +  Add AV_LOG_MAX_OFFSET macro to log.h.
 +
 +2012-02-02 - xxxxxxx - lavu 51.37.100
 +  Add public timecode helpers.
 +
 +2012-01-24 - xxxxxxx - lavfi 2.60.100
 +  Add avfilter_graph_dump.
 +
- ||||||| merged common ancestors
- =======
+ 2012-xx-xx - xxxxxxx - lavc 54.3.0 - avcodec.h
+   Add av_packet_shrink_side_data.
  2012-xx-xx - xxxxxxx - lavf 54.2.0 - avformat.h
    Add AVStream.attached_pic and AV_DISPOSITION_ATTACHED_PIC,
    used for dealing with attached pictures/cover art.
Simple merge
Simple merge
@@@ -202,80 -197,18 +202,96 @@@ uint8_t* av_packet_get_side_data(AVPack
      return NULL;
  }
  
 +#define FF_MERGE_MARKER 0x8c4d9d108e25e9feULL
 +
 +int av_packet_merge_side_data(AVPacket *pkt){
 +    if(pkt->side_data_elems){
 +        int i;
 +        uint8_t *p;
 +        uint64_t size= pkt->size + 8LL + FF_INPUT_BUFFER_PADDING_SIZE;
 +        AVPacket old= *pkt;
 +        for (i=0; i<old.side_data_elems; i++) {
 +            size += old.side_data[i].size + 5LL;
 +        }
 +        if (size > INT_MAX)
 +            return AVERROR(EINVAL);
 +        p = av_malloc(size);
 +        if (!p)
 +            return AVERROR(ENOMEM);
 +        pkt->data = p;
 +        pkt->destruct = av_destruct_packet;
 +        pkt->size = size - FF_INPUT_BUFFER_PADDING_SIZE;
 +        bytestream_put_buffer(&p, old.data, old.size);
 +        for (i=old.side_data_elems-1; i>=0; i--) {
 +            bytestream_put_buffer(&p, old.side_data[i].data, old.side_data[i].size);
 +            bytestream_put_be32(&p, old.side_data[i].size);
 +            *p++ = old.side_data[i].type | ((i==old.side_data_elems-1)*128);
 +        }
 +        bytestream_put_be64(&p, FF_MERGE_MARKER);
 +        av_assert0(p-pkt->data == pkt->size);
 +        memset(p, 0, FF_INPUT_BUFFER_PADDING_SIZE);
 +        av_free_packet(&old);
 +        pkt->side_data_elems = 0;
 +        pkt->side_data = NULL;
 +        return 1;
 +    }
 +    return 0;
 +}
 +
 +int av_packet_split_side_data(AVPacket *pkt){
 +    if (!pkt->side_data_elems && pkt->size >12 && AV_RB64(pkt->data + pkt->size - 8) == FF_MERGE_MARKER){
 +        int i;
 +        unsigned int size;
 +        uint8_t *p;
 +
 +        p = pkt->data + pkt->size - 8 - 5;
 +        for (i=1; ; i++){
 +            size = AV_RB32(p);
 +            if (size>INT_MAX || p - pkt->data <= size)
 +                return 0;
 +            if (p[4]&128)
 +                break;
 +            p-= size+5;
 +        }
 +
 +        pkt->side_data = av_malloc(i * sizeof(*pkt->side_data));
 +        if (!pkt->side_data)
 +            return AVERROR(ENOMEM);
 +
 +        p= pkt->data + pkt->size - 8 - 5;
 +        for (i=0; ; i++){
 +            size= AV_RB32(p);
 +            av_assert0(size<=INT_MAX && p - pkt->data > size);
 +            pkt->side_data[i].data = av_malloc(size + FF_INPUT_BUFFER_PADDING_SIZE);
 +            pkt->side_data[i].size = size;
 +            pkt->side_data[i].type = p[4]&127;
 +            if (!pkt->side_data[i].data)
 +                return AVERROR(ENOMEM);
 +            memcpy(pkt->side_data[i].data, p-size, size);
 +            pkt->size -= size + 5;
 +            if(p[4]&128)
 +                break;
 +            p-= size+5;
 +        }
 +        pkt->size -= 8;
 +        pkt->side_data_elems = i+1;
 +        return 1;
 +    }
 +    return 0;
 +}
++
+ int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
+                                int size)
+ {
+     int i;
+     for (i = 0; i < pkt->side_data_elems; i++) {
+         if (pkt->side_data[i].type == type) {
+             if (size > pkt->side_data[i].size)
+                 return AVERROR(ENOMEM);
+             pkt->side_data[i].size = size;
+             return 0;
+         }
+     }
+     return AVERROR(ENOENT);
+ }
@@@ -2791,15 -2781,12 +2786,15 @@@ static int decode_slice_header(H264Cont
                  else
                      s->avctx->pix_fmt = PIX_FMT_YUV420P10;
                  break;
-             default:
+             case 8:
                  if (CHROMA444){
 +                    s->avctx->pix_fmt = s->avctx->color_range == AVCOL_RANGE_JPEG ? PIX_FMT_YUVJ444P : PIX_FMT_YUV444P;
                      if (s->avctx->colorspace == AVCOL_SPC_RGB) {
 -                        s->avctx->pix_fmt = PIX_FMT_GBRP;
 -                    } else
 -                        s->avctx->pix_fmt = s->avctx->color_range == AVCOL_RANGE_JPEG ? PIX_FMT_YUVJ444P : PIX_FMT_YUV444P;
 +                       s->avctx->pix_fmt = PIX_FMT_GBR24P;
 +                       av_log(h->s.avctx, AV_LOG_DEBUG, "Detected GBR colorspace.\n");
 +                    } else if (s->avctx->colorspace == AVCOL_SPC_YCGCO) {
 +                        av_log(h->s.avctx, AV_LOG_WARNING, "Detected unsupported YCgCo colorspace.\n");
 +                    }
                  } else if (CHROMA422) {
                      s->avctx->pix_fmt = s->avctx->color_range == AVCOL_RANGE_JPEG ? PIX_FMT_YUVJ422P : PIX_FMT_YUV422P;
                  }else{
Simple merge
@@@ -485,10 -479,9 +485,10 @@@ static av_cold int decode_init(AVCodecC
      unsigned int max_basesize = FFALIGN(avctx->width, 4) * FFALIGN(avctx->height, 4) + AV_LZO_OUTPUT_PADDING;
      unsigned int max_decomp_size;
  
 +    avcodec_get_frame_defaults(&c->pic);
      if (avctx->extradata_size < 8) {
          av_log(avctx, AV_LOG_ERROR, "Extradata size too small.\n");
-         return 1;
+         return AVERROR_INVALIDDATA;
      }
  
      /* Check codec type */
Simple merge
@@@ -43,8 -43,8 +43,9 @@@
  #include "flv.h"
  #include "mpeg4video.h"
  #include "internal.h"
+ #include "bytestream.h"
  #include <limits.h>
 +#include "sp5x.h"
  
  //#undef NDEBUG
  //#include <assert.h>
@@@ -1435,8 -1425,14 +1436,14 @@@ int ff_MPV_encode_picture(AVCodecContex
      /* output? */
      if (s->new_picture.f.data[0]) {
          if (!pkt->data &&
 -            (ret = ff_alloc_packet(pkt, s->mb_width*s->mb_height*MAX_MB_BYTES)) < 0)
 +            (ret = ff_alloc_packet(pkt, s->mb_width*s->mb_height*(MAX_MB_BYTES+100)+10000)) < 0)
              return ret;
+         if (s->mb_info) {
+             s->mb_info_ptr = av_packet_new_side_data(pkt,
+                                  AV_PKT_DATA_H263_MB_INFO,
+                                  s->mb_width*s->mb_height*12);
+             s->prev_mb_info = s->last_mb_info = s->mb_info_size = 0;
+         }
  
          for (i = 0; i < context_count; i++) {
              int start_y = s->thread_context[i]->start_mb_y;
Simple merge
Simple merge
@@@ -21,8 -21,8 +21,8 @@@
  #define AVCODEC_VERSION_H
  
  #define LIBAVCODEC_VERSION_MAJOR 54
--#define LIBAVCODEC_VERSION_MINOR  4
 -#define LIBAVCODEC_VERSION_MICRO  0
++#define LIBAVCODEC_VERSION_MINOR  5
 +#define LIBAVCODEC_VERSION_MICRO 100
  
  #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
                                                 LIBAVCODEC_VERSION_MINOR, \
Simple merge
Simple merge