Merge remote-tracking branch 'qatar/master'
authorMichael Niedermayer <michaelni@gmx.at>
Sat, 21 Apr 2012 20:56:07 +0000 (22:56 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 21 Apr 2012 20:56:07 +0000 (22:56 +0200)
* qatar/master:
  avcodec: remove AVCodecContext.dsp_mask
  avconv: fix a segfault when default encoder for a format doesn't exist.
  utvideo: general cosmetics
  aac: Handle HE-AACv2 when sniffing a channel order.
  movenc: Support high sample rates in isomedia formats by setting the sample rate field in stsd to 0.
  xxan: Remove write-only variable in xan_decode_frame_type0().
  ivi_common: Initialize a variable at declaration in ff_ivi_decode_blocks().

Conflicts:
ffmpeg.c
libavcodec/utvideo.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
ffmpeg.c
libavcodec/aacdec.c
libavcodec/avcodec.h
libavcodec/ivi_common.c
libavcodec/pthread.c
libavcodec/utvideo.c
libavcodec/version.h
libavcodec/x86/dsputil_mmx.c
libavformat/movenc.c

diff --cc ffmpeg.c
+++ b/ffmpeg.c
@@@ -3011,11 -2684,13 +3011,12 @@@ static int transcode_init(void
                  abort();
              }
          } else {
 +            if (!ost->enc)
 +                ost->enc = avcodec_find_encoder(codec->codec_id);
              if (!ost->enc) {
 -                snprintf(error, sizeof(error), "Automatic encoder selection "
 -                         "failed for output stream #%d:%d. Default encoder for "
 -                         "format %s is probably disabled. Please choose an "
 -                         "encoder manually.\n", ost->file_index, ost->index,
 -                         oc->oformat->name);
+                 /* should only happen when a default codec is not present. */
 +                snprintf(error, sizeof(error), "Encoder (codec %s) not found for output stream #%d:%d",
 +                         avcodec_get_name(ost->st->codec->codec_id), ost->file_index, ost->index);
                  ret = AVERROR(EINVAL);
                  goto dump_format;
              }
@@@ -410,10 -404,16 +410,17 @@@ static int output_configure(AACContext 
          if (ret < 0)
              return ret;
      }
+     if (ac->oc[1].m4ac.ps == 1 && channels == 2) {
+         if (layout == AV_CH_FRONT_CENTER) {
+             layout = AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT;
+         } else {
+             layout = 0;
+         }
+     }
  
      memcpy(ac->tag_che_map, ac->che, 4 * MAX_ELEM_ID * sizeof(ac->che[0][0]));
 -    avctx->channel_layout = ac->oc[1].channel_layout = layout;
 +    if (layout) avctx->channel_layout = layout;
 +    ac->oc[1].channel_layout = layout;
      avctx->channels = ac->oc[1].channels = channels;
      ac->oc[1].status = oc_type;
  
Simple merge
Simple merge
Simple merge
@@@ -374,7 -380,9 +380,7 @@@ static int decode_frame(AVCodecContext 
          return ret;
      }
  
-     /* parse plane structure to retrieve frame flags and validate slice offsets */
 -    ff_thread_finish_setup(avctx);
 -
+     /* parse plane structure to get frame flags and validate slice offsets */
      bytestream2_init(&gb, buf, buf_size);
      for (i = 0; i < c->planes; i++) {
          plane_start[i] = gb.buffer;
Simple merge
Simple merge
@@@ -646,22 -624,14 +646,23 @@@ static int mov_write_audio_tag(AVIOCont
          avio_wb32(pb, track->sample_size);
          avio_wb32(pb, get_samples_per_packet(track));
      } else {
 -        /* reserved for mp4/3gp */
 -        avio_wb16(pb, 2);
 -        avio_wb16(pb, 16);
 -        avio_wb16(pb, 0);
 +        if (track->mode == MODE_MOV) {
 +            avio_wb16(pb, track->enc->channels);
 +            if (track->enc->codec_id == CODEC_ID_PCM_U8 ||
 +                track->enc->codec_id == CODEC_ID_PCM_S8)
 +                avio_wb16(pb, 8); /* bits per sample */
 +            else
 +                avio_wb16(pb, 16);
 +            avio_wb16(pb, track->audio_vbr ? -2 : 0); /* compression ID */
 +        } else { /* reserved for mp4/3gp */
 +            avio_wb16(pb, 2);
 +            avio_wb16(pb, 16);
 +            avio_wb16(pb, 0);
 +        }
  
          avio_wb16(pb, 0); /* packet size (= 0) */
-         avio_wb16(pb, track->enc->sample_rate);
+         avio_wb16(pb, track->enc->sample_rate <= UINT16_MAX ?
+                       track->enc->sample_rate : 0);
          avio_wb16(pb, 0); /* Reserved */
      }
  
@@@ -3194,22 -3118,16 +3195,16 @@@ static int mov_write_header(AVFormatCon
                      goto error;
                  }
                  track->sample_size = st->codec->block_align;
 -            }
 -            /* set audio_vbr for compressed audio */
 -            if (av_get_bits_per_sample(st->codec->codec_id) < 8) {
 +            }else if(st->codec->frame_size > 1){ /* assume compressed audio */
                  track->audio_vbr = 1;
 +            }else{
 +                track->sample_size = (av_get_bits_per_sample(st->codec->codec_id) >> 3) * st->codec->channels;
              }
-             if (track->mode != MODE_MOV) {
-                 if (track->timescale > UINT16_MAX) {
-                     av_log(s, AV_LOG_ERROR, "track %d: output format does not support "
-                            "sample rate %dhz\n", i, track->timescale);
-                     goto error;
-                 }
-                 if (track->enc->codec_id == CODEC_ID_MP3 && track->timescale < 16000) {
-                     av_log(s, AV_LOG_ERROR, "track %d: muxing mp3 at %dhz is not supported\n",
-                            i, track->enc->sample_rate);
-                     goto error;
-                 }
+             if (track->mode != MODE_MOV &&
+                 track->enc->codec_id == CODEC_ID_MP3 && track->timescale < 16000) {
+                 av_log(s, AV_LOG_ERROR, "track %d: muxing mp3 at %dhz is not supported\n",
+                        i, track->enc->sample_rate);
+                 goto error;
              }
          }else if(st->codec->codec_type == AVMEDIA_TYPE_SUBTITLE){
              track->timescale = st->codec->time_base.den;