From: Mark Thompson <sw@jkqxz.net>
To: ffmpeg-devel@ffmpeg.org
Subject: Re: [FFmpeg-devel] [PATCH v1] avcodec/cbs: Keep ff_cbs_trace_syntax_element
Date: Mon, 16 Oct 2023 22:13:58 +0100
Message-ID: <bdf089d8-b137-4cca-9d33-1c99dd0e4ef2@jkqxz.net> (raw)
In-Reply-To: <DM6PR11MB26814F96139392B6E16CABFCB1CDA@DM6PR11MB2681.namprd11.prod.outlook.com>
On 10/10/2023 04:30, Dai, Jianhui J wrote:
>> -----Original Message-----
>> From: Dai, Jianhui J <jianhui.j.dai@intel.com>
>> Sent: Tuesday, October 10, 2023 10:57 AM
>> To: ffmpeg-devel@ffmpeg.org
>> Subject: [PATCH v1] avcodec/cbs: Keep ff_cbs_trace_syntax_element
>>
>> Split ff_cbs_trace_syntax_element from ff_cbs_trace_read_log to decouple the
>> tracing from GetBitContext. This allows CBS implementations that do not have a
>> GetBitContext to directly use ff_cbs_trace_syntax_element to trace syntax
>> elements.
>>
>> Signed-off-by: Jianhui Dai <jianhui.j.dai@intel.com>
>> ---
>> libavcodec/cbs.c | 41 +++++++++++++++++++++++++--------------
>> libavcodec/cbs_internal.h | 4 ++++
>> 2 files changed, 30 insertions(+), 15 deletions(-)
>>
>> diff --git a/libavcodec/cbs.c b/libavcodec/cbs.c index cdd7adebeb..2f2cfcfb31
>> 100644
>> --- a/libavcodec/cbs.c
>> +++ b/libavcodec/cbs.c
>> @@ -498,26 +498,18 @@ void ff_cbs_trace_header(CodedBitstreamContext
>> *ctx,
>> av_log(ctx->log_ctx, ctx->trace_level, "%s\n", name); }
>>
>> -void ff_cbs_trace_read_log(void *trace_context,
>> - GetBitContext *gbc, int length,
>> - const char *str, const int *subscripts,
>> - int64_t value)
>> +void ff_cbs_trace_syntax_element(CodedBitstreamContext *ctx, int position,
>> + const char *str, const int *subscripts,
>> + const char *bits, int64_t value)
>> {
>> - CodedBitstreamContext *ctx = trace_context;
>> char name[256];
>> - char bits[256];
>> size_t name_len, bits_len;
>> int pad, subs, i, j, k, n;
>> - int position;
>> -
>> - av_assert0(value >= INT_MIN && value <= UINT32_MAX);
>>
>> - position = get_bits_count(gbc);
>> + if (!ctx->trace_enable)
>> + return;
>>
>> - av_assert0(length < 256);
>> - for (i = 0; i < length; i++)
>> - bits[i] = get_bits1(gbc) ? '1' : '0';
>> - bits[length] = 0;
>> + av_assert0(value >= INT_MIN && value <= UINT32_MAX);
>>
>> subs = subscripts ? subscripts[0] : 0;
>> n = 0;
>> @@ -545,7 +537,7 @@ void ff_cbs_trace_read_log(void *trace_context,
>> av_assert0(n == subs);
>>
>> name_len = strlen(name);
>> - bits_len = length;
>> + bits_len = strlen(bits);
>>
>> if (name_len + bits_len > 60)
>> pad = bits_len + 2;
>> @@ -556,6 +548,25 @@ void ff_cbs_trace_read_log(void *trace_context,
>> position, name, pad, bits, value); }
>>
>> +void ff_cbs_trace_read_log(void *trace_context,
>> + GetBitContext *gbc, int length,
>> + const char *str, const int *subscripts,
>> + int64_t value) {
>> + CodedBitstreamContext *ctx = trace_context;
>> + char bits[256];
>> + int position;
>> +
>> + position = get_bits_count(gbc);
>> +
>> + av_assert0(length < 256);
>> + for (int i = 0; i < length; i++)
>> + bits[i] = get_bits1(gbc) ? '1' : '0';
>> + bits[length] = 0;
>> +
>> + ff_cbs_trace_syntax_element(ctx, position, str, subscripts, bits,
>> +value); }
>> +
>> void ff_cbs_trace_write_log(void *trace_context,
>> PutBitContext *pbc, int length,
>> const char *str, const int *subscripts, diff --git
>> a/libavcodec/cbs_internal.h b/libavcodec/cbs_internal.h index
>> 07220f1f3e..ff90ce467d 100644
>> --- a/libavcodec/cbs_internal.h
>> +++ b/libavcodec/cbs_internal.h
>> @@ -158,6 +158,10 @@ typedef struct CodedBitstreamType { void
>> ff_cbs_trace_header(CodedBitstreamContext *ctx,
>> const char *name);
>>
>> +void ff_cbs_trace_syntax_element(CodedBitstreamContext *ctx, int position,
>> + const char *name, const int *subscripts,
>> + const char *bitstring, int64_t value);
>> +
>>
>> // Helper functions for read/write of common bitstream elements, including //
>> generation of trace output. The simple functions are equivalent to
>
> @Mark Thompson <sw@jkqxz.net>
> Could you please take a look if it's a valid change based on your last refactor?
> It's intended to use for the reviewing cbs_vp8 patch.
The simple answer here is to forge a GetBitContext pointing at the right place, like the write tracing does.
However: for your VP8 case, I'm a bit unclear why it isn't using get_bits already? The setup seems to be to stop normal parsing at the end of the uncompressed header and then read bytes through a pointer for the range coder rather than continuing with the bit reader.
If the range decoder used the GetBitContext to read the input instead of reading bytes from the array then your problem would be solved. Doing that would also allow it to renormalise directly after each read rather than reading by bytes, so the actual bits consumed for each symbol would be visible in tracing.
(I admit I'm not very clear what your motivation for making a read-only CBS implementation for VP8 is, and that might guide the best answer. If it's tracing then showing the consumed bits precisely seems useful, but if it's something else then that's less relevant.)
Thanks,
- Mark
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next prev parent reply other threads:[~2023-10-16 21:13 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-10 2:56 Dai, Jianhui J
2023-10-10 3:30 ` Dai, Jianhui J
2023-10-16 21:13 ` Mark Thompson [this message]
2023-10-17 12:42 ` Dai, Jianhui J
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=bdf089d8-b137-4cca-9d33-1c99dd0e4ef2@jkqxz.net \
--to=sw@jkqxz.net \
--cc=ffmpeg-devel@ffmpeg.org \
/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
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
This inbox may be cloned and mirrored by anyone:
git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
ffmpegdev@gitmailbox.com
public-inbox-index ffmpegdev
Example config snippet for mirrors.
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git