summaryrefslogtreecommitdiff
path: root/Userland
AgeCommit message (Collapse)Author
2022-11-30LibSQL+SQLServer: Return a NonnullRefPtr from Database::get_schemaTimothy Flynn
Database::get_schema currently either returns a RefPtr to an existing schema, a nullptr if the schema doesn't exist, or an Error if some internal error occured. Change this to return a NonnullRefPtr to an exisiting schema, or a SQL::Result with any error, including if the schema was not found. Callers can then handle that specific error code if they want. Returning a NonnullRefPtr will enable some further cleanup. This had some fallout of needing to change some other methods' return types from AK::ErrorOr to SQL::Result so that TRY may continue to be used.
2022-11-30LibSQL: Add missing definition of Value's u32 comparatorTimothy Flynn
This was declared but not defined (nor was it used, but an upcoming commit will be using it).
2022-11-30LibSQL: Don't copy strings when searching for a column's indexTimothy Flynn
Also don't cast the return value to an int.
2022-11-30LibSQL: Rename Row::next_pointer setter to Row::set_next_pointerTimothy Flynn
2022-11-30SQLServer+SQLStudio+sql: Rename a couple of SQL IPC commands for clarityTimothy Flynn
Rename sql_statement to prepare_statement and statement_execute to execute_statement. The former aligns more with other database libraries (e.g. Java's JDBC prepareStatement). The latter reads less awkwardly.
2022-11-30LibSQL: Immediately commit database modifications (for now)Timothy Flynn
This ensures tables survive the database connection quitting. LibSQL does not have transactional sessions yet, and probably won't for a while, so let's just commit each modification as it comes.
2022-11-30LibSQL: Support BOOLEAN column types in the CREATE TABLE commandTimothy Flynn
The database already supports BOOLEAN, this just hooks up the executor as well.
2022-11-30LibVideo/VP9: Make get_tile_offset static and remove magic numbersZaggy1024
This can use the new utility functions for converting units now.
2022-11-30LibVideo/VP9: Put reference frames into a structZaggy1024
2022-11-30LibVideo/VP9: Remove now-unused clear_context function from ParserZaggy1024
2022-11-30LibVideo/VP9: Move partitioning contexts to TileContextZaggy1024
Like the non-zero tokens and segmentation IDs, these can be moved into the tile decoding loop for above context and allocated by TileContext for left context.
2022-11-30LibVideo/VP9: Use unit conversion functions in BlockContextZaggy1024
This should make things in there seem a little less magical :^)
2022-11-30LibVideo/VP9: Move segmentation id prediction context to TileContextZaggy1024
These can also be stored in the same places as the non-zero tokens contexts.
2022-11-30LibVideo/VP9: Add FIXME about implementation of tiled decodingZaggy1024
2022-11-30LibVideo/VP9: Move the above non-zero tokens context into decode_tilesZaggy1024
We can store this context in the stack of Parser::decode_tiles and use spans to give access to the sections of the context for each tile and subsequently each block.
2022-11-30LibVideo/VP9: Move the left non-zero tokens context to TileContextZaggy1024
The array containing the vertical line of bools indicating whether non- zero tokens were decoded in each sub-block is moved to TileContext, and a span of the valid range for a block to read and write to is created when we construct a BlockContext.
2022-11-30LibVideo/VP9: Split/clean up the token tree-parsing context functionZaggy1024
Since the context information for parsing residual tokens changes based on whether we're parsing the first coefficient or subsequent ones, the TreeParser::get_tokens_context function was split into two new ones to allow them to read more cleanly. All variables now have meaningful names to aid in readability as well. The math used in the function for the first token was changed to be more friendly to tile- or block-specific coordinates to facilitate range-restricted Spans of the above and left context arrays.
2022-11-30LibVideo/VP9: Store m_mode_context in BlockContextZaggy1024
This is set by motion vector selection to later be used by inter block info parsing.
2022-11-30LibVideo/VP9: Move the m_use_prev_frame_mvs field to FrameContextZaggy1024
2022-11-30LibVideo/VP9: Remove the m_use_hp field from ParserZaggy1024
This one is entirely scoped to the motion vector parsing function and its individual component read function.
2022-11-30LibVideo/VP9: Remove m_tokens and m_token_cache from ParserZaggy1024
Only the residual tokens array needs to be kept for the transforms to use after all the tokens have been parsed. The token cache is able to be kept in the stack only for the duration of the token parsing loop.
2022-11-30LibVideo/VP9: Fully qualify all reference frame type enum valuesZaggy1024
Since the enum is used as an index to arrays, it unfortunately can't be converted to an enum class, but at least we can make sure to use it with the qualified enum name to make things a bit clearer.
2022-11-30LibVideo/VP9: Convert TransformMode to an enum classZaggy1024
TXModeSelect was also renamed to plain Select, since the qualified name will be TransformMode::Select.
2022-11-30LibVideo/VP9: Change all names containing tx_size to transform_sizeZaggy1024
2022-11-30LibVideo/VP9: Prefix TransformSize with Transform_ instead of TX_Zaggy1024
2022-11-30LibVideo/VP9: Rename TX(Mode|Size) to Transform(Mode|Size)Zaggy1024
2022-11-30LibVideo/VP9: Specify more units in Parser::residual()Zaggy1024
Previously, the variables were named similarly to the names in spec which aren't very human-readable. This adds some utility functions for dimensional unit conversions and names the variables in residual() based on their units. References to 4x4 blocks were also renamed to call them sub-blocks instead, since unit conversion functions would not be able to begin with "4x4_blocks".
2022-11-30LibVideo/VP9: Move persistent context storage to a different headerZaggy1024
Moving these to another header allows Parser.h to include less context structs/classes that were previously in Context.h. This change will also allow consolidating some common calculations into Context.h, since we won't be polluting the VP9 namespace as much. There are quite a few duplicate calculations for block size, transform size, number of horizontal and vertical sub-blocks per block, all of which could be moved to Context.h to allow for code deduplication and more semantic code where those calculations are needed.
2022-11-30LibVideo/VP9: Replace (DCT|ADST)_(DCT_ADST) with struct TransformSetZaggy1024
Those previous constants were only set and used to select the first and second transforms done by the Decoder class. By turning it into a struct, we can make the code a bit more legible while keeping those transform modes the same size as before or smaller.
2022-11-30LibVideo/VP9: Convert token scan order indices to u16Zaggy1024
They are directly taken from lookup tables that only need that bit precision, so may as well shrink them.
2022-11-30LibVideo/VP9: Pass the sub-block transform type around as a parameterZaggy1024
The sub-block transform types set and then used in a very small scope, so now it is just stored in a variable and passed to the two functions that need it, Parser::tokens() and Decoder::reconstruct().
2022-11-30LibVideo/VP9: Move segmentation parameters to FrameContextZaggy1024
Note that some of the previous segmentation feature settings must be preserved when a frame is decoded that doesn't use segmentation. This change also allowed a few functions in Decoder to be made static.
2022-11-30LibVideo/VP9: Use a bitwise enum for motion vector joint selectionZaggy1024
The motion vector joints enum is set up so that the first bit indicates that a vector should have a non-zero value in the column, and the second bit indicates a non-zero value for the row. Taking advantage of this makes the code a bit more legible.
2022-11-30LibVideo/VP9: Index inter-frame references with named fields or an enumZaggy1024
Previously, we were using size_t, often coerced from bool or u8, to index reference pairs. Now, they must either be taken directly from named fields or indexed using the `ReferenceIndex` enum with options `primary` and `secondary`. With a more explicit method of indexing these, the compiler can aid in using reference pairs correctly, and fuzzers may be able to detect undefined behavior more easily.
2022-11-30LibVideo/VP9: Move reference frame type fields to FrameContextZaggy1024
2022-11-30LibVideo/VP9: Move the transform mode field from Parser to FrameContextZaggy1024
2022-11-30LibVideo/VP9: Retain adjacent block contexts storage between framesZaggy1024
Re-allocating the storage is unnecessary, since the size will rarely change during playback.
2022-11-30LibVideo/VP9: Select and read motion vectors without fields in ParserZaggy1024
Candidate vector selections are only used to calculate the new vectors for the current block, so we only need to keep those for the duration of the inter_block_mode_info() call. Candidate vectors are now stored in BlockMotionVectorCandidates, which contains the fields necessary to choose the vector to use to sample from the selected reference frame. Most functions related to motion vectors were renamed to more verbose but meaningful names.
2022-11-30LibVideo/VP9: Store tile counts in FrameContextZaggy1024
The log2 of tile counts in the horizontal and vertical dimensions are now stored in the FrameContext struct to be kept only as long as they are needed.
2022-11-30LibVideo/VP9: Move more block fields into the BlockContext structZaggy1024
This includes the segment IDs, transform block sizes, prediction modes, sub-block counts, interpolation filters and sub-block motion vectors.
2022-11-30LibVideo/VP9: Move quantizer indices into FrameContextZaggy1024
This also renames (most?) of the related quantizer functions and variables to make more sense. I haven't determined what AC/DC stands for here, but it may be just an arbitrary naming scheme for the first and subsequent coefficients used to quantize the residuals for a block.
2022-11-30LibVideo/VP9: Move loop filter parameters to FrameContextZaggy1024
2022-11-30LibVideo/VP9: Move fields set in uncompressed_header() to FrameContextZaggy1024
2022-11-30LibVideo/VP9: Store color config in the frame contextZaggy1024
The color config is reused for most inter predicted frames, so we use a struct ColorConfig to store the config from intra frames, and put it in a field in Parser to copy from when an inter frame without color config is encountered.
2022-11-30LibVideo/VP9: Add a FIXME to keep render_and_frame_size_differentZaggy1024
The flag should be used to determine whether the pixel aspect ratio should be updated when frame/render sizes change in the bitstream.
2022-11-30LibVideo/VP9: Choose whether/how to show new frames using an enumZaggy1024
There are three mutually exclusive frame-showing states: - Show no new frame, only store the frame as a reference. - Show a newly decoded frame. - Show frame from the reference frame store. Since they are mutually exclusive, using an enum rather than two bools makes more sense.
2022-11-30LibVideo/VP9: Add Frame, Tile and Block context structsZaggy1024
These are used to pass context needed for decoding, with mutability scoped only to the sections that the function receiving the contexts needs to modify. This allows lifetimes of data to be more explicit rather than being stored in fields, as well as preventing tile threads from modifying outside their allowed bounds.
2022-11-30LibVideo/VP9: Create Vector2DView to limit writable ranges of contextsZaggy1024
2022-11-30LibVideo/VP9: Remove m_eob_total field from parserZaggy1024
The field was only used once to track whether residual tokens were present in the block. Parser::tokens() now returns a bool indicating whether they were present.
2022-11-30LibVideo/VP9: Remove m_mi_row and col fields from the parserZaggy1024
These are now passed as parameters to each function that uses them. These will later be moved to a struct to further reduce the amount of parameters that get passed around. Above and left per-frame block contexts are now also parameters passed to the functions that use them instead of being retrieved when needed from a field. This will allow them to be more easily moved to a tile- specific context later.