Merge commit 'f1fa1eed2abdc8dfb0af318a43f5d293b81141bd'
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 12 Jun 2015 19:14:34 +0000 (21:14 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 12 Jun 2015 19:25:21 +0000 (21:25 +0200)
* commit 'f1fa1eed2abdc8dfb0af318a43f5d293b81141bd':
  mpegvideo: Expand macro

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/flvenc.c
libavcodec/h261enc.c
libavcodec/mjpegenc.c
libavcodec/mpegvideo.h
libavcodec/mpegvideo_enc.c
libavcodec/rv10enc.c
libavcodec/rv20enc.c
libavcodec/wmv2enc.c

Simple merge
@@@ -370,15 -322,14 +370,20 @@@ av_cold void ff_h261_encode_init(MpegEn
      s->max_qcoeff       = 127;
      s->y_dc_scale_table =
      s->c_dc_scale_table = ff_mpeg1_dc_scale_table;
 +    s->ac_esc_length    = 6+6+8;
 +
 +    init_uni_h261_rl_tab(&ff_h261_rl_tcoeff, NULL, uni_h261_rl_len);
 +
 +    s->intra_ac_vlc_length      = s->inter_ac_vlc_length      = uni_h261_rl_len;
 +    s->intra_ac_vlc_last_length = s->inter_ac_vlc_last_length = uni_h261_rl_len + 128*64;
  }
  
- FF_MPV_GENERIC_CLASS(h261)
+ static const AVClass h261_class = {
+     .class_name = "h261 encoder",
+     .item_name  = av_default_item_name,
+     .option     = ff_mpv_generic_options,
+     .version    = LIBAVUTIL_VERSION_INT,
+ };
  
  AVCodec ff_h261_encoder = {
      .name           = "h261",
@@@ -211,49 -154,6 +211,55 @@@ void ff_mjpeg_encode_mb(MpegEncContext 
      s->i_tex_bits += get_bits_diff(s);
  }
  
- FF_MPV_GENERIC_CLASS(mjpeg)
 +// maximum over s->mjpeg_vsample[i]
 +#define V_MAX 2
 +static int amv_encode_picture(AVCodecContext *avctx, AVPacket *pkt,
 +                              const AVFrame *pic_arg, int *got_packet)
 +
 +{
 +    MpegEncContext *s = avctx->priv_data;
 +    AVFrame *pic;
 +    int i, ret;
 +    int chroma_h_shift, chroma_v_shift;
 +
 +    av_pix_fmt_get_chroma_sub_sample(avctx->pix_fmt, &chroma_h_shift, &chroma_v_shift);
 +
 +    //CODEC_FLAG_EMU_EDGE have to be cleared
 +    if(s->avctx->flags & CODEC_FLAG_EMU_EDGE)
 +        return AVERROR(EINVAL);
 +
 +    if ((avctx->height & 15) && avctx->strict_std_compliance > FF_COMPLIANCE_UNOFFICIAL) {
 +        av_log(avctx, AV_LOG_ERROR,
 +               "Heights which are not a multiple of 16 might fail with some decoders, "
 +               "use vstrict=-1 / -strict -1 to use %d anyway.\n", avctx->height);
 +        av_log(avctx, AV_LOG_WARNING, "If you have a device that plays AMV videos, please test if videos "
 +               "with such heights work with it and report your findings to ffmpeg-devel@ffmpeg.org\n");
 +        return AVERROR_EXPERIMENTAL;
 +    }
 +
 +    pic = av_frame_clone(pic_arg);
 +    if (!pic)
 +        return AVERROR(ENOMEM);
 +    //picture should be flipped upside-down
 +    for(i=0; i < 3; i++) {
 +        int vsample = i ? 2 >> chroma_v_shift : 2;
 +        pic->data[i] += pic->linesize[i] * (vsample * s->height / V_MAX - 1);
 +        pic->linesize[i] *= -1;
 +    }
 +    ret = ff_mpv_encode_picture(avctx, pkt, pic, got_packet);
 +    av_frame_free(&pic);
 +    return ret;
 +}
 +
 +#if CONFIG_MJPEG_ENCODER
++
++static const AVClass mjpeg_class = {
++    .class_name = "mjpeg encoder",
++    .item_name  = av_default_item_name,
++    .option     = ff_mpv_generic_options,
++    .version    = LIBAVUTIL_VERSION_INT,
++};
 +
  AVCodec ff_mjpeg_encoder = {
      .name           = "mjpeg",
      .long_name      = NULL_IF_CONFIG_SMALL("MJPEG (Motion JPEG)"),
      .init           = ff_mpv_encode_init,
      .encode2        = ff_mpv_encode_picture,
      .close          = ff_mpv_encode_end,
- FF_MPV_GENERIC_CLASS(amv)
 +    .capabilities   = CODEC_CAP_SLICE_THREADS | CODEC_CAP_FRAME_THREADS | CODEC_CAP_INTRA_ONLY,
 +    .pix_fmts       = (const enum AVPixelFormat[]){
 +        AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_NONE
 +    },
 +    .priv_class     = &mjpeg_class,
 +};
 +#endif
 +#if CONFIG_AMV_ENCODER
++static const AVClass amv_class = {
++    .class_name = "amv encoder",
++    .item_name  = av_default_item_name,
++    .option     = ff_mpv_generic_options,
++    .version    = LIBAVUTIL_VERSION_INT,
++};
 +
 +AVCodec ff_amv_encoder = {
 +    .name           = "amv",
 +    .long_name      = NULL_IF_CONFIG_SMALL("AMV Video"),
 +    .type           = AVMEDIA_TYPE_VIDEO,
 +    .id             = AV_CODEC_ID_AMV,
 +    .priv_data_size = sizeof(MpegEncContext),
 +    .init           = ff_mpv_encode_init,
 +    .encode2        = amv_encode_picture,
 +    .close          = ff_mpv_encode_end,
      .pix_fmts       = (const enum AVPixelFormat[]){
 -        AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_NONE
 +        AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_NONE
      },
 +    .priv_class     = &amv_class,
  };
 +#endif
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -207,14 -211,8 +207,19 @@@ void ff_wmv2_encode_mb(MpegEncContext *
  
      for (i = 0; i < 6; i++)
          ff_msmpeg4_encode_block(s, block[i], i);
 +    if (s->mb_intra)
 +        s->i_tex_bits += get_bits_diff(s);
 +    else
 +        s->p_tex_bits += get_bits_diff(s);
  }
  
- FF_MPV_GENERIC_CLASS(wmv2)
++static const AVClass wmv2_class = {
++    .class_name = "wmv2 encoder",
++    .item_name  = av_default_item_name,
++    .option     = ff_mpv_generic_options,
++    .version    = LIBAVUTIL_VERSION_INT,
++};
 +
  AVCodec ff_wmv2_encoder = {
      .name           = "wmv2",
      .long_name      = NULL_IF_CONFIG_SMALL("Windows Media Video 8"),