Merge commit '650dee63c8b1e6693c6cf5983f4a5ed3f571379f'
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 20 Jun 2014 16:00:42 +0000 (18:00 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 20 Jun 2014 16:00:42 +0000 (18:00 +0200)
* commit '650dee63c8b1e6693c6cf5983f4a5ed3f571379f':
  dv: get rid of global non-const tables

Conflicts:
libavcodec/dv_profile.h
libavcodec/dvdec.c
libavcodec/dvenc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/dv.c
libavcodec/dv.h
libavcodec/dv_profile.c
libavcodec/dv_profile.h
libavcodec/dvdec.c
libavcodec/dvenc.c

diff --cc libavcodec/dv.c
Simple merge
diff --cc libavcodec/dv.h
Simple merge
Simple merge
  #include "libavutil/rational.h"
  #include "avcodec.h"
  
- typedef struct DVwork_chunk {
-     uint16_t  buf_offset;
-     uint16_t  mb_coordinates[5];
- } DVwork_chunk;
 +/* minimum number of bytes to read from a DV stream in order to
 +   determine the profile */
 +#define DV_PROFILE_BYTES (6*80) /* 6 DIF blocks */
 +
  /*
   * DVprofile is used to express the differences between various
   * DV flavors. For now it's primarily used for differentiating
@@@ -321,9 -320,10 +321,10 @@@ static int dvvideo_decode_frame(AVCodec
      DVVideoContext *s = avctx->priv_data;
      const uint8_t* vsc_pack;
      int apt, is16_9, ret;
+     const DVprofile *sys;
  
-     s->sys = avpriv_dv_frame_profile2(avctx, s->sys, buf, buf_size);
-     if (!s->sys || buf_size < s->sys->frame_size || ff_dv_init_dynamic_tables(s->sys)) {
 -    sys = avpriv_dv_frame_profile(s->sys, buf, buf_size);
++    sys = avpriv_dv_frame_profile2(avctx, s->sys, buf, buf_size);
+     if (!sys || buf_size < sys->frame_size) {
          av_log(avctx, AV_LOG_ERROR, "could not find dv frame profile\n");
          return -1; /* NOTE: we only accept several full frames */
      }
      s->frame->interlaced_frame = 1;
      s->frame->top_field_first  = 0;
  
 +    /* Determine the codec's sample_aspect ratio and field order from the packet */
 +    vsc_pack = buf + 80*5 + 48 + 5;
 +    if ( *vsc_pack == dv_video_control ) {
 +        apt = buf[4] & 0x07;
 +        is16_9 = (vsc_pack[2] & 0x07) == 0x02 || (!apt && (vsc_pack[2] & 0x07) == 0x07);
 +        avctx->sample_aspect_ratio = s->sys->sar[is16_9];
 +        s->frame->top_field_first = !(vsc_pack[3] & 0x40);
 +    }
 +
      s->buf = buf;
-     avctx->execute(avctx, dv_decode_video_segment, s->sys->work_chunks, NULL,
+     avctx->execute(avctx, dv_decode_video_segment, s->work_chunks, NULL,
                     dv_work_pool_size(s->sys), sizeof(DVwork_chunk));
  
      emms_c();
@@@ -46,11 -46,7 +46,11 @@@ static av_cold int dvvideo_encode_init(
          ff_dv_print_profiles(avctx, AV_LOG_ERROR);
          return AVERROR(EINVAL);
      }
-     ret = ff_dv_init_dynamic_tables(s->sys);
 +    if (avctx->height > 576) {
 +        av_log(avctx, AV_LOG_ERROR, "DVCPRO HD encoding is not supported.\n");
 +        return AVERROR_PATCHWELCOME;
 +    }
+     ret = ff_dv_init_dynamic_tables(s, s->sys);
      if (ret < 0) {
          av_log(avctx, AV_LOG_ERROR, "Error initializing work tables.\n");
          return ret;