Merge commit 'd754ed41727b1fcbab335b510248a9758a73320c'
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 18 Jun 2014 15:47:12 +0000 (17:47 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 18 Jun 2014 15:47:12 +0000 (17:47 +0200)
* commit 'd754ed41727b1fcbab335b510248a9758a73320c':
  riffenc: take an AVStream instead of an AVCodecContext

Conflicts:
libavformat/nutenc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavformat/avienc.c
libavformat/nutenc.c
libavformat/riff.h
libavformat/riffenc.c

@@@ -128,10 -117,10 +128,10 @@@ static int avi_write_counters(AVFormatC
      for (n = 0; n < s->nb_streams; n++) {
          AVIStream *avist = s->streams[n]->priv_data;
  
 -        assert(avist->frames_hdr_strm);
 +        av_assert0(avist->frames_hdr_strm);
          stream = s->streams[n]->codec;
          avio_seek(pb, avist->frames_hdr_strm, SEEK_SET);
-         ff_parse_specific_params(stream, &au_byterate, &au_ssize, &au_scale);
+         ff_parse_specific_params(s->streams[n], &au_byterate, &au_ssize, &au_scale);
          if (au_ssize == 0)
              avio_wl32(pb, avist->packet_count);
          else
@@@ -260,20 -248,11 +260,20 @@@ static int avi_write_header(AVFormatCon
          avio_wl16(pb, 0); /* language */
          avio_wl32(pb, 0); /* initial frame */
  
-         ff_parse_specific_params(enc, &au_byterate, &au_ssize, &au_scale);
+         ff_parse_specific_params(st, &au_byterate, &au_ssize, &au_scale);
  
 +        if (   enc->codec_type == AVMEDIA_TYPE_VIDEO
 +            && enc->codec_id != AV_CODEC_ID_XSUB
 +            && au_byterate > 1000LL*au_scale) {
 +            au_byterate = 600;
 +            au_scale    = 1;
 +        }
 +        avpriv_set_pts_info(st, 64, au_scale, au_byterate);
 +        if (enc->codec_id == AV_CODEC_ID_XSUB)
 +            au_scale = au_byterate = 0;
 +
          avio_wl32(pb, au_scale); /* scale */
          avio_wl32(pb, au_byterate); /* rate */
 -        avpriv_set_pts_info(st, 64, au_scale, au_byterate);
  
          avio_wl32(pb, 0); /* start */
          /* remember this offset to fill later */
@@@ -722,13 -674,8 +722,13 @@@ static int nut_write_header(AVFormatCon
          AVStream *st = s->streams[i];
          int ssize;
          AVRational time_base;
-         ff_parse_specific_params(st->codec, &time_base.den, &ssize, &time_base.num);
 -        ff_parse_specific_params(st, &time_base.den, &ssize,
 -                                 &time_base.num);
++        ff_parse_specific_params(st, &time_base.den, &ssize, &time_base.num);
 +
 +        if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO && st->codec->sample_rate) {
 +            time_base = (AVRational) {1, st->codec->sample_rate};
 +        } else {
 +            time_base = ff_choose_timebase(s, st, 48000);
 +        }
  
          avpriv_set_pts_info(st, 64, time_base.num, time_base.den);
  
@@@ -64,10 -48,12 +64,10 @@@ int ff_put_wav_header(AVIOContext *pb, 
  enum AVCodecID ff_wav_codec_get_id(unsigned int tag, int bps);
  int ff_get_wav_header(AVIOContext *pb, AVCodecContext *codec, int size);
  
 -extern const AVCodecTag ff_codec_bmp_tags[];
 +extern const AVCodecTag ff_codec_bmp_tags[]; // exposed through avformat_get_riff_video_tags()
  extern const AVCodecTag ff_codec_wav_tags[];
  
- void ff_parse_specific_params(AVCodecContext *stream, int *au_rate, int *au_ssize, int *au_scale);
+ void ff_parse_specific_params(AVStream *st, int *au_rate, int *au_ssize, int *au_scale);
  
  int ff_read_riff_info(AVFormatContext *s, int64_t size);
  
@@@ -226,17 -203,16 +226,18 @@@ void ff_put_bmp_header(AVIOContext *pb
      avio_wl32(pb, 0);
      avio_wl32(pb, 0);
  
 -    avio_write(pb, enc->extradata, enc->extradata_size);
 +    if (!ignore_extradata) {
 +        avio_write(pb, enc->extradata, enc->extradata_size);
  
 -    if (!for_asf && enc->extradata_size & 1)
 -        avio_w8(pb, 0);
 +        if (!for_asf && enc->extradata_size & 1)
 +            avio_w8(pb, 0);
 +    }
  }
  
- void ff_parse_specific_params(AVCodecContext *stream, int *au_rate,
+ void ff_parse_specific_params(AVStream *st, int *au_rate,
                                int *au_ssize, int *au_scale)
  {
+     AVCodecContext *codec = st->codec;
      int gcd;
      int audio_frame_size;