Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright © <2010>, Intel Corporation.
  3.  *
  4.  * This program is licensed under the terms and conditions of the
  5.  * Eclipse Public License (EPL), version 1.0.  The full text of the EPL is at
  6.  * http://www.opensource.org/licenses/eclipse-1.0.php.
  7.  *
  8.  */
  9. // Module name: save_Left_UV_8x2T.asm
  10. //
  11. // Transpose 8x2 to 2x8 UV data and write to memory
  12. //
  13. //----------------------------------------------------------------
  14. //  Symbols need to be defined before including this module
  15. //
  16. //      Left MB region:
  17. //      PREV_MB_UW:     Base=ryy        ElementSize=2 SrcRegion=REGION(8,1) Type=uw
  18.  
  19. //      Binding table index:
  20. //      BI_SRC_UV:              Binding table index of UV surface (NV12)
  21. //
  22. //      Temp buffer:
  23. //      BUF_W:                  BUF_W Base=rxx ElementSize=1 SrcRegion=REGION(8,1) Type=uw
  24. //
  25. //
  26. #if defined(_DEBUG)
  27.         mov             (1)             EntrySignatureC:w                       0xDDD6:w
  28. #endif
  29.  
  30.         and.z.f0.0 (1)  null:w          r[ECM_AddrReg, BitFlags]:ub             FieldModeCurrentMbFlag:w               
  31.    
  32.     and.nz.f0.1 (1)     NULLREGW                BitFields:w     BotFieldFlag:w
  33.  
  34.         // Transpose U/V, save them to MRFs in NV12 format
  35.     mov (1)     MSGSRC.0:ud             ORIX_LEFT:w                                     { NoDDClr }                     // Block origin
  36.     asr (1)     MSGSRC.1:ud             ORIY_LEFT:w                     1:w             { NoDDClr, NoDDChk }    // NV12 U+V block origin y = half of Y comp
  37.     mov (1)     MSGSRC.2:ud             0x00070003:ud                           { NoDDChk }                             // NV12 U+V block width and height (4x8)
  38.  
  39.  
  40. //      16x2 UV src in GRF (each pix is specified as yx)
  41. //      +-----------------------+-----------------------+-----------------------+-----------------------+
  42. //      |71 71 61 61 51 51 41 41 31 31 21 21 11 11 01 01 70 70 60 60 50 50 40 40 30 30 20 20 10 10 00 00|
  43. //      +-----------------------+-----------------------+-----------------------+-----------------------+
  44. //
  45. //      First step              (8)             <1>     <=== <8;4,1>:w
  46. //      +-----------------------+-----------------------+-----------------------+-----------------------+
  47. //      |71 71 61 61 51 51 41 41 70 70 60 60 50 50 40 40 31 31 21 21 11 11 01 01 30 30 20 20 10 10 00 00|
  48. //      +-----------------------+-----------------------+-----------------------+-----------------------+
  49.         mov (8) BUF_W(0,0)<1>           PREV_MB_UW(0,0)<8;4,1>  { NoDDClr }
  50.         mov (8) BUF_W(0,8)<1>           PREV_MB_UW(0,4)<8;4,1>  { NoDDChk }
  51.  
  52. //      Second step             (8)             <1>     <=== <1;2,4>
  53. //      +-----------------------+-----------------------+-----------------------+-----------------------+
  54. //      |71 71 70 70 61 61 60 60 51 51 50 50 41 41 40 40 31 31 30 30 21 21 20 20 11 11 10 10 01 01 00 00|
  55. //      +-----------------------+-----------------------+-----------------------+-----------------------+
  56.         mov (8) MSGPAYLOADW(0,0)<1>             BUF_W(0,0)<1;2,4>
  57.         mov (8) MSGPAYLOADW(0,8)<1>             BUF_W(0,8)<1;2,4>
  58.  
  59. //  Transposed U+V in NV12 in 4x8 is ready for writting to dataport.
  60.  
  61.     // Set message descriptor
  62.    
  63.         (f0.0)  if      (1)             ELSE_UV_8X2T
  64.    
  65.     // Frame picture
  66.     mov (1)     MSGDSC  MSG_LEN(1)+DWBWMSGDSC+BI_DEST_UV:ud                     // Write 1 GRF to DEST_UV
  67.  
  68.         (f0.1) add (1)  MSGSRC.1:d              MSGSRC.1:d              8:w             // Add vertical offset 8 for bot MB in MBAFF mode
  69.  
  70. ELSE_UV_8X2T:
  71.         else    (1)             ENDIF_UV_8X2T
  72.  
  73.         // Field picture
  74.     (f0.1) mov (1)      MSGDSC  MSG_LEN(1)+DWBWMSGDSC+ENMSGDSCBF+BI_DEST_UV:ud  // Write 1 GRF to DEST_UV bottom field
  75.     (-f0.1) mov (1)     MSGDSC  MSG_LEN(1)+DWBWMSGDSC+ENMSGDSCTF+BI_DEST_UV:ud  // Write 1 GRF to DEST_UV top field
  76.  
  77.         asr (1) MSGSRC.1:d              MSGSRC.1:d              1:w                                     // Reduce y by half in field access mode
  78.  
  79.         endif
  80. ENDIF_UV_8X2T:
  81.  
  82.     send (8)    null:ud         MSGHDR  MSGSRC<8;8,1>:ud        DAPWRITE        MSGDSC
  83.