Jul 5, 2020, 23:47 by s...@jkqxz.net: > On 04/07/2020 14:17, hanishkvc wrote: > >> Add helper routines which can be used to detile tiled framebuffer >> layouts into a linear layout, using the cpu. >> >> Currently it supports Legacy Intel Tile-X, Legacy Intel Tile-Y and >> Newer Intel Tile-Yf tiled layouts. >> >> Currently supported pixel format is 32bit RGB. >> >> It also contains detile_generic logic, which can be easily configured >> to support different kinds of tiling layouts, at the expense of some >> processing speed, compared to developing a targeted detiling logic. >> --- >> libavutil/Makefile | 2 + >> libavutil/fbtile.c | 441 +++++++++++++++++++++++++++++++++++++++++++++ >> libavutil/fbtile.h | 228 +++++++++++++++++++++++ >> 3 files changed, 671 insertions(+) >> create mode 100644 libavutil/fbtile.c >> create mode 100644 libavutil/fbtile.h >> > > I do think this is a reasonable thing to include in FFmpeg, but please think > about what you actually want as a public API here. > > Ideally you want to minimise the public API surface while providing something > clean and of general use. > > So: > - It should probably operate on whole frames - copying pieces of frames or > single planes doesn't have any obvious use. > - The pixel format, width, height and pitches will all need to be specified, > so AVFrames which already include that information are probably the right > structure to use. > - You want to specify a tiling mode for the source frame somehow. > - For the untile case the destination is linear, but a plausible use-case is > the opposite so we could include tiling mode for the destination as well. > - The tiling modes will need to be some sort of enum, since they are all > ad-hoc setups for particular hardware vendors. > - We can't reuse existing values like those from libdrm because we'd like it > to work everywhere it can and there is no intrinsic dependence on libdrm, so > it needs to be a new enum. > - Names for the tiling modes should be valid everywhere, so if they are > platform-dependent (like Intel X/Y tiling) then the platform will need to be > included in the name. > - Linear should be in the tiling mode enum, so that you don't need special > cases elsewhere. > - All the dispatch between different implementations can happen internally, > so it doesn't need to be exposed. > - Not everything will actually be implemented, so it will need to be able to > return an error indicating that a particular case is not available. > > Given that, I make the desired public API to be exactly one enum and one > function. It would look something like: > > enum AVTilingMode { > AV_TILING_MODE_LINEAR = 0, > AV_TILING_MODE_INTEL_GEN7_X, > AV_TILING_MODE_INTEL_GEN7_Y, > AV_TILING_MODE_INTEL_GEN9_X, > AV_TILING_MODE_INTEL_GEN9_Y, > AV_TILING_MODE_INTEL_YF, > }; > > int av_frame_copy_with_tiling(const AVFrame *dst, enum AVTilingMode > dst_tiling, > const AVFrame *src, enum AVTilingMode src_tiling); > > > Some other thoughts: > - Functions should all be static unless you are intentionally exposing them > as public API. > - Libraries must not include mutable globals. > - Note that av_log(NULL, ...) should never be called from a library unless > you really are in a global context. I think you probably just don't want to > include any user-facing logging at all. > - Look at the coding style guide, especially around naming and operator > spacing. >
Yes, in general those are good guidelines for public APIs. But please, _don't_ in this case. Really. I've already said its not a good idea and I'll reject future patches that do simply because its a problem exclusive to hwcontext_drm and directly solvable there. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".