Advertisement
FrayxRulez

Untitled

Feb 4th, 2015
322
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.47 KB | None | 0 0
  1. bool LumiaEffect::ProcessSample(_In_ const ComPtr<IMFSample>& inputSample, _In_ const ComPtr<IMFSample>& outputSample)
  2. {
  3. // Get the input/output buffers
  4. ComPtr<IMFMediaBuffer> outputBuffer;
  5. ComPtr<IMFMediaBuffer> inputBuffer;
  6. CHK(inputSample->GetBufferByIndex(0, &inputBuffer));
  7. CHK(outputSample->GetBufferByIndex(0, &outputBuffer));
  8.  
  9. // Copy sample time, duration, attributes
  10. long long time = 0;
  11. long long duration = 0;
  12. (void)inputSample->GetSampleTime(&time);
  13. (void)inputSample->GetSampleDuration(&duration);
  14. CHK(outputSample->SetSampleTime(time));
  15. CHK(outputSample->SetSampleDuration(duration));
  16. CHK(inputSample->CopyAllItems(outputSample.Get()));
  17.  
  18. // Set output buffer length (work around SinkWriter bug)
  19. unsigned long length = 0;
  20. CHK(outputBuffer->GetMaxLength(&length));
  21. CHK(outputBuffer->SetCurrentLength(length));
  22.  
  23. unsigned long cbInputData = 0;
  24. unsigned long cbOutputData = 0;
  25. byte* pInputData;
  26. byte* pOutputData;
  27.  
  28. CHK(inputBuffer->Lock(&pInputData, NULL, &cbInputData));
  29. CHK(outputBuffer->Lock(&pOutputData, NULL, &cbOutputData));
  30.  
  31. for (unsigned int y = 0; y < 480; y++)
  32. {
  33. for (unsigned int x = 0; x < (480 * 4); x += 4)
  34. {
  35. int pos = y * (480 * 4) + (x);
  36. int posInput = y * (640 * 4) + (x);
  37.  
  38. int alpha = (*(m_pWatermark + pos + 3));
  39. if (alpha == 255)
  40. {
  41. //(*(pOutputData + cbOutputData - pos)) = (*(m_pWatermark + pos));
  42. //(*(pOutputData + cbOutputData - pos + 1)) = (*(m_pWatermark + pos + 1));
  43. //(*(pOutputData + cbOutputData - pos + 2)) = (*(m_pWatermark + pos + 2));
  44. //(*(pOutputData + cbOutputData - pos + 3)) = 255;
  45.  
  46. pOutputData[pos] = m_pWatermark[pos];
  47. pOutputData[pos + 1] = m_pWatermark[pos + 1];
  48. pOutputData[pos + 2] = m_pWatermark[pos + 2];
  49. pOutputData[pos + 3] = 255;
  50. }
  51. else if (alpha == 0)
  52. {
  53. //(*(pOutputData + cbOutputData - pos)) = (*(pInputData + posInput));
  54. //(*(pOutputData + cbOutputData - pos + 1)) = (*(pInputData + posInput + 1));
  55. //(*(pOutputData + cbOutputData - pos + 2)) = (*(pInputData + posInput + 2));
  56. //(*(pOutputData + cbOutputData - pos + 3)) = (*(pInputData + posInput + 3));
  57.  
  58. pOutputData[pos] = pInputData[posInput];
  59. pOutputData[pos + 1] = pInputData[posInput + 1];
  60. pOutputData[pos + 2] = pInputData[posInput + 2];
  61. pOutputData[pos + 3] = 255;
  62. }
  63. }
  64. }
  65.  
  66. //unsigned long x = 0;
  67.  
  68. //while (x < cbInputData)
  69. //{
  70. // (*(pOutputData + x++)) = 0;
  71. // (*(pOutputData + x++)) = 0;
  72. // (*(pOutputData + x++)) = 255;
  73. // (*(pOutputData + x++)) = 255;
  74.  
  75. // //Trace("B: %i", (*(pInputData + x++)));
  76. // //Trace("\tG: %i", (*(pInputData + x++)));
  77. // //Trace("\tR: %i", (*(pInputData + x++)));
  78. // //Trace("\tA: %i\n", (*(pInputData + x++)));
  79. //}
  80.  
  81. //for (unsigned int k = 0; k < 480; k++)
  82. //{
  83. // for (unsigned int i = 0; i < (480 * 4); i += 4)
  84. // {
  85. // int posI = (k + 80) * (480 * 4) + (i);
  86. // int posO = k * (480 * 4) + (i);
  87. // (*(pOutputData + posO)) = (*(pInputData + posI));
  88. // (*(pOutputData + posO + 1)) = (*(pInputData + posI + 1));
  89. // (*(pOutputData + posO + 2)) = (*(pInputData + posI + 2));
  90. // (*(pOutputData + posO + 3)) = (*(pInputData + posI + 3));
  91. // }
  92. //}
  93. //CopyMemory(pInputData, pOutputData, cbInputData);
  94.  
  95. //for (unsigned long x = 0; x < cbInputData; x += 4)
  96. //{
  97. // if ((*(m_pWatermark + x + 3)) == 255)
  98. // {
  99. // (*(pOutputData + x)) = (*(m_pWatermark + x));
  100. // (*(pOutputData + x + 1)) = (*(m_pWatermark + x + 1));
  101. // (*(pOutputData + x + 2)) = (*(m_pWatermark + x + 2));
  102. // (*(pOutputData + x + 3)) = (*(m_pWatermark + x + 3));
  103. // }
  104. //}
  105.  
  106. return true;
  107.  
  108. // Create input/output IBuffer wrappers
  109. //ComPtr<WinRTBufferOnMF2DBuffer> outputWinRTBuffer;
  110. //ComPtr<WinRTBufferOnMF2DBuffer> inputWinRTBuffer;
  111. //CHK(MakeAndInitialize<WinRTBufferOnMF2DBuffer>(&outputWinRTBuffer, outputBuffer, MF2DBuffer_LockFlags_Write, _inputDefaultStride));
  112. //CHK(MakeAndInitialize<WinRTBufferOnMF2DBuffer>(&inputWinRTBuffer, inputBuffer, MF2DBuffer_LockFlags_Read, _inputDefaultStride));
  113.  
  114. //// Create input/output bitmap wrappers
  115. //Size outputSize = { (float)_outputWidth, (float)_outputHeight };
  116. //Size inputSize = { (float)_inputWidth, (float)_inputHeight };
  117. //auto outputBitmap = ref new Bitmap(outputSize, ColorMode::Bgra8888, outputWinRTBuffer->GetStride(), outputWinRTBuffer->GetIBuffer());
  118. //auto inputBitmap = ref new Bitmap(inputSize, ColorMode::Bgra8888, inputWinRTBuffer->GetStride(), inputWinRTBuffer->GetIBuffer());
  119.  
  120. //if (_bitmapEffect != nullptr)
  121. //{
  122. // _bitmapEffect->Process(inputBitmap, outputBitmap, TimeSpan{ time });
  123. //}
  124. //else
  125. //{
  126. // if (_animatedFilters != nullptr)
  127. // {
  128. // _animatedFilters->UpdateTime(TimeSpan{ time });
  129. // }
  130.  
  131. // // Process the bitmap
  132. // FilterEffect^ effect = ref new FilterEffect();
  133. // effect->Filters = _filters != nullptr ? _filters : _animatedFilters->Filters;
  134. // effect->Source = ref new BitmapImageSource(inputBitmap);
  135. // auto renderer = ref new BitmapRenderer(effect, outputBitmap);
  136. // create_task(renderer->RenderAsync()).get(); // Blocks for the duration of processing (must be called in MTA)
  137. //}
  138.  
  139. //// Force MF buffer unlocking (race-condition refcount leak in effects? xVP cannot always lock the buffer afterward)
  140. //outputWinRTBuffer->Close();
  141. //inputWinRTBuffer->Close();
  142.  
  143. //return true; // Always produces data
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement