commit
						ef29bf4515
					
				| @ -4,6 +4,7 @@ | ||||
| 
 | ||||
| #include <cstring> | ||||
| #include <fstream> | ||||
| #include <vector> | ||||
| #include "common/assert.h" | ||||
| #include "video_core/command_classes/codecs/codec.h" | ||||
| #include "video_core/command_classes/codecs/h264.h" | ||||
|  | ||||
| @ -5,8 +5,6 @@ | ||||
| #pragma once | ||||
| 
 | ||||
| #include <memory> | ||||
| #include <vector> | ||||
| #include "common/common_funcs.h" | ||||
| #include "common/common_types.h" | ||||
| #include "video_core/command_classes/nvdec_common.h" | ||||
| 
 | ||||
|  | ||||
| @ -18,12 +18,27 @@ | ||||
| // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | ||||
| //
 | ||||
| 
 | ||||
| #include <array> | ||||
| #include "common/bit_util.h" | ||||
| #include "video_core/command_classes/codecs/h264.h" | ||||
| #include "video_core/gpu.h" | ||||
| #include "video_core/memory_manager.h" | ||||
| 
 | ||||
| namespace Tegra::Decoder { | ||||
| namespace { | ||||
| // ZigZag LUTs from libavcodec.
 | ||||
| constexpr std::array<u8, 64> zig_zag_direct{ | ||||
|     0,  1,  8,  16, 9,  2,  3,  10, 17, 24, 32, 25, 18, 11, 4,  5,  12, 19, 26, 33, 40, 48, | ||||
|     41, 34, 27, 20, 13, 6,  7,  14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, | ||||
|     30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63, | ||||
| }; | ||||
| 
 | ||||
| constexpr std::array<u8, 16> zig_zag_scan{ | ||||
|     0 + 0 * 4, 1 + 0 * 4, 0 + 1 * 4, 0 + 2 * 4, 1 + 1 * 4, 2 + 0 * 4, 3 + 0 * 4, 2 + 1 * 4, | ||||
|     1 + 2 * 4, 0 + 3 * 4, 1 + 3 * 4, 2 + 2 * 4, 3 + 1 * 4, 3 + 2 * 4, 2 + 3 * 4, 3 + 3 * 4, | ||||
| }; | ||||
| } // Anonymous namespace
 | ||||
| 
 | ||||
| H264::H264(GPU& gpu_) : gpu(gpu_) {} | ||||
| 
 | ||||
| H264::~H264() = default; | ||||
| @ -48,7 +63,8 @@ std::vector<u8>& H264::ComposeFrameHeader(NvdecCommon::NvdecRegisters& state, bo | ||||
|         writer.WriteU(0, 8); | ||||
|         writer.WriteU(31, 8); | ||||
|         writer.WriteUe(0); | ||||
|         const s32 chroma_format_idc = (context.h264_parameter_set.flags >> 12) & 0x3; | ||||
|         const auto chroma_format_idc = | ||||
|             static_cast<u32>((context.h264_parameter_set.flags >> 12) & 3); | ||||
|         writer.WriteUe(chroma_format_idc); | ||||
|         if (chroma_format_idc == 3) { | ||||
|             writer.WriteBit(false); | ||||
| @ -59,8 +75,8 @@ std::vector<u8>& H264::ComposeFrameHeader(NvdecCommon::NvdecRegisters& state, bo | ||||
|         writer.WriteBit(false); // QpprimeYZeroTransformBypassFlag
 | ||||
|         writer.WriteBit(false); // Scaling matrix present flag
 | ||||
| 
 | ||||
|         const s32 order_cnt_type = static_cast<s32>((context.h264_parameter_set.flags >> 14) & 3); | ||||
|         writer.WriteUe(static_cast<s32>((context.h264_parameter_set.flags >> 8) & 0xf)); | ||||
|         const auto order_cnt_type = static_cast<u32>((context.h264_parameter_set.flags >> 14) & 3); | ||||
|         writer.WriteUe(static_cast<u32>((context.h264_parameter_set.flags >> 8) & 0xf)); | ||||
|         writer.WriteUe(order_cnt_type); | ||||
|         if (order_cnt_type == 0) { | ||||
|             writer.WriteUe(context.h264_parameter_set.log2_max_pic_order_cnt); | ||||
| @ -100,7 +116,7 @@ std::vector<u8>& H264::ComposeFrameHeader(NvdecCommon::NvdecRegisters& state, bo | ||||
|         writer.WriteUe(0); | ||||
|         writer.WriteUe(0); | ||||
| 
 | ||||
|         writer.WriteBit(context.h264_parameter_set.entropy_coding_mode_flag); | ||||
|         writer.WriteBit(context.h264_parameter_set.entropy_coding_mode_flag != 0); | ||||
|         writer.WriteBit(false); | ||||
|         writer.WriteUe(0); | ||||
|         writer.WriteUe(context.h264_parameter_set.num_refidx_l0_default_active); | ||||
| @ -172,8 +188,8 @@ void H264BitWriter::WriteSe(s32 value) { | ||||
|     WriteExpGolombCodedInt(value); | ||||
| } | ||||
| 
 | ||||
| void H264BitWriter::WriteUe(s32 value) { | ||||
|     WriteExpGolombCodedUInt((u32)value); | ||||
| void H264BitWriter::WriteUe(u32 value) { | ||||
|     WriteExpGolombCodedUInt(value); | ||||
| } | ||||
| 
 | ||||
| void H264BitWriter::End() { | ||||
|  | ||||
| @ -38,7 +38,7 @@ public: | ||||
|     /// WriteSe and WriteUe write in the Exp-Golomb-coded syntax
 | ||||
|     void WriteU(s32 value, s32 value_sz); | ||||
|     void WriteSe(s32 value); | ||||
|     void WriteUe(s32 value); | ||||
|     void WriteUe(u32 value); | ||||
| 
 | ||||
|     /// Finalize the bitstream
 | ||||
|     void End(); | ||||
| @ -55,18 +55,6 @@ public: | ||||
|     const std::vector<u8>& GetByteArray() const; | ||||
| 
 | ||||
| private: | ||||
|     // ZigZag LUTs from libavcodec.
 | ||||
|     static constexpr std::array<u8, 64> zig_zag_direct{ | ||||
|         0,  1,  8,  16, 9,  2,  3,  10, 17, 24, 32, 25, 18, 11, 4,  5,  12, 19, 26, 33, 40, 48, | ||||
|         41, 34, 27, 20, 13, 6,  7,  14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, | ||||
|         30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63, | ||||
|     }; | ||||
| 
 | ||||
|     static constexpr std::array<u8, 16> zig_zag_scan{ | ||||
|         0 + 0 * 4, 1 + 0 * 4, 0 + 1 * 4, 0 + 2 * 4, 1 + 1 * 4, 2 + 0 * 4, 3 + 0 * 4, 2 + 1 * 4, | ||||
|         1 + 2 * 4, 0 + 3 * 4, 1 + 3 * 4, 2 + 2 * 4, 3 + 1 * 4, 3 + 2 * 4, 2 + 3 * 4, 3 + 3 * 4, | ||||
|     }; | ||||
| 
 | ||||
|     void WriteBits(s32 value, s32 bit_count); | ||||
|     void WriteExpGolombCodedInt(s32 value); | ||||
|     void WriteExpGolombCodedUInt(u32 value); | ||||
|  | ||||
| @ -9,7 +9,7 @@ | ||||
| #include "video_core/memory_manager.h" | ||||
| 
 | ||||
| namespace Tegra::Decoder { | ||||
| 
 | ||||
| namespace { | ||||
| // Default compressed header probabilities once frame context resets
 | ||||
| constexpr Vp9EntropyProbs default_probs{ | ||||
|     .y_mode_prob{ | ||||
| @ -170,6 +170,35 @@ constexpr Vp9EntropyProbs default_probs{ | ||||
|     .high_precision{128, 128}, | ||||
| }; | ||||
| 
 | ||||
| constexpr std::array<s32, 256> norm_lut{ | ||||
|     0, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, | ||||
|     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, | ||||
|     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | ||||
|     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | ||||
|     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||||
|     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||||
|     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||||
|     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||||
| }; | ||||
| 
 | ||||
| constexpr std::array<s32, 254> map_lut{ | ||||
|     20,  21,  22,  23,  24,  25,  0,   26,  27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37, | ||||
|     1,   38,  39,  40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  2,   50,  51,  52,  53,  54, | ||||
|     55,  56,  57,  58,  59,  60,  61,  3,   62,  63,  64,  65,  66,  67,  68,  69,  70,  71,  72, | ||||
|     73,  4,   74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  85,  5,   86,  87,  88,  89, | ||||
|     90,  91,  92,  93,  94,  95,  96,  97,  6,   98,  99,  100, 101, 102, 103, 104, 105, 106, 107, | ||||
|     108, 109, 7,   110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 8,   122, 123, 124, | ||||
|     125, 126, 127, 128, 129, 130, 131, 132, 133, 9,   134, 135, 136, 137, 138, 139, 140, 141, 142, | ||||
|     143, 144, 145, 10,  146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 11,  158, 159, | ||||
|     160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 12,  170, 171, 172, 173, 174, 175, 176, 177, | ||||
|     178, 179, 180, 181, 13,  182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 14,  194, | ||||
|     195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 15,  206, 207, 208, 209, 210, 211, 212, | ||||
|     213, 214, 215, 216, 217, 16,  218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 17, | ||||
|     230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 18,  242, 243, 244, 245, 246, 247, | ||||
|     248, 249, 250, 251, 252, 253, 19, | ||||
| }; | ||||
| } // Anonymous namespace
 | ||||
| 
 | ||||
| VP9::VP9(GPU& gpu) : gpu(gpu) {} | ||||
| 
 | ||||
| VP9::~VP9() = default; | ||||
| @ -379,14 +408,14 @@ Vp9FrameContainer VP9::GetCurrentFrame(const NvdecCommon::NvdecRegisters& state) | ||||
|     Vp9FrameContainer frame{}; | ||||
|     { | ||||
|         gpu.SyncGuestHost(); | ||||
|         frame.info = std::move(GetVp9PictureInfo(state)); | ||||
|         frame.info = GetVp9PictureInfo(state); | ||||
| 
 | ||||
|         frame.bit_stream.resize(frame.info.bitstream_size); | ||||
|         gpu.MemoryManager().ReadBlock(state.frame_bitstream_offset, frame.bit_stream.data(), | ||||
|                                       frame.info.bitstream_size); | ||||
|     } | ||||
|     // Buffer two frames, saving the last show frame info
 | ||||
|     if (next_next_frame.bit_stream.size() != 0) { | ||||
|     if (!next_next_frame.bit_stream.empty()) { | ||||
|         Vp9FrameContainer temp{ | ||||
|             .info = frame.info, | ||||
|             .bit_stream = frame.bit_stream, | ||||
| @ -396,15 +425,15 @@ Vp9FrameContainer VP9::GetCurrentFrame(const NvdecCommon::NvdecRegisters& state) | ||||
|         frame.bit_stream = next_next_frame.bit_stream; | ||||
|         next_next_frame = std::move(temp); | ||||
| 
 | ||||
|         if (next_frame.bit_stream.size() != 0) { | ||||
|             Vp9FrameContainer temp{ | ||||
|         if (!next_frame.bit_stream.empty()) { | ||||
|             Vp9FrameContainer temp2{ | ||||
|                 .info = frame.info, | ||||
|                 .bit_stream = frame.bit_stream, | ||||
|             }; | ||||
|             next_frame.info.show_frame = frame.info.last_frame_shown; | ||||
|             frame.info = next_frame.info; | ||||
|             frame.bit_stream = next_frame.bit_stream; | ||||
|             next_frame = std::move(temp); | ||||
|             next_frame = std::move(temp2); | ||||
|         } else { | ||||
|             next_frame.info = frame.info; | ||||
|             next_frame.bit_stream = frame.bit_stream; | ||||
| @ -605,12 +634,6 @@ std::vector<u8> VP9::ComposeCompressedHeader() { | ||||
| 
 | ||||
|     writer.End(); | ||||
|     return writer.GetBuffer(); | ||||
| 
 | ||||
|     const auto writer_bytearray = writer.GetBuffer(); | ||||
| 
 | ||||
|     std::vector<u8> compressed_header(writer_bytearray.size()); | ||||
|     std::memcpy(compressed_header.data(), writer_bytearray.data(), writer_bytearray.size()); | ||||
|     return compressed_header; | ||||
| } | ||||
| 
 | ||||
| VpxBitStreamWriter VP9::ComposeUncompressedHeader() { | ||||
| @ -648,7 +671,6 @@ VpxBitStreamWriter VP9::ComposeUncompressedHeader() { | ||||
|         current_frame_info.intra_only = true; | ||||
| 
 | ||||
|     } else { | ||||
|         std::array<s32, 3> ref_frame_index; | ||||
| 
 | ||||
|         if (!current_frame_info.show_frame) { | ||||
|             uncomp_writer.WriteBit(current_frame_info.intra_only); | ||||
| @ -663,9 +685,9 @@ VpxBitStreamWriter VP9::ComposeUncompressedHeader() { | ||||
|         } | ||||
| 
 | ||||
|         // Last, Golden, Altref frames
 | ||||
|         ref_frame_index = std::array<s32, 3>{0, 1, 2}; | ||||
|         std::array<s32, 3> ref_frame_index{0, 1, 2}; | ||||
| 
 | ||||
|         // set when next frame is hidden
 | ||||
|         // Set when next frame is hidden
 | ||||
|         // altref and golden references are swapped
 | ||||
|         if (swap_next_golden) { | ||||
|             ref_frame_index = std::array<s32, 3>{0, 2, 1}; | ||||
| @ -754,17 +776,19 @@ VpxBitStreamWriter VP9::ComposeUncompressedHeader() { | ||||
|         for (std::size_t index = 0; index < current_frame_info.ref_deltas.size(); index++) { | ||||
|             const s8 old_deltas = loop_filter_ref_deltas[index]; | ||||
|             const s8 new_deltas = current_frame_info.ref_deltas[index]; | ||||
|             const bool differing_delta = old_deltas != new_deltas; | ||||
| 
 | ||||
|             loop_filter_delta_update |= | ||||
|                 (update_loop_filter_ref_deltas[index] = old_deltas != new_deltas); | ||||
|             update_loop_filter_ref_deltas[index] = differing_delta; | ||||
|             loop_filter_delta_update |= differing_delta; | ||||
|         } | ||||
| 
 | ||||
|         for (std::size_t index = 0; index < current_frame_info.mode_deltas.size(); index++) { | ||||
|             const s8 old_deltas = loop_filter_mode_deltas[index]; | ||||
|             const s8 new_deltas = current_frame_info.mode_deltas[index]; | ||||
|             const bool differing_delta = old_deltas != new_deltas; | ||||
| 
 | ||||
|             loop_filter_delta_update |= | ||||
|                 (update_loop_filter_mode_deltas[index] = old_deltas != new_deltas); | ||||
|             update_loop_filter_mode_deltas[index] = differing_delta; | ||||
|             loop_filter_delta_update |= differing_delta; | ||||
|         } | ||||
| 
 | ||||
|         uncomp_writer.WriteBit(loop_filter_delta_update); | ||||
| @ -829,7 +853,7 @@ std::vector<u8>& VP9::ComposeFrameHeader(NvdecCommon::NvdecRegisters& state) { | ||||
|     { | ||||
|         Vp9FrameContainer curr_frame = GetCurrentFrame(state); | ||||
|         current_frame_info = curr_frame.info; | ||||
|         bitstream = curr_frame.bit_stream; | ||||
|         bitstream = std::move(curr_frame.bit_stream); | ||||
|     } | ||||
| 
 | ||||
|     // The uncompressed header routine sets PrevProb parameters needed for the compressed header
 | ||||
|  | ||||
| @ -4,9 +4,9 @@ | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include <unordered_map> | ||||
| #include <array> | ||||
| #include <vector> | ||||
| #include "common/common_funcs.h" | ||||
| 
 | ||||
| #include "common/common_types.h" | ||||
| #include "common/stream.h" | ||||
| #include "video_core/command_classes/codecs/vp9_types.h" | ||||
| @ -52,17 +52,6 @@ private: | ||||
|     u32 range{0xff}; | ||||
|     s32 count{-24}; | ||||
|     s32 half_probability{128}; | ||||
|     static constexpr std::array<s32, 256> norm_lut{ | ||||
|         0, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, | ||||
|         3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, | ||||
|         2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | ||||
|         1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | ||||
|         1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||||
|         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||||
|         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||||
|         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||||
|         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||||
|     }; | ||||
| }; | ||||
| 
 | ||||
| class VpxBitStreamWriter { | ||||
| @ -193,23 +182,6 @@ private: | ||||
| 
 | ||||
|     s32 diff_update_probability = 252; | ||||
|     s32 frame_sync_code = 0x498342; | ||||
|     static constexpr std::array<s32, 254> map_lut = { | ||||
|         20,  21,  22,  23,  24,  25,  0,   26,  27,  28,  29,  30,  31,  32,  33,  34,  35, | ||||
|         36,  37,  1,   38,  39,  40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  2,   50, | ||||
|         51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  3,   62,  63,  64,  65,  66, | ||||
|         67,  68,  69,  70,  71,  72,  73,  4,   74,  75,  76,  77,  78,  79,  80,  81,  82, | ||||
|         83,  84,  85,  5,   86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  6, | ||||
|         98,  99,  100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 7,   110, 111, 112, 113, | ||||
|         114, 115, 116, 117, 118, 119, 120, 121, 8,   122, 123, 124, 125, 126, 127, 128, 129, | ||||
|         130, 131, 132, 133, 9,   134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, | ||||
|         10,  146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 11,  158, 159, 160, | ||||
|         161, 162, 163, 164, 165, 166, 167, 168, 169, 12,  170, 171, 172, 173, 174, 175, 176, | ||||
|         177, 178, 179, 180, 181, 13,  182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, | ||||
|         193, 14,  194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 15,  206, 207, | ||||
|         208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 16,  218, 219, 220, 221, 222, 223, | ||||
|         224, 225, 226, 227, 228, 229, 17,  230, 231, 232, 233, 234, 235, 236, 237, 238, 239, | ||||
|         240, 241, 18,  242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 19, | ||||
|     }; | ||||
| }; | ||||
| 
 | ||||
| } // namespace Decoder
 | ||||
|  | ||||
| @ -4,13 +4,11 @@ | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include <algorithm> | ||||
| #include <list> | ||||
| #include <array> | ||||
| #include <cstring> | ||||
| #include <vector> | ||||
| #include "common/cityhash.h" | ||||
| #include "common/common_funcs.h" | ||||
| #include "common/common_types.h" | ||||
| #include "video_core/command_classes/nvdec_common.h" | ||||
| 
 | ||||
| namespace Tegra { | ||||
| class GPU; | ||||
|  | ||||
| @ -15,7 +15,7 @@ void Tegra::Host1x::StateWrite(u32 offset, u32 arguments) { | ||||
|     std::memcpy(state_offset, &arguments, sizeof(u32)); | ||||
| } | ||||
| 
 | ||||
| void Tegra::Host1x::ProcessMethod(Host1x::Method method, const std::vector<u32>& arguments) { | ||||
| void Tegra::Host1x::ProcessMethod(Method method, const std::vector<u32>& arguments) { | ||||
|     StateWrite(static_cast<u32>(method), arguments[0]); | ||||
|     switch (method) { | ||||
|     case Method::WaitSyncpt: | ||||
|  | ||||
| @ -61,7 +61,7 @@ public: | ||||
|     ~Host1x(); | ||||
| 
 | ||||
|     /// Writes the method into the state, Invoke Execute() if encountered
 | ||||
|     void ProcessMethod(Host1x::Method method, const std::vector<u32>& arguments); | ||||
|     void ProcessMethod(Method method, const std::vector<u32>& arguments); | ||||
| 
 | ||||
| private: | ||||
|     /// For Host1x, execute is waiting on a syncpoint previously written into the state
 | ||||
|  | ||||
| @ -2,13 +2,9 @@ | ||||
| // Licensed under GPLv2 or any later version
 | ||||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #include <bitset> | ||||
| #include "common/assert.h" | ||||
| #include "common/bit_util.h" | ||||
| #include "core/memory.h" | ||||
| #include "video_core/command_classes/nvdec.h" | ||||
| #include "video_core/gpu.h" | ||||
| #include "video_core/memory_manager.h" | ||||
| 
 | ||||
| namespace Tegra { | ||||
| 
 | ||||
| @ -16,7 +12,7 @@ Nvdec::Nvdec(GPU& gpu_) : gpu(gpu_), codec(std::make_unique<Codec>(gpu)) {} | ||||
| 
 | ||||
| Nvdec::~Nvdec() = default; | ||||
| 
 | ||||
| void Nvdec::ProcessMethod(Nvdec::Method method, const std::vector<u32>& arguments) { | ||||
| void Nvdec::ProcessMethod(Method method, const std::vector<u32>& arguments) { | ||||
|     if (method == Method::SetVideoCodec) { | ||||
|         codec->StateWrite(static_cast<u32>(method), arguments[0]); | ||||
|     } else { | ||||
|  | ||||
| @ -4,8 +4,8 @@ | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include <memory> | ||||
| #include <vector> | ||||
| #include "common/common_funcs.h" | ||||
| #include "common/common_types.h" | ||||
| #include "video_core/command_classes/codecs/codec.h" | ||||
| 
 | ||||
| @ -23,7 +23,7 @@ public: | ||||
|     ~Nvdec(); | ||||
| 
 | ||||
|     /// Writes the method into the state, Invoke Execute() if encountered
 | ||||
|     void ProcessMethod(Nvdec::Method method, const std::vector<u32>& arguments); | ||||
|     void ProcessMethod(Method method, const std::vector<u32>& arguments); | ||||
| 
 | ||||
|     /// Return most recently decoded frame
 | ||||
|     AVFrame* GetFrame(); | ||||
| @ -34,6 +34,6 @@ private: | ||||
|     void Execute(); | ||||
| 
 | ||||
|     GPU& gpu; | ||||
|     std::unique_ptr<Tegra::Codec> codec; | ||||
|     std::unique_ptr<Codec> codec; | ||||
| }; | ||||
| } // namespace Tegra
 | ||||
|  | ||||
| @ -26,7 +26,7 @@ void Vic::VicStateWrite(u32 offset, u32 arguments) { | ||||
|     std::memcpy(state_offset, &arguments, sizeof(u32)); | ||||
| } | ||||
| 
 | ||||
| void Vic::ProcessMethod(Vic::Method method, const std::vector<u32>& arguments) { | ||||
| void Vic::ProcessMethod(Method method, const std::vector<u32>& arguments) { | ||||
|     LOG_DEBUG(HW_GPU, "Vic method 0x{:X}", static_cast<u32>(method)); | ||||
|     VicStateWrite(static_cast<u32>(method), arguments[0]); | ||||
|     const u64 arg = static_cast<u64>(arguments[0]) << 8; | ||||
|  | ||||
| @ -63,11 +63,11 @@ public: | ||||
|         SetOutputSurfaceChromaVOffset = 0x1ca | ||||
|     }; | ||||
| 
 | ||||
|     explicit Vic(GPU& gpu, std::shared_ptr<Tegra::Nvdec> nvdec_processor); | ||||
|     explicit Vic(GPU& gpu, std::shared_ptr<Nvdec> nvdec_processor); | ||||
|     ~Vic(); | ||||
| 
 | ||||
|     /// Write to the device state.
 | ||||
|     void ProcessMethod(Vic::Method method, const std::vector<u32>& arguments); | ||||
|     void ProcessMethod(Method method, const std::vector<u32>& arguments); | ||||
| 
 | ||||
| private: | ||||
|     void Execute(); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 bunnei
						bunnei