Merge commit '5c7bf2dddee5bdfa247ff0d57cb8a37d19077f66'
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 29 Nov 2012 12:58:57 +0000 (13:58 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 29 Nov 2012 13:00:44 +0000 (14:00 +0100)
* commit '5c7bf2dddee5bdfa247ff0d57cb8a37d19077f66':
  lavf: move nuv fourcc audio tags from riff to nuv
  lavf: add a common function for selecting a pcm codec from parameters

Conflicts:
libavformat/internal.h
libavformat/mov.c
libavformat/riff.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavformat/internal.h
libavformat/mov.c
libavformat/nuv.c
libavformat/riff.c
libavformat/utils.c

@@@ -359,13 -358,19 +359,28 @@@ unsigned int ff_codec_get_tag(const AVC
  
  enum AVCodecID ff_codec_get_id(const AVCodecTag *tags, unsigned int tag);
  
+ /**
+  * Select a PCM codec based on the given parameters.
+  *
+  * @param bps     bits-per-sample
+  * @param flt     floating-point
+  * @param be      big-endian
+  * @param sflags  signed flags. each bit corresponds to one byte of bit depth.
+  *                e.g. the 1st bit indicates if 8-bit should be signed or
+  *                unsigned, the 2nd bit indicates if 16-bit should be signed or
+  *                unsigned, etc... This is useful for formats such as WAVE where
+  *                only 8-bit is unsigned and all other bit depths are signed.
+  * @return        a PCM codec id or AV_CODEC_ID_NONE
+  */
+ enum AVCodecID ff_get_pcm_codec_id(int bps, int flt, int be, int sflags);
 +/**
 + * Chooses a timebase for muxing the specified stream.
 + *
 + * The choosen timebase allows sample accurate timestamps based
 + * on the framerate or sample rate for audio streams. It also is
 + * at least as precisse as 1/min_precission would be.
 + */
 +AVRational ff_choose_timebase(AVFormatContext *s, AVStream *st, int min_precission);
 +
  #endif /* AVFORMAT_INTERNAL_H */
Simple merge
Simple merge
Simple merge
@@@ -2440,6 -2135,36 +2440,37 @@@ enum AVCodecID ff_codec_get_id(const AV
      return AV_CODEC_ID_NONE;
  }
  
+ enum AVCodecID ff_get_pcm_codec_id(int bps, int flt, int be, int sflags)
+ {
+     if (flt) {
+         switch (bps) {
+         case 32: return be ? AV_CODEC_ID_PCM_F32BE : AV_CODEC_ID_PCM_F32LE;
+         case 64: return be ? AV_CODEC_ID_PCM_F64BE : AV_CODEC_ID_PCM_F64LE;
+         default: return AV_CODEC_ID_NONE;
+         }
+     } else {
++        bps  += 7;
+         bps >>= 3;
+         if (sflags & (1 << (bps - 1))) {
+             switch (bps) {
+             case 1:  return AV_CODEC_ID_PCM_S8;
+             case 2:  return be ? AV_CODEC_ID_PCM_S16BE : AV_CODEC_ID_PCM_S16LE;
+             case 3:  return be ? AV_CODEC_ID_PCM_S24BE : AV_CODEC_ID_PCM_S24LE;
+             case 4:  return be ? AV_CODEC_ID_PCM_S32BE : AV_CODEC_ID_PCM_S32LE;
+             default: return AV_CODEC_ID_NONE;
+             }
+         } else {
+             switch (bps) {
+             case 1:  return AV_CODEC_ID_PCM_U8;
+             case 2:  return be ? AV_CODEC_ID_PCM_U16BE : AV_CODEC_ID_PCM_U16LE;
+             case 3:  return be ? AV_CODEC_ID_PCM_U24BE : AV_CODEC_ID_PCM_U24LE;
+             case 4:  return be ? AV_CODEC_ID_PCM_U32BE : AV_CODEC_ID_PCM_U32LE;
+             default: return AV_CODEC_ID_NONE;
+             }
+         }
+     }
+ }
  unsigned int av_codec_get_tag(const AVCodecTag * const *tags, enum AVCodecID id)
  {
      int i;