45 #define UNI_MPEG4_ENC_INDEX(last,run,level) ((last)*128*64 + (run)*128 + (level))
67 for(j=1; j<=block_last_index; j++){
68 const int index= scantable[j];
72 if((level&(~127)) == 0){
134 int16_t *ac_val, *ac_val1;
144 if(s->
mb_y==0 || s->
qscale == qscale_table[xy] || n==2 || n==3){
166 if(s->
mb_x==0 || s->
qscale == qscale_table[xy] || n==1 || n==3){
187 if(block[n][ st[n][i] ])
break;
214 for(i=0; i<s->
mb_num; i++){
216 odd += qscale_table[mb_xy]&1;
219 if(2*odd > s->
mb_num) odd=1;
222 for(i=0; i<s->
mb_num; i++){
224 if((qscale_table[mb_xy]&1) != odd)
225 qscale_table[mb_xy]++;
226 if(qscale_table[mb_xy] > 31)
227 qscale_table[mb_xy]= 31;
230 for(i=1; i<s->
mb_num; i++){
277 level = (-
level) ^ ((1 << size) - 1);
300 int i, last_non_zero;
308 if(last_index<1)
return;
313 if(last_index<0)
return;
320 last_non_zero = i - 1;
321 for (; i < last_index; i++) {
322 int level = block[ scan_table[i] ];
324 int run = i - last_non_zero - 1;
326 if((level&(~127)) == 0){
328 put_bits(ac_pb, len_tab[index], bits_tab[index]);
330 put_bits(ac_pb, 7+2+1+6+1+12+1, (3<<23)+(3<<21)+(0<<20)+(run<<14)+(1<<13)+(((level-64)&0xfff)<<1)+1);
336 int level = block[ scan_table[i] ];
337 int run = i - last_non_zero - 1;
339 if((level&(~127)) == 0){
341 put_bits(ac_pb, len_tab[index], bits_tab[index]);
343 put_bits(ac_pb, 7+2+1+6+1+12+1, (3<<23)+(3<<21)+(1<<20)+(run<<14)+(1<<13)+(((level-64)&0xfff)<<1)+1);
351 int i, last_non_zero;
359 if(last_index<1)
return len;
363 if(last_index<0)
return 0;
369 last_non_zero = i - 1;
370 for (; i < last_index; i++) {
371 int level = block[ scan_table[i] ];
373 int run = i - last_non_zero - 1;
375 if((level&(~127)) == 0){
377 len += len_tab[
index];
379 len += 7+2+1+6+1+12+1;
385 int level = block[ scan_table[i] ];
386 int run = i - last_non_zero - 1;
388 if((level&(~127)) == 0){
390 len += len_tab[
index];
392 len += 7+2+1+6+1+12+1;
405 for (i = 0; i < 6; i++) {
410 for (i = 0; i < 6; i++) {
416 for (i = 0; i < 6; i++) {
421 for (i = 0; i < 6; i++) {
429 int motion_x,
int motion_y,
int mb_type)
437 for (i = 0; i < 6; i++)
445 if ((motion_x | motion_y | s->
dquant | mb_type) == 0)
448 zero_score *= lambda;
449 if (zero_score <= score)
453 for (i = 0; i < 6; i++) {
460 for (i = 0; i < 6; i++) {
473 int motion_x,
int motion_y)
475 int cbpc, cbpy, pred_x, pred_y;
485 static const int mb_type_table[8]= {-1, 3, 2, 1,-1,-1,-1, 0};
486 int mb_type= mb_type_table[s->
mv_dir];
515 cbp=
get_b_cbp(s, block, motion_x, motion_y, mb_type);
517 if ((cbp | motion_x | motion_y | mb_type) ==0) {
523 if(interleaved_stats){
551 if(interleaved_stats){
561 assert(mb_type > 0 && mb_type < 4);
607 if(interleaved_stats){
613 if(interleaved_stats){
618 cbp=
get_p_cbp(s, block, motion_x, motion_y);
645 b_pic = pic->
f.
data[0] + offset;
661 if(interleaved_stats){
691 if(interleaved_stats){
699 motion_y - pred_y, s->
f_code);
715 if(interleaved_stats){
727 s->
mv[0][0][1] - pred_y, s->
f_code);
729 s->
mv[0][1][1] - pred_y, s->
f_code);
742 if(interleaved_stats){
755 if(interleaved_stats){
761 if(interleaved_stats){
770 int zigzag_last_index[6];
771 uint8_t *scan_table[6];
787 for (i = 0; i < 6; i++) {
815 if(interleaved_stats){
821 if(interleaved_stats){
840 if(length)
put_bits(pbc, length, (1<<length)-1);
854 int hours, minutes, seconds;
866 minutes= seconds/60; seconds %= 60;
867 hours= minutes/60; minutes %= 60;
884 int profile_and_level_indication;
890 profile_and_level_indication= 0xF0;
892 profile_and_level_indication= 0x00;
896 profile_and_level_indication |= s->
avctx->
level;
898 profile_and_level_indication |= 1;
901 if(profile_and_level_indication>>4 == 0xF){
912 put_bits(&s->
pb, 8, profile_and_level_indication);
989 if (vo_ver_id == 1) {
1013 if (vo_ver_id != 1){
1033 int time_div, time_mod;
1056 assert(time_incr >= 0);
1088 int level, uni_code, uni_len;
1090 for(level=-256; level<256; level++){
1101 l= (-
level) ^ ((1 << size) - 1);
1110 uni_code<<=
size; uni_code|=l;
1113 uni_code<<=1; uni_code|=1;
1125 uni_code<<=
size; uni_code|=l;
1128 uni_code<<=1; uni_code|=1;
1139 int slevel,
run, last;
1144 for(slevel=-64; slevel<64; slevel++){
1145 if(slevel==0)
continue;
1146 for(run=0; run<64; run++){
1147 for(last=0; last<=1; last++){
1149 int level= slevel < 0 ? -slevel : slevel;
1150 int sign= slevel < 0 ? 1 : 0;
1154 len_tab[
index]= 100;
1160 bits=bits*2+sign; len++;
1162 if(code!=rl->
n && len < len_tab[index]){
1176 bits=bits*2+sign; len++;
1178 if(code!=rl->
n && len < len_tab[index]){
1186 bits=bits*4+2; len+=2;
1193 bits=bits*2+sign; len++;
1195 if(code!=rl->
n && len < len_tab[index]){
1203 bits=bits*4+3; len+=2;
1204 bits=bits*2+last; len++;
1205 bits=bits*64+
run; len+=6;
1206 bits=bits*2+1; len++;
1207 bits=bits*4096+(slevel&0xfff); len+=12;
1208 bits=bits*2+1; len++;
1210 if(len < len_tab[index]){
1223 static int done = 0;
1270 int size= end - start;
1271 int pb_size = (((intptr_t)start + size/3)&(~3)) - (intptr_t)start;
1272 int tex_size= (size - 2*pb_size)&(~3);
1308 int mb_num_bits= av_log2(s->
mb_num - 1) + 1;
1318 #define OFFSET(x) offsetof(MpegEncContext, x)
1319 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
1321 {
"data_partitioning",
"Use data partitioning.",
OFFSET(data_partitioning),
AV_OPT_TYPE_INT, { 0 }, 0, 1,
VE },
1322 {
"alternate_scan",
"Enable alternate scantable.",
OFFSET(alternate_scan),
AV_OPT_TYPE_INT, { 0 }, 0, 1,
VE },