YOUPAIAGVideoBuffer.m 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. //
  2. // YOUPAIAGVideoBuffer.m
  3. // Agora-client-side-AV-capturing-for-streaming-iOS
  4. //
  5. // Created by GongYuhua on 2017/4/7.
  6. // Copyright © 2017年 Agora. All rights reserved.
  7. //
  8. #import "YOUPAIAGVideoBuffer.h"
  9. @implementation YOUPAIAGVideoBuffer
  10. - (instancetype)initWithUId:(unsigned int)uid
  11. yBuffer:(void *)yBuffer
  12. uBuffer:(void *)uBuffer
  13. vBuffer:(void *)vBuffer
  14. yStride:(int)yStride
  15. uStride:(int)uStride
  16. vStride:(int)vStride
  17. width:(int)width
  18. height:(int)height
  19. rotation:(int)rotation
  20. {
  21. if (self = [super init]) {
  22. self.uid = uid;
  23. [self youpaifupdateWithYBuffer:yBuffer uBuffer:uBuffer vBuffer:vBuffer yStride:yStride uStride:uStride vStride:vStride width:width height:height rotation:rotation];
  24. }
  25. return self;
  26. }
  27. - (void)youpaifupdateWithYBuffer:(void *)yBuffer
  28. uBuffer:(void *)uBuffer
  29. vBuffer:(void *)vBuffer
  30. yStride:(int)yStride
  31. uStride:(int)uStride
  32. vStride:(int)vStride
  33. width:(int)width
  34. height:(int)height
  35. rotation:(int)rotation
  36. {
  37. free(self.yBuffer);
  38. free(self.uBuffer);
  39. free(self.vBuffer);
  40. self.yBuffer = [YOUPAIAGVideoBuffer copy:yBuffer size:yStride * height];
  41. self.uBuffer = [YOUPAIAGVideoBuffer copy:uBuffer size:uStride * height / 2];
  42. self.vBuffer = [YOUPAIAGVideoBuffer copy:vBuffer size:vStride * height / 2];
  43. self.yStride = yStride;
  44. self.uStride = uStride;
  45. self.vStride = vStride;
  46. self.width = width;
  47. self.height = height;
  48. self.rotation = rotation;
  49. }
  50. + (unsigned char *)copy:(void *)buffer size:(int)size
  51. {
  52. unsigned char *copyingBuffer = malloc(size);
  53. memcpy(copyingBuffer, buffer, size);
  54. return copyingBuffer;
  55. }
  56. - (unsigned char *)youpaifyuvData
  57. {
  58. int ysize = self.yStride * self.height;
  59. int usize = self.uStride * self.height / 2;
  60. int vsize = self.vStride * self.height / 2;
  61. unsigned char *temp = malloc(ysize + usize + vsize);
  62. memcpy(temp, self.yBuffer, ysize);
  63. memcpy(temp + ysize, self.uBuffer, usize);
  64. memcpy(temp + ysize + usize, self.vBuffer, vsize);
  65. return temp;
  66. }
  67. - (void)dealloc
  68. {
  69. free(self.yBuffer);
  70. free(self.uBuffer);
  71. free(self.vBuffer);
  72. }
  73. @end