Merge remote-tracking branch 'qatar/master'
authorMichael Niedermayer <michaelni@gmx.at>
Sat, 31 Mar 2012 22:36:43 +0000 (00:36 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 31 Mar 2012 22:36:43 +0000 (00:36 +0200)
* qatar/master:
  apedec: check bits <= 32.
  cavs: Remove unused code.
  oggenc: fix condition when not to flush due to keyframe granule.
  oggenc: add pagesize option to set preferred page size
  libspeexdec: set frame size in libspeex_decode_init()
  smacker audio: sign-extend the initial 16-bit predicted value

Conflicts:
libavcodec/apedec.c
libavcodec/libspeexdec.c
libavformat/oggenc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/apedec.c
libavcodec/cavs.c
libavcodec/libspeexdec.c
libavcodec/smacker.c
libavformat/oggenc.c

Simple merge
Simple merge
Simple merge
Simple merge
@@@ -20,8 -20,8 +20,9 @@@
   */
  
  #include "libavutil/crc.h"
 +#include "libavutil/opt.h"
  #include "libavutil/mathematics.h"
+ #include "libavutil/opt.h"
  #include "libavutil/random_seed.h"
  #include "libavcodec/xiph.h"
  #include "libavcodec/bytestream.h"
@@@ -69,10 -69,12 +70,14 @@@ typedef struct 
      int pref_size; ///< preferred page size (0 => fill all segments)
  } OGGContext;
  
+ #define OFFSET(x) offsetof(OGGContext, x)
+ #define PARAM AV_OPT_FLAG_ENCODING_PARAM
  
  static const AVOption options[] = {
 +    { "oggpagesize", "Set preferred Ogg page size.",
 +      offsetof(OGGContext, pref_size), AV_OPT_TYPE_INT, {.dbl = 0}, 0, MAX_PAGE_SIZE, AV_OPT_FLAG_ENCODING_PARAM},
+     { "pagesize", "preferred page size in bytes",
+         OFFSET(pref_size), AV_OPT_TYPE_INT, { 0 }, 0, MAX_PAGE_SIZE, PARAM },
      { NULL },
  };
  
@@@ -205,15 -202,9 +210,14 @@@ static int ogg_buffer_data(AVFormatCont
      int i, segments, len, flush = 0;
  
      // Handles VFR by flushing page because this frame needs to have a timestamp
-     if (st->codec->codec_id == CODEC_ID_THEORA &&
-         !header &&
 +    // For theora, keyframes also need to have a timestamp to correctly mark
 +    // them as such, otherwise seeking will not work correctly at the very
 +    // least with old libogg versions.
 +    // Do not try to flush header packets though, that will create broken files.
 -        ogg_granule_to_timestamp(oggstream, granule) >
 -        ogg_granule_to_timestamp(oggstream, oggstream->last_granule) + 1) {
+     if (st->codec->codec_id == CODEC_ID_THEORA && !header &&
 +        (ogg_granule_to_timestamp(oggstream, granule) >
 +         ogg_granule_to_timestamp(oggstream, oggstream->last_granule) + 1 ||
 +         ogg_key_granule(oggstream, granule))) {
          if (oggstream->page.granule != -1)
              ogg_buffer_page(s, oggstream);
          flush = 1;