Merge remote-tracking branch 'qatar/master'
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 2 Nov 2012 13:40:04 +0000 (14:40 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 2 Nov 2012 13:57:36 +0000 (14:57 +0100)
* qatar/master:
  dv1394: Swap the min and max values of the 'standard' option
  rtpdec_vp8: Don't parse fields that aren't used
  lavc: add some AVPacket doxy.
  audiointerleave: deobfuscate a function call.
  rtpdec: factorize identical code used in several handlers
  a64: remove interleaved mode.
  doc: Point to the new location of the c99-to-c89 tool
  decode_audio3: initialize AVFrame
  ws-snd1: set channel layout
  wmavoice: set channel layout
  wmapro: use AVCodecContext.channels instead of keeping a private copy
  wma: do not keep private copies of some AVCodecContext fields

Conflicts:
libavcodec/wmadec.c
libavcodec/wmaenc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
17 files changed:
1  2 
libavcodec/avcodec.h
libavcodec/utils.c
libavcodec/wma.c
libavcodec/wma.h
libavcodec/wmadec.c
libavcodec/wmaenc.c
libavcodec/wmaprodec.c
libavcodec/wmavoice.c
libavcodec/ws-snd1.c
libavformat/a64.c
libavformat/audiointerleave.c
libavformat/rtpdec.c
libavformat/rtpdec.h
libavformat/rtpdec_jpeg.c
libavformat/rtpdec_svq3.c
libavformat/rtpdec_vp8.c
libavformat/rtpdec_xiph.c

@@@ -922,46 -870,30 +922,68 @@@ enum AVPacketSideDataType 
       * @endcode
       */
      AV_PKT_DATA_H263_MB_INFO,
 +
 +    /**
 +     * 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,
  };
  
 - * AVPacket is one of the few structs in Libav, whose size is a part of public
+ /**
+  * This structure stores compressed data. It is typically exported by demuxers
+  * and then passed as input to decoders, or received as output from encoders and
+  * then passed to muxers.
+  *
+  * For video, it should typically contain one compressed frame. For audio it may
+  * contain several compressed frames.
+  *
++ * AVPacket is one of the few structs in FFmpeg, whose size is a part of public
+  * ABI. Thus it may be allocated on stack and no new fields can be added to it
+  * without libavcodec and libavformat major bump.
+  *
+  * The semantics of data ownership depends on the destruct field.
+  * If it is set, the packet data is dynamically allocated and is valid
+  * indefinitely until av_free_packet() is called (which in turn calls the
+  * destruct callback to free the data). If destruct is not set, the packet data
+  * is typically backed by some static buffer somewhere and is only valid for a
+  * limited time (e.g. until the next read call when demuxing).
+  *
+  * The side data is always allocated with av_malloc() and is freed in
+  * av_free_packet().
+  */
  typedef struct AVPacket {
      /**
       * Presentation timestamp in AVStream->time_base units; the time at which
Simple merge
Simple merge
Simple merge
@@@ -813,14 -801,13 +813,14 @@@ static int wma_decode_superframe(AVCode
          s->last_superframe_len = 0;
          return 0;
      }
-     if (buf_size < s->block_align) {
+     if (buf_size < avctx->block_align) {
          av_log(avctx, AV_LOG_ERROR,
                 "Input packet size too small (%d < %d)\n",
-                buf_size, s->block_align);
+                buf_size, avctx->block_align);
          return AVERROR_INVALIDDATA;
      }
-     if(s->block_align)
-         buf_size = s->block_align;
 -    buf_size = avctx->block_align;
++    if(avctx->block_align)
++        buf_size = avctx->block_align;
  
      init_get_bits(&s->gb, buf, buf_size*8);
  
@@@ -78,10 -80,12 +78,11 @@@ static int encode_init(AVCodecContext 
      for(i = 0; i < s->nb_block_sizes; i++)
          ff_mdct_init(&s->mdct_ctx[i], s->frame_len_bits - i + 1, 0, 1.0);
  
-     s->block_align     = avctx->bit_rate * (int64_t)s->frame_len /
+     block_align        = avctx->bit_rate * (int64_t)s->frame_len /
                           (avctx->sample_rate * 8);
-     s->block_align     = FFMIN(s->block_align, MAX_CODED_SUPERFRAME_SIZE);
-     avctx->block_align = s->block_align;
+     block_align        = FFMIN(block_align, MAX_CODED_SUPERFRAME_SIZE);
+     avctx->block_align = block_align;
 -    avctx->bit_rate    = avctx->block_align * 8LL * avctx->sample_rate /
 -                         s->frame_len;
++
      avctx->frame_size = avctx->delay = s->frame_len;
  
  #if FF_API_OLD_ENCODE_AUDIO
@@@ -279,10 -283,10 +280,10 @@@ static int encode_block(WMACodecContex
              }
          }
      } else {
 -        assert(0); //FIXME not implemented
 +        av_assert0(0); //FIXME not implemented
      }
  
-     for(ch = 0; ch < s->nb_channels; ch++) {
+     for (ch = 0; ch < s->avctx->channels; ch++) {
          if (s->channel_coded[ch]) {
              int run, tindex;
              WMACoef *ptr, *eptr;
@@@ -365,27 -369,46 +366,27 @@@ static int encode_superframe(AVCodecCon
          }
      }
  
 -    if ((ret = ff_alloc_packet(avpkt, 2 * MAX_CODED_SUPERFRAME_SIZE))) {
 -        av_log(avctx, AV_LOG_ERROR, "Error getting output packet\n");
 +    if ((ret = ff_alloc_packet2(avctx, avpkt, 2 * MAX_CODED_SUPERFRAME_SIZE)))
          return ret;
 -    }
  
 -#if 1
      total_gain= 128;
      for(i=64; i; i>>=1){
 -        int error = encode_frame(s, s->coefs, avpkt->data, avpkt->size,
 +        error = encode_frame(s, s->coefs, avpkt->data, avpkt->size,
                                   total_gain - i);
 -        if(error<0)
 +        if(error<=0)
              total_gain-= i;
      }
 -#else
 -    total_gain= 90;
 -    best = encode_frame(s, s->coefs, avpkt->data, avpkt->size, total_gain);
 -    for(i=32; i; i>>=1){
 -        int scoreL = encode_frame(s, s->coefs, avpkt->data, avpkt->size, total_gain - i);
 -        int scoreR = encode_frame(s, s->coefs, avpkt->data, avpkt->size, total_gain + i);
 -        av_log(NULL, AV_LOG_ERROR, "%d %d %d (%d)\n", scoreL, best, scoreR, total_gain);
 -        if(scoreL < FFMIN(best, scoreR)){
 -            best = scoreL;
 -            total_gain -= i;
 -        }else if(scoreR < best){
 -            best = scoreR;
 -            total_gain += i;
 -        }
 -    }
 -#endif
  
 -    if ((i = encode_frame(s, s->coefs, avpkt->data, avpkt->size, total_gain)) >= 0) {
 -        av_log(avctx, AV_LOG_ERROR, "required frame size too large. please "
 -               "use a higher bit rate.\n");
 -        return AVERROR(EINVAL);
 -    }
 -    assert((put_bits_count(&s->pb) & 7) == 0);
 -    while (i++)
 +    while(total_gain <= 128 && error > 0)
 +        error = encode_frame(s, s->coefs, avpkt->data, avpkt->size, total_gain++);
 +    av_assert0((put_bits_count(&s->pb) & 7) == 0);
-     i= s->block_align - (put_bits_count(&s->pb)+7)/8;
++    i= avctx->block_align - (put_bits_count(&s->pb)+7)/8;
 +    av_assert0(i>=0);
 +    while(i--)
          put_bits(&s->pb, 8, 'N');
  
      flush_put_bits(&s->pb);
-     av_assert0(put_bits_ptr(&s->pb) - s->pb.buf == s->block_align);
++    av_assert0(put_bits_ptr(&s->pb) - s->pb.buf == avctx->block_align);
  
      if (frame->pts != AV_NOPTS_VALUE)
          avpkt->pts = frame->pts - ff_samples_to_time_base(avctx, avctx->delay);
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge