[svn] / trunk / xvidcore / src / encoder.c Repository:
ViewVC logotype

Diff of /trunk/xvidcore/src/encoder.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 113, Wed Apr 10 07:40:51 2002 UTC revision 118, Sat Apr 13 16:30:02 2002 UTC
# Line 1  Line 1 
1    // 14.04.2002   added FrameCodeB()
2    
3  #include <stdlib.h>  #include <stdlib.h>
4  #include <stdio.h>  #include <stdio.h>
5  #include <math.h>  #include <math.h>
# Line 814  Line 816 
816    
817          return 0;                                        // inter          return 0;                                        // inter
818  }  }
819    
820    
821    
822    /*
823    static void FrameCodeB(Encoder * pEnc, FRAMEINFO * frame, Bitstream * bs, uint32_t *pBits)
824    {
825        int16_t dct_codes[6][64];
826        int16_t qcoeff[6][64];
827        uint32_t x, y;
828            VECTOR forward;
829            VECTOR backward;
830    
831        IMAGE *f_ref = &pEnc->reference->image;
832            IMAGE *b_ref = &pEnc->current->image;
833    
834            // forward
835            image_setedges(f_ref, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height, pEnc->mbParam.width, pEnc->mbParam.height);
836            start_timer();
837            image_interpolate(f_ref, &pEnc->f_refh, &pEnc->f_refv, &pEnc->f_refhv,
838                    pEnc->mbParam.edged_width, pEnc->mbParam.edged_height, 0);
839            stop_inter_timer();
840    
841            // backward
842            image_setedges(b_ref, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height, pEnc->mbParam.width, pEnc->mbParam.height);
843        start_timer();
844            image_interpolate(b_ref, &pEnc->vInterH, &pEnc->vInterV, &pEnc->vInterHV,
845                    pEnc->mbParam.edged_width, pEnc->mbParam.edged_height, 0);
846            stop_inter_timer();
847    
848            start_timer();
849            MotionEstimationBVOP(&pEnc->mbParam, frame,
850                    pEnc->reference->mbs, f_ref, &pEnc->f_refh, &pEnc->f_refv, &pEnc->f_refhv,
851                    pEnc->current->mbs, b_ref, &pEnc->vInterH, &pEnc->vInterV, &pEnc->vInterHV);
852    
853            stop_motion_timer();
854    
855            if (test_quant_type(&pEnc->mbParam, pEnc->current))
856            {
857                    BitstreamWriteVolHeader(bs, pEnc->mbParam.width, pEnc->mbParam.height, pEnc->mbParam.quant_type);
858            }
859    
860        frame->coding_type = B_VOP;
861        BitstreamWriteVopHeader(bs, B_VOP, frame->tick, 0,
862                            frame->quant, frame->fcode, frame->bcode);
863    
864        *pBits = BitstreamPos(bs);
865    
866        pEnc->sStat.iTextBits = 0;
867        pEnc->sStat.iMvSum = 0;
868        pEnc->sStat.iMvCount = 0;
869            pEnc->sStat.kblks = pEnc->sStat.mblks = pEnc->sStat.ublks = 0;
870    
871    
872        for (y = 0; y < pEnc->mbParam.mb_height; y++)
873            {
874                    // reset prediction
875    
876                    forward.x = 0;
877                    forward.y = 0;
878                    backward.x = 0;
879                    backward.y = 0;
880    
881                    for (x = 0; x < pEnc->mbParam.mb_width; x++)
882                    {
883                            MACROBLOCK * f_mb = &pEnc->reference->mbs[x + y * pEnc->mbParam.mb_width];
884                            MACROBLOCK * b_mb = &pEnc->current->mbs[x + y * pEnc->mbParam.mb_width];
885                            MACROBLOCK * mb = &frame->mbs[x + y * pEnc->mbParam.mb_width];
886    
887                            // decoder ignores mb when refence block is INTER(0,0), CBP=0
888                            if (mb->mode == MODE_NOT_CODED)
889                            {
890                                    mb->mvs[0].x = 0;
891                                    mb->mvs[0].y = 0;
892                                    continue;
893                            }
894    
895                            MBMotionCompensationBVOP(&pEnc->mbParam, mb, x, y, &frame->image,
896                                            f_ref, &pEnc->f_refh, &pEnc->f_refv, &pEnc->f_refhv,
897                                            b_ref, &pEnc->vInterH, &pEnc->vInterV, &pEnc->vInterHV,
898                                            dct_codes);
899    
900                            mb->quant = frame->quant;
901                            mb->cbp = MBTransQuantInter(&pEnc->mbParam, frame, x, y, dct_codes, qcoeff);
902                            //mb->cbp = MBTransQuantBVOP(&pEnc->mbParam, x, y, dct_codes, qcoeff, &frame->image, frame->quant);
903    
904    
905                            if ((mb->mode == MODE_INTERPOLATE || mb->mode == MODE_DIRECT) &&
906                                    mb->cbp == 0 &&
907                                    mb->mvs[0].x == 0 &&
908                                    mb->mvs[0].y == 0)
909                            {
910                                    mb->mode = 5;  // skipped
911                            }
912    
913                            if (mb->mode == MODE_INTERPOLATE || mb->mode == MODE_FORWARD)
914                            {
915                                    mb->pmvs[0].x = mb->mvs[0].x - forward.x;
916                                    mb->pmvs[0].y = mb->mvs[0].y - forward.y;
917                                    forward.x = mb->mvs[0].x;
918                                    forward.y = mb->mvs[0].y;
919                            }
920    
921                            if (mb->mode == MODE_INTERPOLATE || mb->mode == MODE_BACKWARD)
922                            {
923                                    mb->b_pmvs[0].x = mb->b_mvs[0].x - backward.x;
924                                    mb->b_pmvs[0].y = mb->b_mvs[0].y - backward.y;
925                                    backward.x = mb->b_mvs[0].x;
926                                    backward.y = mb->b_mvs[0].y;
927                            }
928    
929    //                      printf("[%i %i] M=%i CBP=%i MVX=%i MVY=%i %i,%i  %i,%i\n", x, y, pMB->mode, pMB->cbp, pMB->mvs[0].x, bmb->pmvs[0].x, bmb->pmvs[0].y, forward.x, forward.y);
930    
931                            start_timer();
932                            MBCodingBVOP(frame, mb, qcoeff, bs, &pEnc->sStat);
933                            stop_coding_timer();
934                    }
935            }
936    
937            emms();
938    
939            // TODO: dynamic fcode/bcode ???
940    
941            *pBits = BitstreamPos(bs) - *pBits;
942    
943    }
944    
945    */

Legend:
Removed from v.113  
changed lines
  Added in v.118

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4