61     for(plane_index=0; plane_index<3; plane_index++){
 
  158     for (i = 0; i < 
h; i++) {
 
  159         for (j = 0; j < w; j++) {
 
  163         pix += line_size - w;
 
  175     for (i = 0; i < w; i++) {
 
  176         for (j = 0; j < w; j ++) {
 
  180         pix += line_size - w;
 
  191         return (3*lambda)>>(FF_LAMBDA_SHIFT+1);
 
  212 #define P_TOPRIGHT P[3] 
  213 #define P_MEDIAN P[4] 
  215 #define FLAG_QPEL   1 //must be 1 
  225     int score, score2, iscore, i_len, p_len, block_s, sum, base_bits;
 
  229     const int index= (x + y*w) << rem_depth;
 
  231     int trx= (x+1)<<rem_depth;
 
  232     int try= (y+1)<<rem_depth;
 
  238     const BlockNode *tr    = y && trx<w && ((x&1)==0 || level==0) ? &s->
block[index-w+(1<<rem_depth)] : tl; 
 
  239     int pl = left->
color[0];
 
  240     int pcb= left->
color[1];
 
  241     int pcr= left->
color[2];
 
  251     int16_t last_mv[3][2];
 
  253     const int shift= 1+qpel;
 
  259     int ref, best_ref, ref_score, ref_mx, ref_my;
 
  263         set_blocks(s, level, x, y, pl, pcb, pcr, 0, 0, 0, 
BLOCK_INTRA);
 
  278     last_mv[1][0]= right->
mx;
 
  279     last_mv[1][1]= right->
my;
 
  280     last_mv[2][0]= bottom->
mx;
 
  281     last_mv[2][1]= bottom->
my;
 
  296     c->
xmin = - x*block_w - 16+3;
 
  297     c->
ymin = - y*block_w - 16+3;
 
  341         if(score > ref_score){
 
  354     pc.bytestream= p_buffer; 
 
  358         put_rac(&pc, &p_state[4 + s_context], 1);
 
  361         put_symbol(&pc, &p_state[128 + 1024 + 32*ref_context], best_ref, 0);
 
  362     pred_mv(s, &pmx, &pmy, best_ref, left, top, tr);
 
  363     put_symbol(&pc, &p_state[128 + 32*(mx_context + 16*!!best_ref)], mx - pmx, 1);
 
  364     put_symbol(&pc, &p_state[128 + 32*(my_context + 16*!!best_ref)], my - pmy, 1);
 
  365     p_len= pc.bytestream - pc.bytestream_start;
 
  368     block_s= block_w*block_w;
 
  369     sum = 
pix_sum(current_data[0], stride, block_w, block_w);
 
  370     l= (sum + block_s/2)/block_s;
 
  371     iscore = 
pix_norm1(current_data[0], stride, block_w) - 2*l*sum + l*l*block_s;
 
  376         cb= (sum + block_s/2)/block_s;
 
  379         cr= (sum + block_s/2)/block_s;
 
  386     ic.bytestream= i_buffer; 
 
  389         put_rac(&ic, &i_state[4 + s_context], 1);
 
  396     i_len= ic.bytestream - ic.bytestream_start;
 
  399     av_assert1(iscore < 255*255*256 + s->lambda2*10);
 
  405         int varc= iscore >> 8;
 
  406         int vard= score >> 8;
 
  407         if (vard <= 64 || vard < varc)
 
  421         if(score2 < score && score2 < iscore)
 
  426         pred_mv(s, &pmx, &pmy, 0, left, top, tr);
 
  427         memcpy(pbbak, i_buffer, i_len);
 
  431         set_blocks(s, level, x, y, l, cb, cr, pmx, pmy, 0, 
BLOCK_INTRA);
 
  435         memcpy(pbbak, p_buffer, p_len);
 
  439         set_blocks(s, level, x, y, pl, pcb, pcr, mx, my, best_ref, 0);
 
  448     const int index= (x + y*w) << rem_depth;
 
  449     int trx= (x+1)<<rem_depth;
 
  454     const BlockNode *tr    = y && trx<w && ((x&1)==0 || level==0) ? &s->
block[index-w+(1<<rem_depth)] : tl; 
 
  455     int pl = left->
color[0];
 
  456     int pcb= left->
color[1];
 
  457     int pcr= left->
color[2];
 
  465         set_blocks(s, level, x, y, pl, pcb, pcr, 0, 0, 0, 
BLOCK_INTRA);
 
  482         pred_mv(s, &pmx, &pmy, 0, left, top, tr);
 
  489         set_blocks(s, level, x, y, b->
color[0], b->
color[1], b->
color[2], pmx, pmy, 0, 
BLOCK_INTRA);
 
  491         pred_mv(s, &pmx, &pmy, b->
ref, left, top, tr);
 
  497         set_blocks(s, level, x, y, pl, pcb, pcr, b->
mx, b->
my, b->
ref, 0);
 
  505     const int block_w    = plane_index ? block_size>>s->
chroma_h_shift : block_size;
 
  506     const int block_h    = plane_index ? block_size>>s->
chroma_v_shift : block_size;
 
  508     const int obmc_stride= plane_index ? (2*block_size)>>s->
chroma_h_shift : 2*block_size;
 
  510     uint8_t *
src= s-> input_picture->data[plane_index];
 
  513     const int w= p->
width;
 
  515     int index= mb_x + mb_y*b_stride;
 
  524     b->
color[plane_index]= 0;
 
  525     memset(dst, 0, obmc_stride*obmc_stride*
sizeof(
IDWTELEM));
 
  528         int mb_x2= mb_x + (i &1) - 1;
 
  529         int mb_y2= mb_y + (i>>1) - 1;
 
  530         int x= block_w*mb_x2 + block_w/2;
 
  531         int y= block_h*mb_y2 + block_h/2;
 
  534                     x, y, block_w, block_h, w, h, obmc_stride, ref_stride, obmc_stride, mb_x2, mb_y2, 0, 0, plane_index);
 
  536         for(y2= 
FFMAX(y, 0); y2<
FFMIN(h, y+block_h); y2++){
 
  537             for(x2= 
FFMAX(x, 0); x2<
FFMIN(w, x+block_w); x2++){
 
  538                 int index= x2-(block_w*mb_x - block_w/2) + (y2-(block_h*mb_y - block_h/2))*obmc_stride;
 
  539                 int obmc_v= obmc[
index];
 
  541                 if(y<0) obmc_v += obmc[index + block_h*obmc_stride];
 
  542                 if(x<0) obmc_v += obmc[index + block_w];
 
  543                 if(y+block_h>h) obmc_v += obmc[index - block_h*obmc_stride];
 
  544                 if(x+block_w>w) obmc_v += obmc[index - block_w];
 
  549                 ab += (
src[x2 + y2*ref_stride] - (d>>
FRAC_BITS)) * obmc_v;
 
  550                 aa += obmc_v * obmc_v; 
 
  562     int index= x + y*b_stride;
 
  566     const BlockNode *tl    = y && x ? &s->
block[index-b_stride-1] : left;
 
  567     const BlockNode *tr    = y && x+w<b_stride ? &s->
block[index-b_stride+w] : tl;
 
  572     if(x<0 || x>=b_stride || y>=b_height)
 
  588         pred_mv(s, &dmx, &dmy, b->
ref, left, top, tr);
 
  600     const int block_w    = plane_index ? block_size>>s->
chroma_h_shift : block_size;
 
  601     const int block_h    = plane_index ? block_size>>s->
chroma_v_shift : block_size;
 
  602     const int obmc_stride= plane_index ? (2*block_size)>>s->
chroma_h_shift : 2*block_size;
 
  605     uint8_t *
src= s->  input_picture->data[plane_index];
 
  611     const int w= p->
width;
 
  616     int sx= block_w*mb_x - block_w/2;
 
  617     int sy= block_h*mb_y - block_h/2;
 
  618     int x0= 
FFMAX(0,-sx);
 
  619     int y0= 
FFMAX(0,-sy);
 
  620     int x1= 
FFMIN(block_w*2, w-sx);
 
  621     int y1= 
FFMIN(block_h*2, h-sy);
 
  626     ff_snow_pred_block(s, cur, tmp, ref_stride, sx, sy, block_w*2, block_h*2, &s->
block[mb_x + mb_y*b_stride], plane_index, w, h);
 
  628     for(y=y0; y<y1; y++){
 
  629         const uint8_t *obmc1= obmc_edged[
y];
 
  631         uint8_t *cur1 = cur + y*ref_stride;
 
  632         uint8_t *dst1 = dst + sx + (sy+
y)*ref_stride;
 
  633         for(x=x0; x<x1; x++){
 
  634 #if FRAC_BITS >= LOG2_OBMC_MAX 
  640             if(v&(~255)) v= ~(v>>31);
 
  647         && (mb_x == 0 || mb_x == b_stride-1)
 
  648         && (mb_y == 0 || mb_y == b_height-1)){
 
  658             memcpy(dst + sx+x0 + (sy+y)*ref_stride, cur + x0 + y*ref_stride, x1-x0);
 
  669             distortion = 
ff_w97_32_c(&s->
m, 
src + sx + sy*ref_stride, dst + sx + sy*ref_stride, ref_stride, 32);
 
  671             distortion = 
ff_w53_32_c(&s->
m, 
src + sx + sy*ref_stride, dst + sx + sy*ref_stride, ref_stride, 32);
 
  675                 int off = sx+16*(i&1) + (sy+16*(i>>1))*ref_stride;
 
  676                 distortion += s->
mecc.
me_cmp[0](&s->
m, 
src + off, dst + off, ref_stride, 16);
 
  681         distortion = s->
mecc.
me_cmp[0](&s->
m, 
src + sx + sy*ref_stride, dst + sx + sy*ref_stride, ref_stride, block_w*2);
 
  690             rate += 
get_block_bits(s, mb_x + (i&1) - (i>>1), mb_y + (i>>1), 1);
 
  692         if(mb_x == b_stride-2)
 
  695     return distortion + rate*penalty_factor;
 
  702     const int block_w    = plane_index ? block_size>>s->
chroma_h_shift : block_size;
 
  703     const int block_h    = plane_index ? block_size>>s->
chroma_v_shift : block_size;
 
  705     const int obmc_stride= plane_index ? (2*block_size)>>s->
chroma_h_shift : 2*block_size;
 
  708     uint8_t *
src= s-> input_picture->data[plane_index];
 
  713     const int w= p->
width;
 
  722         int mb_x2= mb_x + (i%3) - 1;
 
  723         int mb_y2= mb_y + (i/3) - 1;
 
  724         int x= block_w*mb_x2 + block_w/2;
 
  725         int y= block_h*mb_y2 + block_h/2;
 
  728                    x, y, block_w, block_h, w, h, 0, ref_stride, obmc_stride, mb_x2, mb_y2, 1, 1, plane_index);
 
  731         for(y2= y; y2<0; y2++)
 
  732             memcpy(dst + x + y2*ref_stride, 
src + x + y2*ref_stride, block_w);
 
  733         for(y2= h; y2<y+block_h; y2++)
 
  734             memcpy(dst + x + y2*ref_stride, 
src + x + y2*ref_stride, block_w);
 
  736             for(y2= y; y2<y+block_h; y2++)
 
  737                 memcpy(dst + x + y2*ref_stride, 
src + x + y2*ref_stride, -x);
 
  740             for(y2= y; y2<y+block_h; y2++)
 
  741                 memcpy(dst + w + y2*ref_stride, 
src + w + y2*ref_stride, x+block_w - w);
 
  745         distortion += s->
mecc.
me_cmp[block_w==8](&s->
m, 
src + x + y*ref_stride, dst + x + y*ref_stride, ref_stride, block_h);
 
  759         for(i=merged?4:0; i<9; i++){
 
  760             static const int dxy[9][2] = {{0,0},{1,0},{0,1},{1,1},{2,0},{2,1},{-1,2},{0,2},{1,2}};
 
  764     return distortion + rate*penalty_factor;
 
  768     const int w= b->
width;
 
  781                 int l=0, lt=0, t=0, rt=0;
 
  785                     t= src[x + (y-1)*stride];
 
  787                         lt= src[x - 1 + (y-1)*stride];
 
  790                         rt= src[x + 1 + (y-1)*stride];
 
  803                     if(px<b->parent->width && py<b->parent->height)
 
  804                         p= parent[px + py*2*
stride];
 
  808                         runs[run_index++]= 
run;
 
  816         max_index= run_index;
 
  817         runs[run_index++]= 
run;
 
  819         run= runs[run_index++];
 
  822         if(run_index <= max_index)
 
  832                 int l=0, lt=0, t=0, rt=0;
 
  836                     t= src[x + (y-1)*stride];
 
  838                         lt= src[x - 1 + (y-1)*stride];
 
  841                         rt= src[x + 1 + (y-1)*stride];
 
  854                     if(px<b->parent->width && py<b->parent->height)
 
  855                         p= parent[px + py*2*
stride];
 
  863                         run= runs[run_index++];
 
  865                         if(run_index <= max_index)
 
  875                     int l2= 2*
FFABS(l) + (l<0);
 
  905         block->
color[0] = p[0];
 
  906         block->
color[1] = p[1];
 
  907         block->
color[2] = p[2];
 
  937     return check_block(s, mb_x, mb_y, p, 0, obmc_edged, best_rd);
 
  950     backup[0] = block[0];
 
  951     backup[1] = block[1];
 
  952     backup[2] = block[b_stride];
 
  953     backup[3] = block[b_stride + 1];
 
  969     block[1]= block[b_stride]= block[b_stride+1]= *
block;
 
  980         block[b_stride]= backup[2];
 
  981         block[b_stride+1]= backup[3];
 
  987     int pass, mb_x, mb_y;
 
  990     const int b_stride= b_width;
 
  997         for(mb_y= 0; mb_y<s->
b_height; mb_y++)
 
  998             for(mb_x= 0; mb_x<s->
b_width; mb_x++)
 
 1004     for(pass=0; pass<25; pass++){
 
 1007         for(mb_y= 0; mb_y<b_height; mb_y++){
 
 1008             for(mb_x= 0; mb_x<b_width; mb_x++){
 
 1009                 int dia_change, i, j, ref;
 
 1010                 int best_rd= INT_MAX, ref_rd;
 
 1012                 const int index= mb_x + mb_y * b_stride;
 
 1021                 BlockNode *brb= mb_x+1<b_width && mb_y+1<b_height ? &s->
block[index+b_stride+1] : 
NULL;
 
 1038                     for (y = 0; y < b_w * 2; y++)
 
 1041                         for(y=0; y<b_w*2; y++)
 
 1042                             memset(obmc_edged[y], obmc_edged[y][0] + obmc_edged[y][b_w-1], b_w);
 
 1043                     if(mb_x==b_stride-1)
 
 1044                         for(y=0; y<b_w*2; y++)
 
 1045                             memset(obmc_edged[y]+b_w, obmc_edged[y][b_w] + obmc_edged[y][b_w*2-1], b_w);
 
 1047                         for(x=0; x<b_w*2; x++)
 
 1048                             obmc_edged[0][x] += obmc_edged[b_w-1][x];
 
 1049                         for(y=1; y<b_w; y++)
 
 1050                             memcpy(obmc_edged[y], obmc_edged[0], b_w*2);
 
 1052                     if(mb_y==b_height-1){
 
 1053                         for(x=0; x<b_w*2; x++)
 
 1054                             obmc_edged[b_w*2-1][x] += obmc_edged[b_w][x];
 
 1055                         for(y=b_w; y<b_w*2-1; y++)
 
 1056                             memcpy(obmc_edged[y], obmc_edged[b_w*2-1], b_w*2);
 
 1061                 if(mb_x==0 || mb_y==0 || mb_x==b_width-1 || mb_y==b_height-1){
 
 1067                     const int sx= block_w*mb_x - block_w/2;
 
 1068                     const int sy= block_h*mb_y - block_h/2;
 
 1074                         memcpy(dst + sx + y*stride, src + sx + y*stride, block_w*2);
 
 1075                     for(y=h; y<sy+block_h*2; y++)
 
 1076                         memcpy(dst + sx + y*stride, src + sx + y*stride, block_w*2);
 
 1078                         for(y=sy; y<sy+block_h*2; y++)
 
 1079                             memcpy(dst + sx + y*stride, src + sx + y*stride, -sx);
 
 1081                     if(sx+block_w*2 > w){
 
 1082                         for(y=sy; y<sy+block_h*2; y++)
 
 1083                             memcpy(dst + w + y*stride, src + w + y*stride, sx+block_w*2 - w);
 
 1089                     color[i]= 
get_dc(s, mb_x, mb_y, i);
 
 1094                     check_block(s, mb_x, mb_y, color0, 1, obmc_edged, &best_rd);
 
 1110                         check_block_inter(s, mb_x, mb_y, mvr[-b_stride][0], mvr[-b_stride][1], obmc_edged, &best_rd);
 
 1116                         check_block_inter(s, mb_x, mb_y, mvr[b_stride][0], mvr[b_stride][1], obmc_edged, &best_rd);
 
 1121                         int newx = block->
mx;
 
 1122                         int newy = block->
my;
 
 1125                         for(i=0; i < dia_size; i++){
 
 1127                                 dia_change |= 
check_block_inter(s, mb_x, mb_y, newx+4*(i-j), newy+(4*j), obmc_edged, &best_rd);
 
 1128                                 dia_change |= 
check_block_inter(s, mb_x, mb_y, newx-4*(i-j), newy-(4*j), obmc_edged, &best_rd);
 
 1129                                 dia_change |= 
check_block_inter(s, mb_x, mb_y, newx-(4*j), newy+4*(i-j), obmc_edged, &best_rd);
 
 1130                                 dia_change |= 
check_block_inter(s, mb_x, mb_y, newx+(4*j), newy-4*(i-j), obmc_edged, &best_rd);
 
 1136                         static const int square[8][2]= {{+1, 0},{-1, 0},{ 0,+1},{ 0,-1},{+1,+1},{-1,-1},{+1,-1},{-1,+1},};
 
 1139                             dia_change |= 
check_block_inter(s, mb_x, mb_y, block->
mx+square[i][0], block->
my+square[i][1], obmc_edged, &best_rd);
 
 1143                     mvr[0][0]= block->
mx;
 
 1144                     mvr[0][1]= block->
my;
 
 1145                     if(ref_rd > best_rd){
 
 1152                 check_block(s, mb_x, mb_y, color, 1, obmc_edged, &best_rd);
 
 1174         for(mb_y= 0; mb_y<b_height; mb_y+=2){
 
 1175             for(mb_x= 0; mb_x<b_width; mb_x+=2){
 
 1177                 int best_rd, init_rd;
 
 1178                 const int index= mb_x + mb_y * b_stride;
 
 1183                 b[2]= b[0]+b_stride;
 
 1198                                    (b[0]->mx + b[1]->mx + b[2]->mx + b[3]->mx + 2) >> 2,
 
 1199                                    (b[0]->my + b[1]->my + b[2]->my + b[3]->my + 2) >> 2, 0, &best_rd);
 
 1205                 if(init_rd != best_rd)
 
 1236     const int w= b->
width;
 
 1240     int x,
y, thres1, thres2;
 
 1245                 dst[x + y*stride]= src[x + y*stride];
 
 1249     bias= bias ? 0 : (3*qmul)>>3;
 
 1256                 int i= src[x + y*
stride];
 
 1258                 if((
unsigned)(i+thres1) > thres2){
 
 1276                 int i= src[x + y*
stride];
 
 1278                 if((
unsigned)(i+thres1) > thres2){
 
 1281                         i= (i + bias) / qmul; 
 
 1286                         i= (i + bias) / qmul; 
 
 1297     const int w= b->
width;
 
 1308             int i= src[x + y*
stride];
 
 1319     const int w= b->
width;
 
 1323     for(y=h-1; y>=0; y--){
 
 1324         for(x=w-1; x>=0; x--){
 
 1329                     if(y && x+1<w) src[i] -= 
mid_pred(src[i - 1], src[i - stride], src[i - stride + 1]);
 
 1330                     else  src[i] -= src[i - 1];
 
 1332                     if(y) src[i] -= 
mid_pred(src[i - 1], src[i - stride], src[i - 1] + src[i - stride] - src[i - 1 - stride]);
 
 1333                     else  src[i] -= src[i - 1];
 
 1336                 if(y) src[i] -= src[i - 
stride];
 
 1343     const int w= b->
width;
 
 1353                     if(y && x+1<w) src[i] += 
mid_pred(src[i - 1], src[i - stride], src[i - stride + 1]);
 
 1354                     else  src[i] += src[i - 1];
 
 1356                     if(y) src[i] += 
mid_pred(src[i - 1], src[i - stride], src[i - 1] + src[i - stride] - src[i - 1 - stride]);
 
 1357                     else  src[i] += src[i - 1];
 
 1360                 if(y) src[i] += src[i - 
stride];
 
 1367     int plane_index, 
level, orientation;
 
 1369     for(plane_index=0; plane_index<
FFMIN(s->
nb_planes, 2); plane_index++){
 
 1371             for(orientation=level ? 1:0; orientation<4; orientation++){
 
 1372                 if(orientation==2) 
continue;
 
 1383     memset(kstate, 
MID_STATE, 
sizeof(kstate));
 
 1393         for(plane_index=0; plane_index<2; plane_index++){
 
 1420         for(plane_index=0; plane_index<
FFMIN(s->
nb_planes, 2); plane_index++){
 
 1428             for(plane_index=0; plane_index<
FFMIN(s->
nb_planes, 2); plane_index++){
 
 1432                 for(i= p->
htaps/2; i; i--)
 
 1456         for(plane_index=0; plane_index<2; plane_index++){
 
 1482     uint32_t coef_sum= 0;
 
 1483     int level, orientation, delta_qlog;
 
 1486         for(orientation=level ? 1 : 0; orientation<4; orientation++){
 
 1489             const int w= b->
width;
 
 1491             const int stride= b->
stride;
 
 1494             const int qdiv= (1<<16)/qmul;
 
 1499                     buf[x+y*stride]= b->
buf[x+y*stride];
 
 1504                     coef_sum+= abs(buf[x+y*stride]) * qdiv >> 16;
 
 1510     coef_sum = (uint64_t)coef_sum * coef_sum >> 16;
 
 1525     s->
qlog+= delta_qlog;
 
 1532     int level, orientation, x, 
y;
 
 1535         for(orientation=level ? 1 : 0; orientation<4; orientation++){
 
 1544                 for(x=0; x<
width; x++){
 
 1550             b->
qlog= (int)(log(352256.0/sqrt(error)) / log(pow(2.0, 1.0/
QROOT))+0.5);
 
 1556                         const AVFrame *pict, 
int *got_packet)
 
 1563     int level, orientation, plane_index, i, 
y, ret;
 
 1579                    FF_CEIL_RSHIFT(width, hshift));
 
 1645         int block_width = (width +15)>>4;
 
 1646         int block_height= (height+15)>>4;
 
 1655         s->
m.   last_picture_ptr= &s->
m.   last_picture;
 
 1666 #if FF_API_MOTION_EST 
 1712         for(plane_index=0; plane_index < s->
nb_planes; plane_index++){
 
 1722     for(plane_index=0; plane_index < s->nb_planes; plane_index++){
 
 1731             if(pict->
data[plane_index]) 
 
 1769                 if (delta_qlog <= INT_MIN)
 
 1782                 for(orientation=level ? 1 : 0; orientation<4; orientation++){
 
 1797                 for(orientation=level ? 1 : 0; orientation<4; orientation++){
 
 1819                             pict->
data[plane_index][y*pict->
linesize[plane_index] + x];
 
 1830             if(pict->
data[plane_index]) 
 
 1894 #define OFFSET(x) offsetof(SnowContext, x) 
 1895 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM 
 1899     { 
"memc_only",      
"Only do ME/MC (I frames -> ref, P frame -> ME+MC).",   
OFFSET(memc_only), 
AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, 
VE },
 
 1900     { 
"no_bitstream",   
"Skip final bitstream writeout.",                    
OFFSET(no_bitstream), 
AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, 
VE },
 
 1901     { 
"intra_penalty",  
"Penalty for intra blocks in block decission",      
OFFSET(intra_penalty), 
AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, 
VE },
 
 1902     { 
"iterative_dia_size",  
"Dia size for the iterative ME",          
OFFSET(iterative_dia_size), 
AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, 
VE },
 
 1955         fprintf(stderr, 
"Failed to allocate memory\n");
 
 1961     printf(
"testing 5/3 DWT\n");
 
 1963         buffer[0][i] = buffer[1][i] = 
av_lfg_get(&prng) % 54321 - 12345;
 
 1969         if(buffer[0][i]!= buffer[1][i]) printf(
"fsck: %6d %12d %7d\n",i, buffer[0][i], buffer[1][i]);
 
 1971     printf(
"testing 9/7 DWT\n");
 
 1974         buffer[0][i] = buffer[1][i] = 
av_lfg_get(&prng) % 54321 - 12345;
 
 1980         if(
FFABS(buffer[0][i] - buffer[1][i])>20) printf(
"fsck: %6d %12d %7d\n",i, buffer[0][i], buffer[1][i]);
 
 1983     int level, orientation, x, 
y;
 
 1984     int64_t errors[8][4];
 
 1987         memset(errors, 0, 
sizeof(errors));
 
 1991             for(orientation=level ? 1 : 0; orientation<4; orientation++){
 
 1998                 if(orientation&1) buf+=w;
 
 1999                 if(orientation>1) buf+=stride>>1;
 
 2001                 memset(buffer[0], 0, 
sizeof(
int)*
width*height);
 
 2002                 buf[w/2 + h/2*
stride]= 256*256;
 
 2005                     for(x=0; x<
width; x++){
 
 2006                         int64_t d= buffer[0][x + y*
width];
 
 2008                         if(
FFABS(width/2-x)<9 && 
FFABS(height/2-y)<9 && level==2) printf(
"%8"PRId64
" ", d);
 
 2010                     if(
FFABS(height/2-y)<9 && level==2) printf(
"\n");
 
 2012                 error= (int)(sqrt(error)+0.5);
 
 2013                 errors[
level][orientation]= error;
 
 2014                 if(g) g=
av_gcd(g, error);
 
 2018         printf(
"static int const visual_weight[][4]={\n");
 
 2021             for(orientation=0; orientation<4; orientation++){
 
 2022                 printf(
"%8"PRId64
",", errors[level][orientation]/g);
 
 2038             memset(buffer[0], 0, 
sizeof(
int)*width*height);
 
 2040                 for(x=0; x<
width; x++){
 
 2041                     int tab[4]={0,2,3,1};
 
 2042                     buffer[0][x+width*
y]= 256*256*tab[(x&1) + 2*(y&1)];
 
 2047                 for(x=0; x<
width; x++){
 
 2048                     int64_t d= buffer[0][x + y*
width];
 
 2050                     if(
FFABS(width/2-x)<9 && 
FFABS(height/2-y)<9) printf(
"%8"PRId64
" ", d);
 
 2052                 if(
FFABS(height/2-y)<9) printf(
"\n");
 
uint8_t * scratchpad
data area for the ME algo, so that the ME does not need to malloc/free. 
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
static const AVClass snowenc_class
static av_cold int encode_end(AVCodecContext *avctx)
int frame_bits
bits used for the current frame 
RateControlContext rc_context
contains stuff only accessed in ratecontrol.c 
static av_always_inline void predict_plane(SnowContext *s, IDWTELEM *buf, int plane_index, int add)
int ff_snow_frame_start(SnowContext *s)
av_cold void ff_rate_control_uninit(MpegEncContext *s)
int last_spatial_decomposition_count
static int shift(int a, int b)
This structure describes decoded (raw) audio or video data. 
int skip
set if ME is skipped for the current MB 
static double rint(double x)
int ff_side_data_set_encoder_stats(AVPacket *pkt, int quality, int64_t *error, int error_count, int pict_type)
uint64_t error[AV_NUM_DATA_POINTERS]
error 
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples) 
#define LIBAVUTIL_VERSION_INT
void ff_h263_encode_init(MpegEncContext *s)
int ff_epzs_motion_search(struct MpegEncContext *s, int *mx_ptr, int *my_ptr, int P[10][2], int src_index, int ref_index, int16_t(*last_mv)[2], int ref_mv_scale, int size, int h)
static av_cold int init(AVCodecContext *avctx)
uint8_t * current_mv_penalty
#define FF_MPV_COMMON_OPTS
const AVFrame * new_picture
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx. 
uint32_t * score_map
map to store the scores 
int8_t last_hcoeff[HTAPS_MAX/2]
int ff_snow_common_init_after_header(AVCodecContext *avctx)
static void update_last_header_values(SnowContext *s)
void ff_snow_reset_contexts(SnowContext *s)
static void set_blocks(SnowContext *s, int level, int x, int y, int l, int cb, int cr, int mx, int my, int ref, int type)
attribute_deprecated int me_method
This option does nothing. 
int scenechange_threshold
scene change detection threshold 0 is default, larger means fewer detected scene changes. 
uint32_t ff_square_tab[512]
static int encode_subband_c0run(SnowContext *s, SubBand *b, const IDWTELEM *src, const IDWTELEM *parent, int stride, int orientation)
int qlog
log(qscale)/log[2^(1/6)] 
int ff_rac_terminate(RangeCoder *c)
static int get_penalty_factor(int lambda, int lambda2, int type)
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
#define av_assert0(cond)
assert() equivalent, that is always enabled. 
static double cb(void *priv, double x, double y)
av_cold void ff_mpegvideoencdsp_init(MpegvideoEncDSPContext *c, AVCodecContext *avctx)
#define FF_CODEC_CAP_INIT_THREADSAFE
The codec does not modify any global variables in the init function, allowing to call the init functi...
static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *pict, int *got_packet)
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values. 
static av_noinline void put_symbol(RangeCoder *c, uint8_t *state, int v, int is_signed)
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code. 
static float search(FOCContext *foc, int pass, int maxpass, int xmin, int xmax, int ymin, int ymax, int *best_x, int *best_y, float best_score)
enum OutputFormat out_format
output format 
uint32_t * ref_scores[MAX_REF_FRAMES]
int ff_get_mb_score(struct MpegEncContext *s, int mx, int my, int src_index, int ref_index, int size, int h, int add_rate)
Motion estimation context. 
int av_frame_ref(AVFrame *dst, const AVFrame *src)
Set up a new reference to the data described by the source frame. 
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user). 
int misc_bits
cbp, mb_type 
int me_cmp
motion estimation comparison function 
Picture current_picture
copy of the current picture structure. 
#define ENCODER_EXTRA_BITS
static void calculate_visual_weight(SnowContext *s, Plane *p)
uint8_t(* mv_penalty)[MAX_MV *2+1]
bit amount needed to encode a MV 
int ff_w97_32_c(struct MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t line_size, int h)
static const BlockNode null_block
static void encode_blocks(SnowContext *s, int search)
int mb_height
number of MBs horizontally & vertically 
void ff_snow_release_buffer(AVCodecContext *avctx)
char * stats_out
pass1 encoding statistics output buffer 
#define AV_INPUT_BUFFER_MIN_SIZE
minimum encoding buffer size Used to avoid some checks during header writing. 
static void put_symbol2(RangeCoder *c, uint8_t *state, int v, int log2)
#define ROUNDED_DIV(a, b)
#define AV_PKT_FLAG_KEY
The packet contains a keyframe. 
MpegvideoEncDSPContext mpvencdsp
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered. 
int16_t(*[MAX_REF_FRAMES] ref_mvs)[2]
#define AV_CODEC_FLAG_4MV
4 MV per MB allowed / advanced prediction for H.263. 
unsigned me_cache_generation
av_cold int ff_rate_control_init(MpegEncContext *s)
int me_sub_cmp
subpixel motion estimation comparison function 
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g. 
void ff_write_pass1_stats(MpegEncContext *s)
int unrestricted_mv
mv can point outside of the coded picture 
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
static void pred_mv(DiracBlock *block, int stride, int x, int y, int ref)
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers. 
const uint8_t *const ff_obmc_tab[4]
int flags
AV_CODEC_FLAG_*. 
static int get_dc(SnowContext *s, int mb_x, int mb_y, int plane_index)
#define CODEC_FLAG_QSCALE
int64_t av_gcd(int64_t a, int64_t b)
Return the greatest common divisor of a and b. 
const char * name
Name of the codec implementation. 
static void correlate(SnowContext *s, SubBand *b, IDWTELEM *src, int stride, int inverse, int use_median)
int quarter_sample
1->qpel, 0->half pel ME/MC 
Libavcodec external API header. 
uint8_t * emu_edge_buffer
int flags
A combination of AV_PKT_FLAG values. 
int refs
number of reference frames 
int bit_rate
the average bitrate 
const int8_t ff_quant3bA[256]
enum AVPictureType pict_type
Picture type of the frame. 
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code. 
#define AV_CODEC_FLAG_QSCALE
Use fixed qscale. 
int display_picture_number
picture number in display order 
int me_method
ME algorithm. 
static av_always_inline int check_block_inter(SnowContext *s, int mb_x, int mb_y, int p0, int p1, uint8_t(*obmc_edged)[MB_SIZE *2], int *best_rd)
int width
picture width / height. 
GLsizei GLboolean const GLfloat * value
Picture * current_picture_ptr
pointer to the current picture 
#define FF_CEIL_RSHIFT(a, b)
#define AV_CODEC_FLAG_PSNR
error[?] variables will be set during encoding. 
static int encode_q_branch(SnowContext *s, int level, int x, int y)
float ff_rate_estimate_qscale(MpegEncContext *s, int dry_run)
#define AV_CODEC_FLAG_PASS1
Use internal 2pass ratecontrol in first pass mode. 
static av_always_inline void add_yblock(SnowContext *s, int sliced, slice_buffer *sb, IDWTELEM *dst, uint8_t *dst8, const uint8_t *obmc, int src_x, int src_y, int b_w, int b_h, int w, int h, int dst_stride, int src_stride, int obmc_stride, int b_x, int b_y, int add, int offset_dst, int plane_index)
void ff_build_rac_states(RangeCoder *c, int factor, int max_p)
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
int quality
quality (between 1 (good) and FF_LAMBDA_MAX (bad)) 
void avcodec_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift)
Utility function to access log2_chroma_w log2_chroma_h from the pixel format AVPixFmtDescriptor. 
int penalty_factor
an estimate of the bits required to code a given mv value, e.g. 
static const float pred[4]
SubBand band[MAX_DWT_LEVELS][4]
static av_always_inline int same_block(BlockNode *a, BlockNode *b)
uint8_t block_state[128+32 *128]
int coded_picture_number
picture number in bitstream order 
uint64_t error[AV_NUM_DATA_POINTERS]
error 
int ff_snow_get_buffer(SnowContext *s, AVFrame *frame)
unsigned int lambda2
(lambda*lambda) >> FF_LAMBDA_SHIFT 
static void encode_header(SnowContext *s)
ptrdiff_t linesize
line size, in bytes, may be different from width 
int spatial_decomposition_count
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line. 
void ff_set_cmp(MECmpContext *c, me_cmp_func *cmp, int type)
int frame_bits
number of bits used for the previously encoded frame 
main external API structure. 
int8_t hcoeff[HTAPS_MAX/2]
void ff_snow_pred_block(SnowContext *s, uint8_t *dst, uint8_t *tmp, ptrdiff_t stride, int sx, int sy, int b_w, int b_h, const BlockNode *block, int plane_index, int w, int h)
int height
picture size. must be a multiple of 16 
int ff_snow_alloc_blocks(SnowContext *s)
static unsigned int av_lfg_get(AVLFG *c)
Get the next random unsigned 32-bit number using an ALFG. 
static int get_rac_count(RangeCoder *c)
static void encode_q_branch2(SnowContext *s, int level, int x, int y)
unsigned me_cache[ME_CACHE_SIZE]
BYTE int const BYTE int int int height
planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples) 
Describe the class of an AVClass context structure. 
av_cold void ff_init_range_encoder(RangeCoder *c, uint8_t *buf, int buf_size)
int64_t mc_mb_var_sum
motion compensated MB variance for current frame 
static int get_block_bits(SnowContext *s, int x, int y, int w)
void ff_spatial_idwt(IDWTELEM *buffer, IDWTELEM *temp, int width, int height, int stride, int type, int decomposition_count)
ptrdiff_t uvlinesize
line size, for chroma in bytes, may be different from width 
av_cold void av_lfg_init(AVLFG *c, unsigned int seed)
int ff_w53_32_c(struct MpegEncContext *v, uint8_t *pix1, uint8_t *pix2, ptrdiff_t line_size, int h)
DWTELEM * temp_dwt_buffer
int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int64_t min_size)
Check AVPacket size and/or allocate data. 
int f_code
forward MV resolution 
int pict_type
AV_PICTURE_TYPE_I, AV_PICTURE_TYPE_P, AV_PICTURE_TYPE_B, ... 
static enum AVPixelFormat pix_fmts[]
static int qscale2qlog(int qscale)
static int pix_sum(uint8_t *pix, int line_size, int w, int h)
int ff_snow_common_init(AVCodecContext *avctx)
static void encode_qlogs(SnowContext *s)
int motion_est
ME algorithm. 
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields. 
int global_quality
Global quality for codecs which cannot change it per frame. 
int ff_init_me(MpegEncContext *s)
#define AV_CODEC_FLAG_QPEL
Use qpel MC. 
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes. 
int spatial_decomposition_type
AVFrame * current_picture
static int get_block_rd(SnowContext *s, int mb_x, int mb_y, int plane_index, uint8_t(*obmc_edged)[MB_SIZE *2])
int b8_stride
2*mb_width+1 used for some 8x8 block arrays to allow simple addressing 
struct AVCodecContext * avctx
int gop_size
the number of pictures in a group of pictures, or 0 for intra_only 
static int get_4block_rd(SnowContext *s, int mb_x, int mb_y, int plane_index)
#define CODEC_FLAG_EMU_EDGE
GLint GLenum GLboolean GLsizei stride
int mb_cmp
macroblock comparison function (not supported yet) 
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples) 
int temporal_decomposition_type
#define FF_DISABLE_DEPRECATION_WARNINGS
common internal api header. 
int mb_stride
mb_width+1 used for some arrays to allow simple addressing of left & top MBs without sig11 ...
IDWTELEM * temp_idwt_buffer
void ff_spatial_dwt(DWTELEM *buffer, DWTELEM *temp, int width, int height, int stride, int type, int decomposition_count)
int prediction_method
prediction method (needed for huffyuv) 
DWTELEM * spatial_dwt_buffer
attribute_deprecated AVFrame * coded_frame
the picture in the bitstream 
static av_cold int encode_init(AVCodecContext *avctx)
me_cmp_func me_sub_cmp[6]
static const AVOption options[]
uint32_t * map
map to avoid duplicate evaluations 
IDWTELEM * spatial_idwt_buffer
uint8_t * bytestream_start
#define AV_CODEC_FLAG_PASS2
Use internal 2pass ratecontrol in second pass mode. 
static av_always_inline int check_4block_inter(SnowContext *s, int mb_x, int mb_y, int p0, int p1, int ref, int *best_rd)
static void dequantize(SnowContext *s, SubBand *b, IDWTELEM *src, int stride)
int dia_size
ME diamond size & shape. 
#define FF_ENABLE_DEPRECATION_WARNINGS
uint8_t * obmc_scratchpad
void(* draw_edges)(uint8_t *buf, int wrap, int width, int height, int w, int h, int sides)
static void init_ref(MotionEstContext *c, uint8_t *src[3], uint8_t *ref[3], uint8_t *ref2[3], int x, int y, int ref_index)
int64_t bit_rate
wanted bit rate 
int key_frame
1 -> keyframe, 0-> not 
#define FF_QP2LAMBDA
factor to convert from H.263 QP to lambda 
static const struct twinvq_data tab
av_cold void ff_snow_common_end(SnowContext *s)
static void * av_mallocz_array(size_t nmemb, size_t size)
int frame_number
Frame counter, set by libavcodec. 
static uint32_t inverse(uint32_t v)
find multiplicative inverse modulo 2 ^ 32 
int main(int argc, char **argv)
static int ratecontrol_1pass(SnowContext *s, AVFrame *pict)
AVFrame * last_picture[MAX_REF_FRAMES]
static double cr(void *priv, double x, double y)
AVFrame * input_picture
new_picture with the internal linesizes 
static int pix_norm1(uint8_t *pix, int line_size, int w)
int temporal_decomposition_count
int64_t mb_var_sum
sum of MB variance for current frame 
AVPixelFormat
Pixel format. 
This structure stores compressed data. 
static void decorrelate(SnowContext *s, SubBand *b, IDWTELEM *src, int stride, int inverse, int use_median)
int(* sub_motion_search)(struct MpegEncContext *s, int *mx_ptr, int *my_ptr, int dmin, int src_index, int ref_index, int size, int h)
static void quantize(SnowContext *s, SubBand *b, IDWTELEM *dst, DWTELEM *src, int stride, int bias)
void * av_mallocz(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
static int encode_subband(SnowContext *s, SubBand *b, const IDWTELEM *src, const IDWTELEM *parent, int stride, int orientation)
int last_spatial_decomposition_type
unsigned int lambda
lagrange multipler used in rate distortion 
static void iterative_me(SnowContext *s)
static av_always_inline int check_block(SnowContext *s, int mb_x, int mb_y, int p[3], int intra, uint8_t(*obmc_edged)[MB_SIZE *2], int *best_rd)