TSParse.cpp
上传用户:thjx518
上传日期:2022-03-16
资源大小:179k
文件大小:1k
源码类别:

mpeg/mp3

开发平台:

Visual C++

  1. // TSParse.cpp: implementation of the CTSPacket class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "PSParse.h"
  6. #include "TSParse.h"
  7. CTSParse::CTSParse(CQueue*queue)
  8. {
  9. Queue=queue;
  10. }
  11. CTSParse::~CTSParse()
  12. {
  13. }
  14. USHORT CTSParse::GetPID()
  15. {
  16. return GET_13(Pack,1);
  17. }
  18. UCHAR CTSParse::GetContinueCounter()
  19. {
  20.  UCHAR v=GET_4(Pack,3,3);
  21.  return v;
  22. }
  23. int CTSParse::GetData(UCHAR *data)
  24. {
  25. int sb=GET_1(Pack,1,6)?(5+(UCHAR)Pack[4]):4;
  26. memcpy(data,Pack+sb,188-sb);
  27. return 188-sb;
  28. }
  29. int CTSParse::GetPacket(USHORT pid,bool first)
  30. {
  31. Queue->Pop(Pack);
  32. if(Pack[0]!=0x47)
  33. return ptSyncError;
  34. if(GetPID()!=pid)
  35. return ptPIDError;
  36. switch(GET_1(Pack,1,6))//get payload_unit_start_indicator
  37. {
  38. case 0: if(first)
  39. return ptPayLoad;
  40. if(GetContinueCounter()==(last_cc+1)%32){
  41. last_cc=GetContinueCounter();
  42. return ptPayLoad;
  43. }else
  44. return ptContinueError;
  45. default:if(first){
  46.    last_cc=GetContinueCounter();
  47.    return ptFirst;
  48. }else
  49. return ptContinueError;
  50. }
  51. }