/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecOpenMax.h

http://github.com/xbmc/xbmc · C Header · 74 lines · 42 code · 11 blank · 21 comment · 0 complexity · 172287b29cd0b3ef64479a971f47b3b7 MD5 · raw file

  1. #pragma once
  2. /*
  3. * Copyright (C) 2010-2013 Team XBMC
  4. * http://xbmc.org
  5. *
  6. * This Program is free software; you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation; either version 2, or (at your option)
  9. * any later version.
  10. *
  11. * This Program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with XBMC; see the file COPYING. If not, see
  18. * <http://www.gnu.org/licenses/>.
  19. *
  20. */
  21. #if defined(HAVE_LIBOPENMAX)
  22. #include "DVDVideoCodec.h"
  23. class COpenVideoMax;
  24. class CDVDVideoCodecOpenMax : public CDVDVideoCodec
  25. {
  26. public:
  27. CDVDVideoCodecOpenMax();
  28. virtual ~CDVDVideoCodecOpenMax();
  29. // Required overrides
  30. virtual bool Open(CDVDStreamInfo &hints, CDVDCodecOptions &options);
  31. virtual void Dispose(void);
  32. virtual int Decode(uint8_t *pData, int iSize, double dts, double pts);
  33. virtual void Reset(void);
  34. virtual bool GetPicture(DVDVideoPicture *pDvdVideoPicture);
  35. virtual void SetDropState(bool bDrop);
  36. virtual const char* GetName(void) { return (const char*)m_pFormatName; }
  37. protected:
  38. const char *m_pFormatName;
  39. COpenMaxVideo *m_omx_decoder;
  40. DVDVideoPicture m_videobuffer;
  41. // bitstream to bytestream (Annex B) conversion support.
  42. bool bitstream_convert_init(void *in_extradata, int in_extrasize);
  43. bool bitstream_convert(uint8_t* pData, int iSize, uint8_t **poutbuf, int *poutbuf_size);
  44. static void bitstream_alloc_and_copy( uint8_t **poutbuf, int *poutbuf_size,
  45. const uint8_t *sps_pps, uint32_t sps_pps_size, const uint8_t *in, uint32_t in_size);
  46. typedef struct omx_bitstream_ctx {
  47. uint8_t length_size;
  48. uint8_t first_idr;
  49. uint8_t *sps_pps_data;
  50. uint32_t size;
  51. omx_bitstream_ctx()
  52. {
  53. length_size = 0;
  54. first_idr = 0;
  55. sps_pps_data = NULL;
  56. size = 0;
  57. }
  58. } omx_bitstream_ctx;
  59. uint32_t m_sps_pps_size;
  60. omx_bitstream_ctx m_sps_pps_context;
  61. bool m_convert_bitstream;
  62. };
  63. #endif