You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

95 lines
2.3KB

  1. /*
  2. * Common Ut Video header
  3. * Copyright (c) 2011 Konstantin Shishkov
  4. *
  5. * This file is part of Libav.
  6. *
  7. * Libav is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU Lesser General Public
  9. * License as published by the Free Software Foundation; either
  10. * version 2.1 of the License, or (at your option) any later version.
  11. *
  12. * Libav is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15. * Lesser General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU Lesser General Public
  18. * License along with Libav; if not, write to the Free Software
  19. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  20. */
  21. #ifndef AVCODEC_UTVIDEO_H
  22. #define AVCODEC_UTVIDEO_H
  23. /**
  24. * @file
  25. * Common Ut Video header
  26. */
  27. #include "libavutil/common.h"
  28. #include "avcodec.h"
  29. #include "bswapdsp.h"
  30. #include "huffyuvencdsp.h"
  31. enum {
  32. PRED_NONE = 0,
  33. PRED_LEFT,
  34. PRED_GRADIENT,
  35. PRED_MEDIAN,
  36. };
  37. enum {
  38. COMP_NONE = 0,
  39. COMP_HUFF,
  40. };
  41. /*
  42. * "Original format" markers.
  43. * Based on values gotten from the official VFW encoder.
  44. * They are not used during decoding, but they do have
  45. * an informative role on seeing what was input
  46. * to the encoder.
  47. */
  48. enum {
  49. UTVIDEO_RGB = MKTAG(0x00, 0x00, 0x01, 0x18),
  50. UTVIDEO_RGBA = MKTAG(0x00, 0x00, 0x02, 0x18),
  51. UTVIDEO_420 = MKTAG('Y', 'V', '1', '2'),
  52. UTVIDEO_422 = MKTAG('Y', 'U', 'Y', '2'),
  53. };
  54. /* Mapping of libavcodec prediction modes to Ut Video's */
  55. extern const int ff_ut_pred_order[5];
  56. /* Order of RGB(A) planes in Ut Video */
  57. extern const int ff_ut_rgb_order[4];
  58. typedef struct UtvideoContext {
  59. const AVClass *class;
  60. AVCodecContext *avctx;
  61. BswapDSPContext bdsp;
  62. HuffYUVEncDSPContext hdsp;
  63. uint32_t frame_info_size, flags, frame_info;
  64. int planes;
  65. int slices;
  66. int compression;
  67. int interlaced;
  68. int frame_pred;
  69. int slice_stride;
  70. uint8_t *slice_bits, *slice_buffer[4];
  71. int slice_bits_size;
  72. } UtvideoContext;
  73. typedef struct HuffEntry {
  74. uint8_t sym;
  75. uint8_t len;
  76. uint32_t code;
  77. } HuffEntry;
  78. /* Compare huffman tree nodes */
  79. int ff_ut_huff_cmp_len(const void *a, const void *b);
  80. #endif /* AVCODEC_UTVIDEO_H */