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.

106 lines
3.2KB

  1. /*
  2. * This file is part of Libav.
  3. *
  4. * Libav is free software; you can redistribute it and/or
  5. * modify it under the terms of the GNU Lesser General Public
  6. * License as published by the Free Software Foundation; either
  7. * version 2.1 of the License, or (at your option) any later version.
  8. *
  9. * Libav is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12. * Lesser General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU Lesser General Public
  15. * License along with Libav; if not, write to the Free Software
  16. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  17. */
  18. #ifndef AVCODEC_INTRAX8_H
  19. #define AVCODEC_INTRAX8_H
  20. #include "blockdsp.h"
  21. #include "get_bits.h"
  22. #include "mpegvideo.h"
  23. #include "idctdsp.h"
  24. #include "intrax8dsp.h"
  25. #include "mpegpicture.h"
  26. typedef struct IntraX8Context {
  27. VLC *j_ac_vlc[4]; // they point to the static j_mb_vlc
  28. VLC *j_orient_vlc;
  29. VLC *j_dc_vlc[3];
  30. int use_quant_matrix;
  31. // set by ff_intrax8_common_init
  32. uint8_t *prediction_table; // 2 * (mb_w * 2)
  33. ScanTable scantable[3];
  34. AVCodecContext *avctx;
  35. // set by the caller codec
  36. MpegEncContext *s;
  37. IntraX8DSPContext dsp;
  38. IDCTDSPContext idsp;
  39. BlockDSPContext bdsp;
  40. int quant;
  41. int dquant;
  42. int qsum;
  43. int loopfilter;
  44. AVFrame *frame;
  45. GetBitContext *gb;
  46. // calculated per frame
  47. int quant_dc_chroma;
  48. int divide_quant_dc_luma;
  49. int divide_quant_dc_chroma;
  50. uint8_t *dest[3];
  51. uint8_t scratchpad[42]; // size of the block is fixed (8x8 plus padding)
  52. // changed per block
  53. int edges;
  54. int flat_dc;
  55. int predicted_dc;
  56. int raw_orient;
  57. int chroma_orient;
  58. int orient;
  59. int est_run;
  60. } IntraX8Context;
  61. /**
  62. * Initialize IntraX8 frame decoder.
  63. * Requires valid MpegEncContext with valid s->mb_width before calling.
  64. * @param avctx pointer to AVCodecContext
  65. * @param w pointer to IntraX8Context
  66. * @param idsp pointer to IDCTDSPContext
  67. * @param s pointer to MpegEncContext of the parent codec
  68. * @return 0 on success, a negative AVERROR value on error
  69. */
  70. int ff_intrax8_common_init(AVCodecContext *avctx,
  71. IntraX8Context *w, IDCTDSPContext *idsp,
  72. MpegEncContext *const s);
  73. /**
  74. * Destroy IntraX8 frame structure.
  75. * @param w pointer to IntraX8Context
  76. */
  77. void ff_intrax8_common_end(IntraX8Context *w);
  78. /**
  79. * Decode single IntraX8 frame.
  80. * The parent codec must call ff_mpv_frame_start() before calling this function.
  81. * The parent codec must call ff_mpv_frame_end() after calling this function.
  82. * This function does not use ff_mpv_decode_mb().
  83. * @param w pointer to IntraX8Context
  84. * @param pict the output Picture containing an AVFrame
  85. * @param gb open bitstream reader
  86. * @param dquant doubled quantizer, it would be odd in case of VC-1 halfpq==1.
  87. * @param quant_offset offset away from zero
  88. * @param loopfilter enable filter after decoding a block
  89. */
  90. int ff_intrax8_decode_picture(IntraX8Context *w, Picture *pict,
  91. GetBitContext *gb,
  92. int quant, int halfpq, int loopfilter);
  93. #endif /* AVCODEC_INTRAX8_H */