From: Pekka Paalanen <ppaalanen@gmail.com>
To: Shashank Sharma <contactshashanksharma@gmail.com>
Cc: linux-media@vger.kernel.org, hverkuil-cisco@xs4all.nl,
Shashank Sharma <shashank.sharma@amd.com>,
Jani Nikula <jani.nikula@intel.com>
Subject: Re: [PATCH 1/3] edid-decode: Introduce libedid-decode wrapper
Date: Mon, 7 Mar 2022 17:54:52 +0200 [thread overview]
Message-ID: <20220307175452.73918180@eldfell> (raw)
In-Reply-To: <20220304125001.1732057-1-contactshashanksharma@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 4584 bytes --]
On Fri, 4 Mar 2022 13:49:59 +0100
Shashank Sharma <contactshashanksharma@gmail.com> wrote:
> From: Shashank Sharma <shashank.sharma@amd.com>
>
> This patch does some small changes to make the core logic of
> edid-decode tool available to a shared library wrapper. With
> these changes, the EDID's 'state' variable will be avialble
> to another process via some library API calls.
>
> Cc: Pekka Paalanen <ppaalanen@gmail.com>
> Cc: Jani Nikula <jani.nikula@intel.com>
>
> Signed-off-by: Shashank Sharma <contactshashanksharma@gmail.com>
Hi Shashank,
thank you very much for working on this!
> ---
> Makefile | 22 +++++++++++++++++++++-
> edid-decode.cpp | 15 ++++++++++++++-
> 2 files changed, 35 insertions(+), 2 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index 1843700..ebf3370 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1,14 +1,20 @@
> ifeq ($(OS),Windows_NT)
> bindir ?= /usr/bin
> mandir ?= /usr/share/man
> + libdir ?= /usr/lib
> + includedir ?= /usr/include
> else
> UNAME_S := $(shell uname -s)
> ifeq ($(UNAME_S),Darwin)
> bindir ?= /usr/local/sbin
> mandir ?= /usr/local/share/man
> + libdir ?= /usr/local/lib
> + includedir ?= /usr/include
> else
> bindir ?= /usr/bin
> mandir ?= /usr/share/man
> + libdir ?= /usr/lib
> + includedir ?= /usr/include
> endif
> endif
>
> @@ -19,6 +25,11 @@ SOURCES = edid-decode.cpp parse-base-block.cpp parse-cta-block.cpp \
> parse-di-ext-block.cpp parse-vtb-ext-block.cpp calc-gtf-cvt.cpp
> WARN_FLAGS = -Wall -Wextra -Wno-missing-field-initializers -Wno-unused-parameter -Wimplicit-fallthrough
>
> +LIB_NAME = libedid-decode.so
> +LIB_FLAGS = -fPIC
> +LIBLINK_FLAGS = -shared
> +LIB_SOURCES = libedid-decode-api.cpp
libedid-decode-api.cpp does not exist yet in this patch.
> +
> all: edid-decode
>
> sha = -DSHA=$(shell if test -d .git ; then git rev-parse --short=12 HEAD ; fi)
> @@ -30,11 +41,20 @@ edid-decode: $(SOURCES) edid-decode.h oui.h Makefile
> edid-decode.js: $(SOURCES) edid-decode.h oui.h Makefile
> $(EMXX) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(WARN_FLAGS) $(sha) $(date) -s EXPORTED_FUNCTIONS='["_parse_edid"]' -s EXTRA_EXPORTED_RUNTIME_METHODS='["ccall", "cwrap"]' -o $@ $(SOURCES) -lm
>
> +libedid-decode: $(SOURCES) edid-decode.h oui.h Makefile
> + $(CXX) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(WARN_FLAGS) -g $(LIB_FLAGS) $(sha) $(date) $(LIBLINK_FLAGS) -o $(LIB_NAME) $(LIB_SOURCES) $(SOURCES) -lm
> +
> clean:
> - rm -f edid-decode
> + rm -f edid-decode libedid-decode.so
>
> install:
> mkdir -p $(DESTDIR)$(bindir)
> install -m 0755 edid-decode $(DESTDIR)$(bindir)
> mkdir -p $(DESTDIR)$(mandir)/man1
> install -m 0644 edid-decode.1 $(DESTDIR)$(mandir)/man1
> +
> +install-lib:
> + mkdir -p $(DESTDIR)$(libdir)
> + mkdir -p $(DESTDIR)$(includedir)
> + install -m 0755 libedid-decode.so $(DESTDIR)$(libdir)
> + install -m 0644 libedid-decode-api.h $(DESTDIR)$(includedir)
libedid-decode-api.h does not exist yet in this patch.
I find it a little odd to have these targets here without the actual
files. Maybe the first patch could already have a library building but
expose just parse and destroy functions without any getters yet?
> diff --git a/edid-decode.cpp b/edid-decode.cpp
> index 4a90aba..babff4a 100644
> --- a/edid-decode.cpp
> +++ b/edid-decode.cpp
> @@ -21,7 +21,7 @@
> #define STR(x) #x
> #define STRING(x) STR(x)
>
> -static edid_state state;
> +edid_state state;
>
> static unsigned char edid[EDID_PAGE_SIZE * EDID_MAX_BLOCKS];
> static bool odd_hex_digits;
> @@ -1012,6 +1012,19 @@ static bool extract_edid(int fd, FILE *error)
> state.edid_size = edid_data.size();
> return true;
> }
> +struct edid_state *extract_edid_state(int fd, FILE *error)
> +{
> + bool ret;
> +
> + ret = extract_edid(fd, error);
> + if (ret) {
> + /* update the number of blocks */
> + state.num_blocks = state.edid_size / EDID_PAGE_SIZE;
> + return &state;
A library should not give out pointers to global mutable data. That
would break having multiple EDIDs loaded at the same time.
I would expect to be able to keep and cache 'struct edid_state'
instances created by this library until I explicitly destroy them.
I would not expect parsing a new EDID to overwrite the previously
returned object. IOW, I would expect to own the object created by the
library.
Thanks,
pq
> + }
> +
> + return NULL;
> +}
>
> static unsigned char crc_calc(const unsigned char *b)
> {
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2022-03-07 15:55 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-04 12:49 [PATCH 1/3] edid-decode: Introduce libedid-decode wrapper Shashank Sharma
2022-03-04 12:50 ` [PATCH 2/3] edid-decode: Introduce libedid-decode APIs Shashank Sharma
2022-03-07 16:11 ` Pekka Paalanen
2022-03-07 17:00 ` Shashank Sharma
2022-03-04 12:50 ` [PATCH 3/3] edid-decode: Add test utility for libedid-decode Shashank Sharma
2022-03-07 15:54 ` Pekka Paalanen [this message]
2022-03-07 16:48 ` [PATCH 1/3] edid-decode: Introduce libedid-decode wrapper Shashank Sharma
2022-03-08 11:21 ` Pekka Paalanen
2022-03-08 12:09 ` Hans Verkuil
2022-03-08 14:30 ` Pekka Paalanen
2022-03-08 16:36 ` Hans Verkuil
2022-03-09 14:09 ` Pekka Paalanen
2022-03-09 14:31 ` Sharma, Shashank
2022-03-09 15:41 ` Pekka Paalanen
2022-03-09 14:45 ` Hans Verkuil
2022-03-09 15:57 ` Pekka Paalanen
2022-03-09 16:00 ` Hans Verkuil
2022-03-10 12:52 ` Pekka Paalanen
2022-04-13 10:40 ` Pekka Paalanen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220307175452.73918180@eldfell \
--to=ppaalanen@gmail.com \
--cc=contactshashanksharma@gmail.com \
--cc=hverkuil-cisco@xs4all.nl \
--cc=jani.nikula@intel.com \
--cc=linux-media@vger.kernel.org \
--cc=shashank.sharma@amd.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox