Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Save I_PCM Y samples to Y picture buffer
  3.  * Copyright © <2010>, Intel Corporation.
  4.  *
  5.  * This program is licensed under the terms and conditions of the
  6.  * Eclipse Public License (EPL), version 1.0.  The full text of the EPL is at
  7.  * http://www.opensource.org/licenses/eclipse-1.0.php.
  8.  *
  9.  */
  10. // Module name: save_I_PCM.asm
  11. //
  12. // First save I_PCM Y samples to Y picture buffer
  13. //
  14.     mov (1) MSGSRC.2:ud         0x000F000F:ud {NoDDClr}                 // Block width and height (16x16)
  15.         shl (2) MSGSRC.0:ud             ORIX<2;2,1>:ub  4:w     {NoDDChk}       // Convert MB origin in pixel unit
  16.  
  17.     add (1)     MSGDSC  REG_MBAFF_FIELD<0;1,0>:uw       MSG_LEN(8)+DWBWMSGDSC_WC+DESTY:ud  // Set message descriptor
  18.  
  19.     $for(0; <8; 2) {
  20.         mov (32)        MSGPAYLOAD(%1)<1>               I_PCM_Y(%1)REGION(16,1) {Compr,NoDDClr}
  21.         mov (32)        MSGPAYLOAD(%1,16)<1>    I_PCM_Y(%1,16)REGION(16,1) {Compr,NoDDChk}
  22.     }
  23.  
  24.     send (8)    REG_WRITE_COMMIT_Y<1>:ud        MSGHDR  MSGSRC<8;8,1>:ud        DAPWRITE        MSGDSC
  25.  
  26. // Then save I_PCM U/V samples to U/V picture buffer
  27. //
  28.     mov (1) MSGHDR.2:ud         0x0007000F:ud                   {NoDDClr}       // Block width and height (16x8)
  29.     asr (1) MSGHDR.1:ud         MSGSRC.1<0;1,0>:ud      1:w {NoDDChk}   // Y offset should be halved
  30.     add (1)     MSGDSC                  MSGDSC                  0x0-MSG_LEN(4)+0x1:d    // Set message descriptor for U/V
  31.  
  32. #if 0
  33.     and.z.f0.0 (1)  NULLREG REG_CHROMA_FORMAT_IDC  CHROMA_FORMAT_IDC:ud
  34.         (f0.0) jmpi (1) MONOCHROME_I_PCM
  35. #endif
  36.  
  37. #ifndef MONO
  38. // Non-monochrome picture
  39. //
  40.     $for(0,0; <4; 2,1) {
  41.         mov (16)        MSGPAYLOAD(%1)<2>               I_PCM_UV(%2)REGION(16,1)                // U data
  42.         mov (16)        MSGPAYLOAD(%1,1)<2>             I_PCM_UV(%2+2)REGION(16,1)              // V data
  43.         mov (16)        MSGPAYLOAD(%1+1)<2>             I_PCM_UV(%2,16)REGION(16,1)             // U data
  44.         mov (16)        MSGPAYLOAD(%1+1,1)<2>   I_PCM_UV(%2+2,16)REGION(16,1)   // V data
  45.         }
  46. #else   // defined(MONO)
  47. MONOCHROME_I_PCM:
  48.     $for(0; <4; 2) {
  49.         mov (16)        MSGPAYLOADD(%1)<1>              0x80808080:ud {Compr}
  50.         }
  51.  
  52. #endif  // !defined(MONO)
  53.  
  54.     send (8)    REG_WRITE_COMMIT_UV<1>:ud       MSGHDR  null:ud DAPWRITE        MSGDSC
  55.  
  56. // End of save_I_PCM
  57.