mpegvideo.c
上传用户:jxp0626
上传日期:2007-01-08
资源大小:102k
文件大小:34k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Unix_Linux

  1. /*
  2.  * The simplest mpeg encoder
  3.  * Copyright (c) 2000 Gerard Lantau.
  4.  *
  5.  * This program is free software; you can redistribute it and/or modify
  6.  * it under the terms of the GNU General Public License as published by
  7.  * the Free Software Foundation; either version 2 of the License, or
  8.  * (at your option) any later version.
  9.  *
  10.  * This program is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  * GNU General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with this program; if not, write to the Free Software
  17.  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  */
  19. #include <stdlib.h>
  20. #include <stdio.h>
  21. #include <netinet/in.h>
  22. #include <math.h>
  23. #include "avcodec.h"
  24. #include "dsputil.h"
  25. #include "mpegvideo.h"
  26. /* enable all paranoid tests for rounding, overflows, etc... */
  27. //#define PARANOID
  28. //#define DEBUG
  29. /* for jpeg fast DCT */
  30. #define CONST_BITS 14
  31. static const unsigned short aanscales[64] = {
  32.     /* precomputed values scaled up by 14 bits */
  33.     16384, 22725, 21407, 19266, 16384, 12873,  8867,  4520,
  34.     22725, 31521, 29692, 26722, 22725, 17855, 12299,  6270,
  35.     21407, 29692, 27969, 25172, 21407, 16819, 11585,  5906,
  36.     19266, 26722, 25172, 22654, 19266, 15137, 10426,  5315,
  37.     16384, 22725, 21407, 19266, 16384, 12873,  8867,  4520,
  38.     12873, 17855, 16819, 15137, 12873, 10114,  6967,  3552,
  39.     8867, 12299, 11585, 10426,  8867,  6967,  4799,  2446,
  40.     4520,  6270,  5906,  5315,  4520,  3552,  2446,  1247
  41. };
  42. static void encode_picture(MpegEncContext *s, int picture_number);
  43. static void rate_control_init(MpegEncContext *s);
  44. static int rate_estimate_qscale(MpegEncContext *s);
  45. static void mpeg1_skip_picture(MpegEncContext *s, int pict_num);
  46. #include "mpegencodevlc.h"
  47. static void put_header(MpegEncContext *s, int header)
  48. {
  49.     align_put_bits(&s->pb);
  50.     put_bits(&s->pb, 32, header);
  51. }
  52. static void convert_matrix(int *qmat, const UINT8 *quant_matrix, int qscale)
  53. {
  54.     int i;
  55.     for(i=0;i<64;i++) {
  56.         qmat[i] = (int)((1 << 22) * 16384.0 / (aanscales[i] * qscale * quant_matrix[i]));
  57.     }
  58. }
  59. int MPV_encode_init(AVEncodeContext *avctx)
  60. {
  61.     MpegEncContext *s = avctx->priv_data;
  62.     int pict_size, c_size;
  63.     UINT8 *pict;
  64.     dsputil_init();
  65.     s->bit_rate = avctx->bit_rate;
  66.     s->frame_rate = avctx->rate;
  67.     s->width = avctx->width;
  68.     s->height = avctx->height;
  69.     s->gop_size = avctx->gop_size;
  70.     if (s->gop_size <= 1) {
  71.         s->intra_only = 1;
  72.         s->gop_size = 12;
  73.     } else {
  74.         s->intra_only = 0;
  75.     }
  76.     s->full_search = 0;
  77.     if (avctx->flags & CODEC_FLAG_HQ)
  78.         s->full_search = 1;
  79.     switch(avctx->codec->id) {
  80.     case CODEC_ID_MPEG1VIDEO:
  81.         s->out_format = FMT_MPEG1;
  82.         break;
  83.     case CODEC_ID_MJPEG:
  84.         s->out_format = FMT_MJPEG;
  85.         s->intra_only = 1; /* force intra only for jpeg */
  86.         if (mjpeg_init(s) < 0)
  87.             return -1;
  88.         break;
  89.     case CODEC_ID_H263:
  90.         s->out_format = FMT_H263;
  91.         break;
  92.     case CODEC_ID_RV10:
  93.         s->out_format = FMT_H263;
  94.         s->h263_rv10 = 1;
  95.         break;
  96.     case CODEC_ID_DIVX:
  97.         s->out_format = FMT_H263;
  98.         s->h263_pred = 1;
  99.         break;
  100.     default:
  101.         return -1;
  102.     }
  103.     switch(s->frame_rate) {
  104.     case 24:
  105.         s->frame_rate_index = 2;
  106.         break;
  107.     case 25:
  108.         s->frame_rate_index = 3;
  109.         break;
  110.     case 30:
  111.         s->frame_rate_index = 5;
  112.         break;
  113.     case 50:
  114.         s->frame_rate_index = 6;
  115.         break;
  116.     case 60:
  117.         s->frame_rate_index = 8;
  118.         break;
  119.     default:
  120.         /* we accept lower frame rates than 24 for low bit rate mpeg */
  121.         if (s->frame_rate >= 1 && s->frame_rate < 24) {
  122.             s->frame_rate_index = 2;
  123.         } else {
  124.             return -1;
  125.         }
  126.         break;
  127.     }
  128.     /* init */
  129.     s->mb_width = s->width / 16;
  130.     s->mb_height = s->height / 16;
  131.     
  132.     c_size = s->width * s->height;
  133.     pict_size = (c_size * 3) / 2;
  134.     pict = malloc(pict_size);
  135.     if (pict == NULL)
  136.         goto fail;
  137.     s->last_picture[0] = pict;
  138.     s->last_picture[1] = pict + c_size;
  139.     s->last_picture[2] = pict + c_size + (c_size / 4);
  140.     
  141.     pict = malloc(pict_size);
  142.     if (pict == NULL) 
  143.         goto fail;
  144.     s->current_picture[0] = pict;
  145.     s->current_picture[1] = pict + c_size;
  146.     s->current_picture[2] = pict + c_size + (c_size / 4);
  147.     if (s->out_format == FMT_H263) {
  148.         int size;
  149.         /* MV prediction */
  150.         size = (2 * s->mb_width + 2) * (2 * s->mb_height + 2);
  151.         s->motion_val = malloc(size * 2 * sizeof(INT16));
  152.         if (s->motion_val == NULL)
  153.             goto fail;
  154.         memset(s->motion_val, 0, size * 2 * sizeof(INT16));
  155.     }
  156.     if (s->h263_pred) {
  157.         int y_size, c_size, i, size;
  158.         y_size = (2 * s->mb_width + 2) * (2 * s->mb_height + 2);
  159.         c_size = (s->mb_width + 2) * (s->mb_height + 2);
  160.         size = y_size + 2 * c_size;
  161.         s->dc_val[0] = malloc(size * sizeof(INT16));
  162.         if (s->dc_val[0] == NULL)
  163.             goto fail;
  164.         s->dc_val[1] = s->dc_val[0] + y_size;
  165.         s->dc_val[2] = s->dc_val[1] + c_size;
  166.         for(i=0;i<size;i++)
  167.             s->dc_val[0][i] = 1024;
  168.     }
  169.     /* rate control init */
  170.     rate_control_init(s);
  171.     s->picture_number = 0;
  172.     s->fake_picture_number = 0;
  173.     /* motion detector init */
  174.     s->f_code = 1;
  175.     return 0;
  176.  fail:
  177.     if (s->motion_val)
  178.         free(s->motion_val);
  179.     if (s->dc_val[0])
  180.         free(s->dc_val[0]);
  181.     if (s->last_picture[0])
  182.         free(s->last_picture[0]);
  183.     if (s->current_picture[0])
  184.         free(s->current_picture[0]);
  185.     return -1;
  186. }
  187. int MPV_encode_end(AVEncodeContext *avctx)
  188. {
  189.     MpegEncContext *s = avctx->priv_data;
  190. #if 0
  191.     /* end of sequence */
  192.     if (s->out_format == FMT_MPEG1) {
  193.         put_header(s, SEQ_END_CODE);
  194.     }
  195.     if (!s->flush_frames)
  196.         flush_put_bits(&s->pb);
  197. #endif    
  198.     if (s->motion_val)
  199.         free(s->motion_val);
  200.     if (s->h263_pred)
  201.         free(s->dc_val[0]);
  202.     free(s->last_picture[0]);
  203.     free(s->current_picture[0]);
  204.     if (s->out_format == FMT_MJPEG)
  205.         mjpeg_close(s);
  206.     return 0;
  207. }
  208. int MPV_encode_picture(AVEncodeContext *avctx,
  209.                        unsigned char *buf, int buf_size, void *data)
  210. {
  211.     MpegEncContext *s = avctx->priv_data;
  212.     int i;
  213.     memcpy(s->new_picture, data, 3 * sizeof(UINT8 *));
  214.     init_put_bits(&s->pb, buf, buf_size, NULL, NULL);
  215.     /* group of picture */
  216.     if (s->out_format == FMT_MPEG1) {
  217.         unsigned int vbv_buffer_size;
  218.         unsigned int time_code, fps, n;
  219.         if ((s->picture_number % s->gop_size) == 0) {
  220.             /* mpeg1 header repeated every gop */
  221.             put_header(s, SEQ_START_CODE);
  222.             
  223.             put_bits(&s->pb, 12, s->width);
  224.             put_bits(&s->pb, 12, s->height);
  225.             put_bits(&s->pb, 4, 1); /* 1/1 aspect ratio */
  226.             put_bits(&s->pb, 4, s->frame_rate_index);
  227.             put_bits(&s->pb, 18, 0x3ffff);
  228.             put_bits(&s->pb, 1, 1); /* marker */
  229.             /* vbv buffer size: slightly greater than an I frame. We add
  230.                some margin just in case */
  231.             vbv_buffer_size = (3 * s->I_frame_bits) / (2 * 8);
  232.             put_bits(&s->pb, 10, (vbv_buffer_size + 16383) / 16384); 
  233.             put_bits(&s->pb, 1, 1); /* constrained parameter flag */
  234.             put_bits(&s->pb, 1, 0); /* no custom intra matrix */
  235.             put_bits(&s->pb, 1, 0); /* no custom non intra matrix */
  236.             put_header(s, GOP_START_CODE);
  237.             put_bits(&s->pb, 1, 0); /* do drop frame */
  238.             /* time code : we must convert from the real frame rate to a
  239.                fake mpeg frame rate in case of low frame rate */
  240.             fps = frame_rate_tab[s->frame_rate_index];
  241.             time_code = s->fake_picture_number;
  242.             s->gop_picture_number = time_code;
  243.             put_bits(&s->pb, 5, (time_code / (fps * 3600)) % 24);
  244.             put_bits(&s->pb, 6, (time_code / (fps * 60)) % 60);
  245.             put_bits(&s->pb, 1, 1);
  246.             put_bits(&s->pb, 6, (time_code / fps) % 60);
  247.             put_bits(&s->pb, 6, (time_code % fps));
  248.             put_bits(&s->pb, 1, 1); /* closed gop */
  249.             put_bits(&s->pb, 1, 0); /* broken link */
  250.         }
  251.         if (s->frame_rate < 24 && s->picture_number > 0) {
  252.             /* insert empty P pictures to slow down to the desired
  253.                frame rate. Each fake pictures takes about 20 bytes */
  254.             fps = frame_rate_tab[s->frame_rate_index];
  255.             n = ((s->picture_number * fps) / s->frame_rate) - 1;
  256.             while (s->fake_picture_number < n) {
  257.                 mpeg1_skip_picture(s, s->fake_picture_number - 
  258.                                    s->gop_picture_number); 
  259.                 s->fake_picture_number++;
  260.             }
  261.         }
  262.         s->fake_picture_number++;
  263.     }
  264.     
  265.     
  266.     if (!s->intra_only) {
  267.         /* first picture of GOP is intra */
  268.         if ((s->picture_number % s->gop_size) == 0)
  269.             s->pict_type = I_TYPE;
  270.         else
  271.             s->pict_type = P_TYPE;
  272.     } else {
  273.         s->pict_type = I_TYPE;
  274.     }
  275.     avctx->key_frame = (s->pict_type == I_TYPE);
  276.     
  277.     encode_picture(s, s->picture_number);
  278.     
  279.     /* swap current and last picture */
  280.     for(i=0;i<3;i++) {
  281.         UINT8 *tmp;
  282.         
  283.         tmp = s->last_picture[i];
  284.         s->last_picture[i] = s->current_picture[i];
  285.         s->current_picture[i] = tmp;
  286.     }
  287.     s->picture_number++;
  288.     if (s->out_format == FMT_MJPEG)
  289.         mjpeg_picture_trailer(s);
  290.     flush_put_bits(&s->pb);
  291.     s->total_bits += (s->pb.buf_ptr - s->pb.buf) * 8;
  292.     avctx->quality = s->qscale;
  293.     return s->pb.buf_ptr - s->pb.buf;
  294. }
  295. /* insert a fake P picture */
  296. static void mpeg1_skip_picture(MpegEncContext *s, int pict_num)
  297. {
  298.     unsigned int mb_incr;
  299.     /* mpeg1 picture header */
  300.     put_header(s, PICTURE_START_CODE);
  301.     /* temporal reference */
  302.     put_bits(&s->pb, 10, pict_num & 0x3ff); 
  303.     
  304.     put_bits(&s->pb, 3, P_TYPE);
  305.     put_bits(&s->pb, 16, 0xffff); /* non constant bit rate */
  306.     
  307.     put_bits(&s->pb, 1, 1); /* integer coordinates */
  308.     put_bits(&s->pb, 3, 1); /* forward_f_code */
  309.     
  310.     put_bits(&s->pb, 1, 0); /* extra bit picture */
  311.     
  312.     /* only one slice */
  313.     put_header(s, SLICE_MIN_START_CODE);
  314.     put_bits(&s->pb, 5, 1); /* quantizer scale */
  315.     put_bits(&s->pb, 1, 0); /* slice extra information */
  316.     
  317.     mb_incr = 1;
  318.     put_bits(&s->pb, mbAddrIncrTable[mb_incr][1], 
  319.              mbAddrIncrTable[mb_incr][0]);
  320.     
  321.     /* empty macroblock */
  322.     put_bits(&s->pb, 3, 1); /* motion only */
  323.     
  324.     /* zero motion x & y */
  325.     put_bits(&s->pb, 1, 1); 
  326.     put_bits(&s->pb, 1, 1); 
  327.     /* output a number of empty slice */
  328.     mb_incr = s->mb_width * s->mb_height - 1;
  329.     while (mb_incr > 33) {
  330.         put_bits(&s->pb, 11, 0x008);
  331.         mb_incr -= 33;
  332.     }
  333.     put_bits(&s->pb, mbAddrIncrTable[mb_incr][1], 
  334.              mbAddrIncrTable[mb_incr][0]);
  335.     
  336.     /* empty macroblock */
  337.     put_bits(&s->pb, 3, 1); /* motion only */
  338.     
  339.     /* zero motion x & y */
  340.     put_bits(&s->pb, 1, 1); 
  341.     put_bits(&s->pb, 1, 1); 
  342. }
  343. static int dct_quantize(MpegEncContext *s, DCTELEM *block, int n, int qscale);
  344. static void encode_block(MpegEncContext *s, 
  345.                          DCTELEM *block, 
  346.                          int component);
  347. static void dct_unquantize(MpegEncContext *s, DCTELEM *block, int n, int qscale);
  348. static void mpeg1_encode_mb(MpegEncContext *s, int mb_x, int mb_y,
  349.                             DCTELEM block[6][64],
  350.                             int motion_x, int motion_y);
  351. static void encode_picture(MpegEncContext *s, int picture_number)
  352. {
  353.     int mb_x, mb_y;
  354.     UINT8 *ptr;
  355.     DCTELEM block[6][64];
  356.     int i, motion_x, motion_y;
  357.     s->picture_number = picture_number;
  358. #if 1
  359.     s->qscale = rate_estimate_qscale(s);
  360. #else
  361.     s->qscale = 10;
  362. #endif
  363.     /* precompute matrix */
  364.     if (s->out_format == FMT_MJPEG) {
  365.         /* for mjpeg, we do include qscale in the matrix */
  366.         s->init_intra_matrix[0] = default_intra_matrix[0];
  367.         for(i=1;i<64;i++)
  368.             s->init_intra_matrix[i] = (default_intra_matrix[i] * s->qscale) >> 3;
  369.         convert_matrix(s->intra_matrix, s->init_intra_matrix, 8);
  370.     } else {
  371.         convert_matrix(s->intra_matrix, default_intra_matrix, s->qscale);
  372.         convert_matrix(s->non_intra_matrix, default_non_intra_matrix, s->qscale);
  373.     }
  374.     switch(s->out_format) {
  375.     case FMT_MJPEG:
  376.         mjpeg_picture_header(s);
  377.         break;
  378.     case FMT_H263:
  379.         if (s->h263_pred) 
  380.             mpeg4_encode_picture_header(s, picture_number);
  381.         else if (s->h263_rv10) 
  382.             rv10_encode_picture_header(s, picture_number);
  383.         else
  384.             h263_picture_header(s, picture_number);
  385.         break;
  386.     case FMT_MPEG1:
  387.         /* mpeg1 picture header */
  388.         put_header(s, PICTURE_START_CODE);
  389.         /* temporal reference */
  390.         put_bits(&s->pb, 10, (s->fake_picture_number - 
  391.                               s->gop_picture_number) & 0x3ff); 
  392.         
  393.         put_bits(&s->pb, 3, s->pict_type);
  394.         put_bits(&s->pb, 16, 0xffff); /* non constant bit rate */
  395.         
  396.         if (s->pict_type == P_TYPE) {
  397.             put_bits(&s->pb, 1, 0); /* half pel coordinates */
  398.             put_bits(&s->pb, 3, s->f_code); /* forward_f_code */
  399.         }
  400.         
  401.         put_bits(&s->pb, 1, 0); /* extra bit picture */
  402.         
  403.         /* only one slice */
  404.         put_header(s, SLICE_MIN_START_CODE);
  405.         put_bits(&s->pb, 5, s->qscale); /* quantizer scale */
  406.         put_bits(&s->pb, 1, 0); /* slice extra information */
  407.         break;
  408.     }
  409.         
  410.     /* init last dc values */
  411.     /* note: quant matrix value (8) is implied here */
  412.     s->last_dc[0] = 128;
  413.     s->last_dc[1] = 128;
  414.     s->last_dc[2] = 128;
  415.     s->mb_incr = 1;
  416.     s->last_motion_x = 0;
  417.     s->last_motion_y = 0;
  418.     for(mb_y=0; mb_y < s->mb_height; mb_y++) {
  419.         for(mb_x=0; mb_x < s->mb_width; mb_x++) {
  420.             s->mb_x = mb_x;
  421.             s->mb_y = mb_y;
  422.             /* compute motion vector and macro block type (intra or non intra) */
  423.             motion_x = 0;
  424.             motion_y = 0;
  425.             if (s->pict_type == P_TYPE) {
  426.                 s->mb_intra = estimate_motion(s, mb_x, mb_y,
  427.                                               &motion_x,
  428.                                               &motion_y);
  429.             } else {
  430.                 s->mb_intra = 1;
  431.             }
  432.             /* get the pixels */
  433.             ptr = s->new_picture[0] + (mb_y * 16 * s->width) + mb_x * 16;
  434.             get_pixels(block[0], ptr, s->width);
  435.             get_pixels(block[1], ptr + 8, s->width);
  436.             get_pixels(block[2], ptr + 8 * s->width, s->width);
  437.             get_pixels(block[3], ptr + 8 * s->width + 8, s->width);
  438.             ptr = s->new_picture[1] + (mb_y * 8 * (s->width >> 1)) + mb_x * 8;
  439.             get_pixels(block[4],ptr, s->width >> 1);
  440.             ptr = s->new_picture[2] + (mb_y * 8 * (s->width >> 1)) + mb_x * 8;
  441.             get_pixels(block[5],ptr, s->width >> 1);
  442.             /* subtract previous frame if non intra */
  443.             if (!s->mb_intra) {
  444.                 int dxy, offset, mx, my;
  445.                 dxy = ((motion_y & 1) << 1) | (motion_x & 1);
  446.                 ptr = s->last_picture[0] + 
  447.                     ((mb_y * 16 + (motion_y >> 1)) * s->width) + 
  448.                     (mb_x * 16 + (motion_x >> 1));
  449.                 sub_pixels_2(block[0], ptr, s->width, dxy);
  450.                 sub_pixels_2(block[1], ptr + 8, s->width, dxy);
  451.                 sub_pixels_2(block[2], ptr + s->width * 8, s->width, dxy);
  452.                 sub_pixels_2(block[3], ptr + 8 + s->width * 8, s->width ,dxy);
  453.                 if (s->out_format == FMT_H263) {
  454.                     /* special rounding for h263 */
  455.                     dxy = 0;
  456.                     if ((motion_x & 3) != 0)
  457.                         dxy |= 1;
  458.                     if ((motion_y & 3) != 0)
  459.                         dxy |= 2;
  460.                     mx = motion_x >> 2;
  461.                     my = motion_y >> 2;
  462.                 } else {
  463.                     mx = motion_x / 2;
  464.                     my = motion_y / 2;
  465.                     dxy = ((my & 1) << 1) | (mx & 1);
  466.                     mx >>= 1;
  467.                     my >>= 1;
  468.                 }
  469.                 offset = ((mb_y * 8 + my) * (s->width >> 1)) + (mb_x * 8 + mx);
  470.                 ptr = s->last_picture[1] + offset;
  471.                 sub_pixels_2(block[4], ptr, s->width >> 1, dxy);
  472.                 ptr = s->last_picture[2] + offset;
  473.                 sub_pixels_2(block[5], ptr, s->width >> 1, dxy);
  474.             }
  475.             /* DCT & quantize */
  476.             if (s->h263_pred) {
  477.                 h263_dc_scale(s);
  478.             } else {
  479.                 /* default quantization values */
  480.                 s->y_dc_scale = 8;
  481.                 s->c_dc_scale = 8;
  482.             }
  483.             for(i=0;i<6;i++) {
  484.                 int last_index;
  485.                 last_index = dct_quantize(s, block[i], i, s->qscale);
  486.                 s->block_last_index[i] = last_index;
  487.             }
  488.             /* huffman encode */
  489.             switch(s->out_format) {
  490.             case FMT_MPEG1:
  491.                 mpeg1_encode_mb(s, mb_x, mb_y, block, motion_x, motion_y);
  492.                 break;
  493.             case FMT_H263:
  494.                 h263_encode_mb(s, block, motion_x, motion_y);
  495.                 break;
  496.             case FMT_MJPEG:
  497.                 mjpeg_encode_mb(s, block);
  498.                 break;
  499.             }
  500.             /* update DC predictors for P macroblocks */
  501.             if (!s->mb_intra) {
  502.                 if (s->h263_pred) {
  503.                     int wrap, x, y;
  504.                     wrap = 2 * s->mb_width + 2;
  505.                     x = 2 * mb_x + 1;
  506.                     y = 2 * mb_y + 1;
  507.                     s->dc_val[0][(x) + (y) * wrap] = 1024;
  508.                     s->dc_val[0][(x + 1) + (y) * wrap] = 1024;
  509.                     s->dc_val[0][(x) + (y + 1) * wrap] = 1024;
  510.                     s->dc_val[0][(x + 1) + (y + 1) * wrap] = 1024;
  511.                     wrap = s->mb_width + 2;
  512.                     x = mb_x + 1;
  513.                     y = mb_y + 1;
  514.                     s->dc_val[1][(x) + (y) * wrap] = 1024;
  515.                     s->dc_val[2][(x) + (y) * wrap] = 1024;
  516.                 } else {
  517.                     s->last_dc[0] = 128;
  518.                     s->last_dc[1] = 128;
  519.                     s->last_dc[2] = 128;
  520.                 }
  521.             }
  522.             /* update motion predictor */
  523.             if (s->out_format == FMT_H263) {
  524.                 int x, y, wrap;
  525.                 
  526.                 x = 2 * mb_x + 1;
  527.                 y = 2 * mb_y + 1;
  528.                 wrap = 2 * s->mb_width + 2;
  529.                 s->motion_val[(x) + (y) * wrap][0] = motion_x;
  530.                 s->motion_val[(x) + (y) * wrap][1] = motion_y;
  531.                 s->motion_val[(x + 1) + (y) * wrap][0] = motion_x;
  532.                 s->motion_val[(x + 1) + (y) * wrap][1] = motion_y;
  533.                 s->motion_val[(x) + (y + 1) * wrap][0] = motion_x;
  534.                 s->motion_val[(x) + (y + 1) * wrap][1] = motion_y;
  535.                 s->motion_val[(x + 1) + (y + 1) * wrap][0] = motion_x;
  536.                 s->motion_val[(x + 1) + (y + 1) * wrap][1] = motion_y;
  537.             } else {
  538.                 s->last_motion_x = motion_x;
  539.                 s->last_motion_y = motion_y;
  540.             }
  541.             
  542.             /* decompress blocks so that we keep the state of the decoder */
  543.             if (!s->intra_only) {
  544.                 for(i=0;i<6;i++) {
  545.                     if (s->block_last_index[i] >= 0) {
  546.                         dct_unquantize(s, block[i], i, s->qscale);
  547.                         j_rev_dct (block[i]);
  548.                     }
  549.                 }
  550.                 if (!s->mb_intra) {
  551.                     int dxy, offset, mx, my;
  552.                     dxy = ((motion_y & 1) << 1) | (motion_x & 1);
  553.                     ptr = s->last_picture[0] + 
  554.                         ((mb_y * 16 + (motion_y >> 1)) * s->width) + 
  555.                         (mb_x * 16 + (motion_x >> 1));
  556.                     
  557.                     add_pixels_2(block[0], ptr, s->width, dxy);
  558.                     add_pixels_2(block[1], ptr + 8, s->width, dxy);
  559.                     add_pixels_2(block[2], ptr + s->width * 8, s->width, dxy);
  560.                     add_pixels_2(block[3], ptr + 8 + s->width * 8, s->width, dxy);
  561.                     if (s->out_format == FMT_H263) {
  562.                         /* special rounding for h263 */
  563.                         dxy = 0;
  564.                         if ((motion_x & 3) != 0)
  565.                             dxy |= 1;
  566.                         if ((motion_y & 3) != 0)
  567.                             dxy |= 2;
  568.                         mx = motion_x >> 2;
  569.                         my = motion_y >> 2;
  570.                     } else {
  571.                         mx = motion_x / 2;
  572.                         my = motion_y / 2;
  573.                         dxy = ((my & 1) << 1) | (mx & 1);
  574.                         mx >>= 1;
  575.                         my >>= 1;
  576.                     }
  577.                     offset = ((mb_y * 8 + my) * (s->width >> 1)) + (mb_x * 8 + mx);
  578.                     ptr = s->last_picture[1] + offset;
  579.                     add_pixels_2(block[4], ptr, s->width >> 1, dxy);
  580.                     ptr = s->last_picture[2] + offset;
  581.                     add_pixels_2(block[5], ptr, s->width >> 1, dxy);
  582.                 }
  583.                 /* write the pixels */
  584.                 ptr = s->current_picture[0] + (mb_y * 16 * s->width) + mb_x * 16;
  585.                 put_pixels(block[0], ptr, s->width);
  586.                 put_pixels(block[1], ptr + 8, s->width);
  587.                 put_pixels(block[2], ptr + 8 * s->width, s->width);
  588.                 put_pixels(block[3], ptr + 8 * s->width + 8, s->width);
  589.                 ptr = s->current_picture[1] + (mb_y * 8 * (s->width >> 1)) + mb_x * 8;
  590.                 put_pixels(block[4],ptr, s->width >> 1);
  591.                 
  592.                 ptr = s->current_picture[2] + (mb_y * 8 * (s->width >> 1)) + mb_x * 8;
  593.                 put_pixels(block[5],ptr, s->width >> 1);
  594.             }
  595.         }
  596.     }
  597. }
  598. static void mpeg1_encode_motion(MpegEncContext *s, int val)
  599. {
  600.     int code, bit_size, l, m, bits, range;
  601.     if (val == 0) {
  602.         /* zero vector */
  603.         code = 0;
  604.         put_bits(&s->pb,
  605.                  mbMotionVectorTable[code + 16][1], 
  606.                  mbMotionVectorTable[code + 16][0]); 
  607.     } else {
  608.         bit_size = s->f_code - 1;
  609.         range = 1 << bit_size;
  610.         /* modulo encoding */
  611.         l = 16 * range;
  612.         m = 2 * l;
  613.         if (val < -l) {
  614.             val += m;
  615.         } else if (val >= l) {
  616.             val -= m;
  617.         }
  618.         if (val >= 0) {
  619.             val--;
  620.             code = (val >> bit_size) + 1;
  621.             bits = val & (range - 1);
  622.         } else {
  623.             val = -val;
  624.             val--;
  625.             code = (val >> bit_size) + 1;
  626.             bits = val & (range - 1);
  627.             code = -code;
  628.         }
  629.         put_bits(&s->pb,
  630.                  mbMotionVectorTable[code + 16][1], 
  631.                  mbMotionVectorTable[code + 16][0]); 
  632.         if (bit_size > 0) {
  633.             put_bits(&s->pb, bit_size, bits);
  634.         }
  635.     }
  636. }
  637. static void mpeg1_encode_mb(MpegEncContext *s, int mb_x, int mb_y,
  638.                             DCTELEM block[6][64],
  639.                             int motion_x, int motion_y)
  640. {
  641.     int mb_incr, i, cbp;
  642.     /* compute cbp */
  643.     cbp = 0;
  644.     for(i=0;i<6;i++) {
  645.         if (s->block_last_index[i] >= 0)
  646.             cbp |= 1 << (5 - i);
  647.     }
  648.     /* skip macroblock, except if first or last macroblock of a slice */
  649.     if ((cbp | motion_x | motion_y) == 0 &&
  650.         (!((mb_x | mb_y) == 0 ||
  651.            (mb_x == s->mb_width - 1 && mb_y == s->mb_height - 1)))) {
  652.         s->mb_incr++;
  653.     } else {
  654.         /* output mb incr */
  655.         mb_incr = s->mb_incr;
  656.         while (mb_incr > 33) {
  657.             put_bits(&s->pb, 11, 0x008);
  658.             mb_incr -= 33;
  659.         }
  660.         put_bits(&s->pb, mbAddrIncrTable[mb_incr][1], 
  661.                  mbAddrIncrTable[mb_incr][0]);
  662.         
  663.         if (s->pict_type == I_TYPE) {
  664.             put_bits(&s->pb, 1, 1); /* macroblock_type : macroblock_quant = 0 */
  665.         } else {
  666.             if (s->mb_intra) {
  667.                 put_bits(&s->pb, 5, 0x03);
  668.             } else {
  669.                 if (cbp != 0) {
  670.                     if (motion_x == 0 && motion_y == 0) {
  671.                         put_bits(&s->pb, 2, 1); /* macroblock_pattern only */
  672.                         put_bits(&s->pb, mbPatTable[cbp][1], mbPatTable[cbp][0]);
  673.                     } else {
  674.                         put_bits(&s->pb, 1, 1); /* motion + cbp */
  675.                         mpeg1_encode_motion(s, motion_x - s->last_motion_x); 
  676.                         mpeg1_encode_motion(s, motion_y - s->last_motion_y); 
  677.                         put_bits(&s->pb, mbPatTable[cbp][1], mbPatTable[cbp][0]);
  678.                     }
  679.                 } else {
  680.                     put_bits(&s->pb, 3, 1); /* motion only */
  681.                     mpeg1_encode_motion(s, motion_x - s->last_motion_x); 
  682.                     mpeg1_encode_motion(s, motion_y - s->last_motion_y); 
  683.                 }
  684.             }
  685.         }
  686.         
  687.         for(i=0;i<6;i++) {
  688.             if (cbp & (1 << (5 - i))) {
  689.                 encode_block(s, block[i], i);
  690.             }
  691.         }
  692.         s->mb_incr = 1;
  693.     }
  694. }
  695. static int dct_quantize(MpegEncContext *s, 
  696.                         DCTELEM *block, int n,
  697.                         int qscale)
  698. {
  699.     int i, j, level, last_non_zero, q;
  700.     const int *qmat;
  701.     jpeg_fdct_ifast (block);
  702.     if (s->mb_intra) {
  703.         if (n < 4)
  704.             q = s->y_dc_scale;
  705.         else
  706.             q = s->c_dc_scale;
  707.         q = q << 3;
  708.         
  709.         /* note: block[0] is assumed to be positive */
  710.         block[0] = (block[0] + (q >> 1)) / q;
  711.         i = 1;
  712.         last_non_zero = 0;
  713.         if (s->out_format == FMT_H263) {
  714.             qmat = s->non_intra_matrix;
  715.         } else {
  716.             qmat = s->intra_matrix;
  717.         }
  718.     } else {
  719.         i = 0;
  720.         last_non_zero = -1;
  721.         qmat = s->non_intra_matrix;
  722.     }
  723.     for(;i<64;i++) {
  724.         j = zigzag_direct[i];
  725.         level = block[j];
  726.         /* XXX: overflow can occur here at qscale < 3 */
  727.         level = level * qmat[j];
  728. #ifdef PARANOID
  729.         {
  730.             int level1;
  731.             level1 = ((long long)block[j] * (long long)(qmat[j]));
  732.             if (level1 != level)
  733.                 fprintf(stderr, "quant error %d %dn", level, level1);
  734.         }
  735. #endif
  736.         /* XXX: slight error for the low range */
  737.         //if (level <= -(1 << 22) || level >= (1 << 22)) 
  738.         if (((level << 9) >> 9) != level) {
  739.             level = level / (1 << 22);
  740.             /* XXX: currently, this code is not optimal. the range should be:
  741.                mpeg1: -255..255
  742.                mpeg2: -2048..2047
  743.                h263:  -128..127
  744.                mpeg4: -2048..2047
  745.             */
  746.             if (level > 127)
  747.                 level = 127;
  748.             else if (level < -128)
  749.                 level = -128;
  750.             block[j] = level;
  751.             last_non_zero = i;
  752.         } else {
  753.             block[j] = 0;
  754.         }
  755.     }
  756.     return last_non_zero;
  757. }
  758. static void dct_unquantize(MpegEncContext *s, 
  759.                            DCTELEM *block, int n, int qscale)
  760. {
  761.     int i, level;
  762.     const UINT8 *quant_matrix;
  763.     if (s->mb_intra) {
  764.         if (n < 4) 
  765.             block[0] = block[0] * s->y_dc_scale;
  766.         else
  767.             block[0] = block[0] * s->c_dc_scale;
  768.         if (s->out_format == FMT_H263) {
  769.             i = 1;
  770.             goto unquant_even;
  771.         }
  772.         quant_matrix = default_intra_matrix;
  773.         for(i=1;i<64;i++) {
  774.             level = block[i];
  775.             if (level) {
  776.                 if (level < 0) {
  777.                     level = -level;
  778.                     level = (int)(level * qscale * quant_matrix[i]) >> 3;
  779.                     level = (level - 1) | 1;
  780.                     level = -level;
  781.                 } else {
  782.                     level = (int)(level * qscale * quant_matrix[i]) >> 3;
  783.                     level = (level - 1) | 1;
  784.                 }
  785. #ifdef PARANOID
  786.                 if (level < -2048 || level > 2047)
  787.                     fprintf(stderr, "unquant error %d %dn", i, level);
  788. #endif
  789.                 block[i] = level;
  790.             }
  791.         }
  792.     } else {
  793.         i = 0;
  794.     unquant_even:
  795.         quant_matrix = default_non_intra_matrix;
  796.         for(;i<64;i++) {
  797.             level = block[i];
  798.             if (level) {
  799.                 if (level < 0) {
  800.                     level = -level;
  801.                     level = (((level << 1) + 1) * qscale *
  802.                              ((int) (quant_matrix[i]))) >> 4;
  803.                     level = (level - 1) | 1;
  804.                     level = -level;
  805.                 } else {
  806.                     level = (((level << 1) + 1) * qscale *
  807.                              ((int) (quant_matrix[i]))) >> 4;
  808.                     level = (level - 1) | 1;
  809.                 }
  810. #ifdef PARANOID
  811.                 if (level < -2048 || level > 2047)
  812.                     fprintf(stderr, "unquant error %d %dn", i, level);
  813. #endif
  814.                 block[i] = level;
  815.             }
  816.         }
  817.     }
  818. }
  819.                          
  820. static inline void encode_dc(MpegEncContext *s, int diff, int component)
  821. {
  822.     int adiff, index;
  823.     //    printf("dc=%d c=%dn", diff, component);
  824.     adiff = abs(diff);
  825.     index = vlc_dc_table[adiff];
  826.     if (component == 0) {
  827.         put_bits(&s->pb, vlc_dc_lum_bits[index], vlc_dc_lum_code[index]);
  828.     } else {
  829.         put_bits(&s->pb, vlc_dc_chroma_bits[index], vlc_dc_chroma_code[index]);
  830.     }
  831.     if (diff > 0) {
  832.         put_bits(&s->pb, index, (diff & ((1 << index) - 1)));
  833.     } else if (diff < 0) {
  834.         put_bits(&s->pb, index, ((diff - 1) & ((1 << index) - 1)));
  835.     }
  836. }
  837. static void encode_block(MpegEncContext *s, 
  838.                          DCTELEM *block, 
  839.                          int n)
  840. {
  841.     int alevel, level, last_non_zero, dc, diff, i, j, run, last_index;
  842.     int code, nbits, component;
  843.     
  844.     last_index = s->block_last_index[n];
  845.     /* DC coef */
  846.     if (s->mb_intra) {
  847.         component = (n <= 3 ? 0 : n - 4 + 1);
  848.         dc = block[0]; /* overflow is impossible */
  849.         diff = dc - s->last_dc[component];
  850.         encode_dc(s, diff, component);
  851.         s->last_dc[component] = dc;
  852.         i = 1;
  853.     } else {
  854.         /* encode the first coefficient : needs to be done here because
  855.            it is handled slightly differently */
  856.         level = block[0];
  857.         if (abs(level) == 1) {
  858.                 code = ((UINT32)level >> 31); /* the sign bit */
  859.                 put_bits(&s->pb, 2, code | 0x02);
  860.                 i = 1;
  861.         } else {
  862.             i = 0;
  863.             last_non_zero = -1;
  864.             goto next_coef;
  865.         }
  866.     }
  867.     /* now quantify & encode AC coefs */
  868.     last_non_zero = i - 1;
  869.     for(;i<=last_index;i++) {
  870.         j = zigzag_direct[i];
  871.         level = block[j];
  872.     next_coef:
  873. #if 0
  874.         if (level != 0)
  875.             printf("level[%d]=%dn", i, level);
  876. #endif            
  877.         /* encode using VLC */
  878.         if (level != 0) {
  879.             run = i - last_non_zero - 1;
  880.             alevel = abs(level);
  881.             //            printf("run=%d level=%dn", run, level);
  882.             if ( (run < HUFF_MAXRUN) && (alevel < huff_maxlevel[run])) {
  883.                 /* encode using the Huffman tables */
  884.                 code = (huff_table[run])[alevel];
  885.                 nbits = (huff_bits[run])[alevel];
  886.                 code |= ((UINT32)level >> 31); /* the sign bit */
  887.                 put_bits(&s->pb, nbits, code);
  888.             } else {
  889.                 /* escape: only clip in this case */
  890.                 put_bits(&s->pb, 6, 0x1);
  891.                 put_bits(&s->pb, 6, run);
  892.                 if (alevel < 128) {
  893.                     put_bits(&s->pb, 8, level & 0xff);
  894.                 } else {
  895.                     if (level < 0) {
  896.                         put_bits(&s->pb, 16, 0x8001 + level + 255);
  897.                     } else {
  898.                         put_bits(&s->pb, 16, level & 0xffff);
  899.                     }
  900.                 }
  901.             }
  902.             last_non_zero = i;
  903.         }
  904.     }
  905.     /* end of block */
  906.     put_bits(&s->pb, 2, 0x2);
  907. }
  908. /* rate control */
  909. /* an I frame is I_FRAME_SIZE_RATIO bigger than a P frame */
  910. #define I_FRAME_SIZE_RATIO 3.0
  911. #define QSCALE_K           20
  912. static void rate_control_init(MpegEncContext *s)
  913. {
  914.     s->wanted_bits = 0;
  915.     if (s->intra_only) {
  916.         s->I_frame_bits = s->bit_rate / s->frame_rate;
  917.         s->P_frame_bits = s->I_frame_bits;
  918.     } else {
  919.         s->P_frame_bits = (int) ((float)(s->gop_size * s->bit_rate) / 
  920.                     (float)(s->frame_rate * (I_FRAME_SIZE_RATIO + s->gop_size - 1)));
  921.         s->I_frame_bits = (int)(s->P_frame_bits * I_FRAME_SIZE_RATIO);
  922.     }
  923.     
  924. #if defined(DEBUG)
  925.     printf("I_frame_size=%d P_frame_size=%dn",
  926.            s->I_frame_bits, s->P_frame_bits);
  927. #endif
  928. }
  929. /*
  930.  * This heuristic is rather poor, but at least we do not have to
  931.  * change the qscale at every macroblock.
  932.  */
  933. static int rate_estimate_qscale(MpegEncContext *s)
  934. {
  935.     long long total_bits = s->total_bits;
  936.     float q;
  937.     int qscale, diff, qmin;
  938.     if (s->pict_type == I_TYPE) {
  939.         s->wanted_bits += s->I_frame_bits;
  940.     } else {
  941.         s->wanted_bits += s->P_frame_bits;
  942.     }
  943.     diff = s->wanted_bits - total_bits;
  944.     q = 31.0 - (float)diff / (QSCALE_K * s->mb_height * s->mb_width);
  945.     /* adjust for I frame */
  946.     if (s->pict_type == I_TYPE && !s->intra_only) {
  947.         q /= I_FRAME_SIZE_RATIO;
  948.     }
  949.     /* using a too small Q scale leeds to problems in mpeg1 and h263
  950.        because AC coefficients are clamped to 255 or 127 */
  951.     qmin = 3;
  952.     if (q < qmin)
  953.         q = qmin;
  954.     else if (q > 31)
  955.         q = 31;
  956.     qscale = (int)(q + 0.5);
  957. #if defined(DEBUG)
  958.     printf("%d: total=%Ld br=%0.1f diff=%d qest=%0.1fn", 
  959.            s->picture_number, 
  960.            total_bits, (float)s->frame_rate * total_bits / s->picture_number, 
  961.            diff, q);
  962. #endif
  963.     return qscale;
  964. }
  965. AVEncoder mpeg1video_encoder = {
  966.     "mpeg1video",
  967.     CODEC_TYPE_VIDEO,
  968.     CODEC_ID_MPEG1VIDEO,
  969.     sizeof(MpegEncContext),
  970.     MPV_encode_init,
  971.     MPV_encode_picture,
  972.     MPV_encode_end,
  973. };
  974. AVEncoder h263_encoder = {
  975.     "h263",
  976.     CODEC_TYPE_VIDEO,
  977.     CODEC_ID_H263,
  978.     sizeof(MpegEncContext),
  979.     MPV_encode_init,
  980.     MPV_encode_picture,
  981.     MPV_encode_end,
  982. };
  983. AVEncoder rv10_encoder = {
  984.     "rv10",
  985.     CODEC_TYPE_VIDEO,
  986.     CODEC_ID_RV10,
  987.     sizeof(MpegEncContext),
  988.     MPV_encode_init,
  989.     MPV_encode_picture,
  990.     MPV_encode_end,
  991. };
  992. AVEncoder mjpeg_encoder = {
  993.     "mjpeg",
  994.     CODEC_TYPE_VIDEO,
  995.     CODEC_ID_MJPEG,
  996.     sizeof(MpegEncContext),
  997.     MPV_encode_init,
  998.     MPV_encode_picture,
  999.     MPV_encode_end,
  1000. };
  1001. AVEncoder divx_encoder = {
  1002.     "divx",
  1003.     CODEC_TYPE_VIDEO,
  1004.     CODEC_ID_DIVX,
  1005.     sizeof(MpegEncContext),
  1006.     MPV_encode_init,
  1007.     MPV_encode_picture,
  1008.     MPV_encode_end,
  1009. };