Add support to more pixel formats in vicodec
v4 cover Add support to more pixel formats in vicodec
The new supported formats areV4L2_PIX_FMT_GREY, V4L2_PIX_FMT_ARGB32, V4L2_PIX_FMT_ABGR32.
The returned encoded format is chaned to support various numbers of planes instead of assuming 3 planes.
The first patch adds new fields to structs.
The second patch adds support for V4L2_PIX_FMT_GREY.
The third patch adds support for V4L2_PIX_FMT_ARGB32, V4L2_PIX_FMT_ABGR32.
Changes from v3:
patch 1,3: - no change
patch 2:
- replace the 2-bit flag FWHT_FL_COMPONENTS_NUM_BIT[01] with GENMASK
- add TODO comment - handle the case where the encoded stream is different format than the decoded
- allocate maximal space for the V4L2_PIX_FMT_FWHT format
with the test 'flags & FWHT_FL_COMPONENTS_NUM_BIT[01]'
Dafna Hirschfeld (3):
media: vicodec: prepare support for various number of planes
media: vicodec: Add support of greyscale format
media: vicodec: Add support for 4 planes formats
drivers/media/platform/vicodec/codec-fwht.c | 73 +++++++---- drivers/media/platform/vicodec/codec-fwht.h | 15 ++- .../media/platform/vicodec/codec-v4l2-fwht.c | 123 +++++++++++++----- .../media/platform/vicodec/codec-v4l2-fwht.h | 3 +- drivers/media/platform/vicodec/vicodec-core.c | 35 ++++- 5 files changed, 182 insertions(+), 67 deletions(-)
Signature · 1 line
2.17.1
PATCH v4 1/3 media: vicodec: prepare support for various number of planes
Add fields to the structs fwht_raw_frame, v4l2_fwht_pixfmts to support various number of planes - formats
with alpha channel that have 4 planes and greyscale formats that have 1 plane.
--- drivers/media/platform/vicodec/codec-fwht.c | 2 +- drivers/media/platform/vicodec/codec-fwht.h | 5 +- .../media/platform/vicodec/codec-v4l2-fwht.c | 47 ++++++++++--------- .../media/platform/vicodec/codec-v4l2-fwht.h | 3 +- drivers/media/platform/vicodec/vicodec-core.c | 2 +- 5 files changed, 32 insertions(+), 27 deletions(-)
drivers/media/platform/vicodec/codec-fwht.c +1 -1
@@ -760,7 +760,7 @@ u32 fwht_encode_frame(struct fwht_raw_frame *frm, rlco_max = rlco + size /2 -256 ; encoding =encode_plane (frm->luma, ref_frm->luma, &rlco, rlco_max, cf, frm->height, frm->width, - frm->luma_step, is_intra, next_is_intra); + frm->luma_alpha_step, is_intra, next_is_intra);if (encoding &FWHT_FRAME_UNENCODED ) encoding |=FWHT_LUMA_UNENCODED ; encoding &= ~FWHT_FRAME_UNENCODED ;
drivers/media/platform/vicodec/codec-fwht.h +3 -2
@@ -104,9 +104,10 @@ struct fwht_raw_frame {unsigned int width, height;unsigned int width_div;unsigned int height_div; -unsigned int luma_step; +unsigned int luma_alpha_step;unsigned int chroma_step; -u8 *luma, *cb, *cr; +unsigned int components_num; +u8 *luma, *cb, *cr, *alpha; };#define FWHT_FRAME_PCODED BIT(0)
drivers/media/platform/vicodec/codec-v4l2-fwht.c +25 -22
60 lines not on this page · raw message
drivers/media/platform/vicodec/codec-v4l2-fwht.h +2 -1
@@ -13,11 +13,12 @@ struct v4l2_fwht_pixfmt_info {unsigned int bytesperline_mult;unsigned int sizeimage_mult;unsigned int sizeimage_div; -unsigned int luma_step; +unsigned int luma_alpha_step;unsigned int chroma_step;/* Chroma plane subsampling */ unsigned int width_div;unsigned int height_div; +unsigned int components_num; };struct v4l2_fwht_state {
drivers/media/platform/vicodec/vicodec-core.c +1 -1
@@ -61,7 +61,7 @@ struct pixfmt_info { };static const struct v4l2_fwht_pixfmt_info pixfmt_fwht = { -V4L2_PIX_FMT_FWHT ,0 ,3 ,1 ,1 ,1 ,1 ,1 +V4L2_PIX_FMT_FWHT ,0 ,3 ,1 ,1 ,1 ,1 ,1 ,0 };static void vicodec_dev_release (struct device *dev)
Signature · 1 line
2.17.1
PATCH v4 2/3 media: vicodec: Add support of greyscale format
In reply to Dafna HirschfeldAdd support for single plane greyscale format V4L2_PIX_FMT_GREY. Also change the header of the encoded file to include the number of components.
--- drivers/media/platform/vicodec/codec-fwht.c | 56 +++++++++++-------- drivers/media/platform/vicodec/codec-fwht.h | 8 ++- .../media/platform/vicodec/codec-v4l2-fwht.c | 44 ++++++++++++--- drivers/media/platform/vicodec/vicodec-core.c | 25 +++++++-- 4 files changed, 93 insertions(+), 40 deletions(-)
drivers/media/platform/vicodec/codec-fwht.c +32 -24
@@ -753,9 +753,6 @@ u32 fwht_encode_frame(struct fwht_raw_frame *frm,__be16 *rlco = cf->rlc_data;__be16 *rlco_max;u32 encoding; -u32 chroma_h = frm->height / frm->height_div; -u32 chroma_w = frm->width / frm->width_div; -unsigned int chroma_size = chroma_h * chroma_w; rlco_max = rlco + size /2 -256 ; encoding = encode_plane(frm->luma, ref_frm->luma, &rlco, rlco_max, cf,
@@ -764,20 +761,27 @@ u32 fwht_encode_frame(struct fwht_raw_frame *frm,if (encoding &FWHT_FRAME_UNENCODED ) encoding |=FWHT_LUMA_UNENCODED ; encoding &= ~FWHT_FRAME_UNENCODED ; - rlco_max = rlco + chroma_size /2 -256 ; - encoding |=encode_plane (frm->cb, ref_frm->cb, &rlco, rlco_max, cf, + +if (frm->components_num >=3 ) { +u32 chroma_h = frm->height / frm->height_div; +u32 chroma_w = frm->width / frm->width_div; +unsigned int chroma_size = chroma_h * chroma_w; + + rlco_max = rlco + chroma_size /2 -256 ; + encoding |=encode_plane (frm->cb, ref_frm->cb, &rlco, rlco_max, cf, chroma_h, chroma_w, frm->chroma_step, is_intra, next_is_intra); -if (encoding &FWHT_FRAME_UNENCODED ) - encoding |=FWHT_CB_UNENCODED ; - encoding &= ~FWHT_FRAME_UNENCODED ; - rlco_max = rlco + chroma_size /2 -256 ; - encoding |=encode_plane (frm->cr, ref_frm->cr, &rlco, rlco_max, cf, +if (encoding &FWHT_FRAME_UNENCODED ) + encoding |=FWHT_CB_UNENCODED ; + encoding &= ~FWHT_FRAME_UNENCODED ; + rlco_max = rlco + chroma_size /2 -256 ; + encoding |=encode_plane (frm->cr, ref_frm->cr, &rlco, rlco_max, cf, chroma_h, chroma_w, frm->chroma_step, is_intra, next_is_intra); -if (encoding &FWHT_FRAME_UNENCODED ) - encoding |=FWHT_CR_UNENCODED ; - encoding &= ~FWHT_FRAME_UNENCODED ; +if (encoding &FWHT_FRAME_UNENCODED ) + encoding |=FWHT_CR_UNENCODED ; + encoding &= ~FWHT_FRAME_UNENCODED ; + } cf->size = (rlco - cf->rlc_data) *sizeof (*rlco);return encoding; }
@@ -836,20 +840,24 @@ static void decode_plane(struct fwht_cframe *cf, const __be16 **rlco, u8 *ref, }void fwht_decode_frame (struct fwht_cframe *cf,struct fwht_raw_frame *ref, -u32 hdr_flags) +u32 hdr_flags,unsigned int components_num) {const __be16 *rlco = cf->rlc_data; -u32 h = cf->height /2 ; -u32 w = cf->width /2 ; -if (hdr_flags &FWHT_FL_CHROMA_FULL_HEIGHT ) - h *=2 ; -if (hdr_flags &FWHT_FL_CHROMA_FULL_WIDTH ) - w *=2 ;decode_plane (cf, &rlco, ref->luma, cf->height, cf->width, hdr_flags &FWHT_FL_LUMA_IS_UNCOMPRESSED ); -decode_plane (cf, &rlco, ref->cb, h, w, - hdr_flags &FWHT_FL_CB_IS_UNCOMPRESSED ); -decode_plane (cf, &rlco, ref->cr, h, w, - hdr_flags &FWHT_FL_CR_IS_UNCOMPRESSED ); + +if (components_num >=3 ) { +u32 h = cf->height; +u32 w = cf->width; + +if (!(hdr_flags &FWHT_FL_CHROMA_FULL_HEIGHT )) + h /=2 ; +if (!(hdr_flags &FWHT_FL_CHROMA_FULL_WIDTH )) + w /=2 ; +decode_plane (cf, &rlco, ref->cb, h, w, + hdr_flags &FWHT_FL_CB_IS_UNCOMPRESSED ); +decode_plane (cf, &rlco, ref->cr, h, w, + hdr_flags &FWHT_FL_CR_IS_UNCOMPRESSED ); + } }
drivers/media/platform/vicodec/codec-fwht.h +6 -2
@@ -56,7 +56,7 @@#define FWHT_MAGIC1 0x4f4f4f4f#define FWHT_MAGIC2 0xffffffff -#define FWHT_VERSION 1 +#define FWHT_VERSION 2/* Set if this is an interlaced format */ #define FWHT_FL_IS_INTERLACED BIT(0)
@@ -76,6 +76,10 @@#define FWHT_FL_CHROMA_FULL_HEIGHT BIT(7)#define FWHT_FL_CHROMA_FULL_WIDTH BIT(8) +/* A 4-values flag - the number of components - 1 */ +#define FWHT_FL_COMPONENTS_NUM_MSK GENMASK(17, 16) +#define FWHT_FL_COMPONENTS_NUM_OFFSET 16 +struct fwht_cframe_hdr {u32 magic1;u32 magic2;
@@ -121,6 +125,6 @@ u32 fwht_encode_frame(struct fwht_raw_frame *frm,struct fwht_cframe *cf, bool is_intra, bool next_is_intra);void fwht_decode_frame (struct fwht_cframe *cf,struct fwht_raw_frame *ref, -u32 hdr_flags); +u32 hdr_flags,unsigned int components_num);#endif
drivers/media/platform/vicodec/codec-v4l2-fwht.c +36 -8
90 lines not on this page · raw message
drivers/media/platform/vicodec/vicodec-core.c +19 -6
@@ -993,6 +993,16 @@ static int vicodec_start_streaming(struct vb2_queue *q,unsigned int size = q_data->width * q_data->height;const struct v4l2_fwht_pixfmt_info *info = q_data->info;unsigned int chroma_div = info->width_div * info->height_div; +unsigned int total_planes_size; + +/* +* we don't know ahead how many components are in the encoding type +* V4L2_PIX_FMT_FWHT, so we will allocate space for 3 planes. +*/ +if (info->id ==V4L2_PIX_FMT_FWHT || info->components_num >=3 ) + total_planes_size = size +2 * (size / chroma_div); +else + total_planes_size = size; q_data->sequence =0 ;
@@ -1002,10 +1012,8 @@ static int vicodec_start_streaming(struct vb2_queue *q, state->width = q_data->width; state->height = q_data->height; state->ref_frame.width = state->ref_frame.height =0 ; - state->ref_frame.luma =kvmalloc (size +2 * size / chroma_div, -GFP_KERNEL ); - ctx->comp_max_size = size +2 * size / chroma_div + -sizeof (struct fwht_cframe_hdr ); + state->ref_frame.luma =kvmalloc (total_planes_size,GFP_KERNEL ); + ctx->comp_max_size = total_planes_size +sizeof (struct fwht_cframe_hdr ); state->compressed_frame =kvmalloc (ctx->comp_max_size,GFP_KERNEL );if (!state->ref_frame.luma || !state->compressed_frame) {kvfree (state->ref_frame.luma);
@@ -1013,8 +1021,13 @@ static int vicodec_start_streaming(struct vb2_queue *q,vicodec_return_bufs (q,VB2_BUF_STATE_QUEUED );return -ENOMEM ; } - state->ref_frame.cb = state->ref_frame.luma + size; - state->ref_frame.cr = state->ref_frame.cb + size / chroma_div; +if (info->id ==V4L2_PIX_FMT_FWHT || info->components_num >=3 ) { + state->ref_frame.cb = state->ref_frame.luma + size; + state->ref_frame.cr = state->ref_frame.cb + size / chroma_div; + }else { + state->ref_frame.cb =NULL ; + state->ref_frame.cr =NULL ; + } ctx->last_src_buf =NULL ; ctx->last_dst_buf =NULL ; state->gop_cnt =0 ;
Signature · 1 line
2.17.1
PATCH v4 3/3 media: vicodec: Add support for 4 planes formats
In reply to Dafna HirschfeldAdd support for formats with 4 planes: V4L2_PIX_FMT_ABGR32, V4L2_PIX_FMT_ARGB32.
Also add alpha plane related flags to the header of the encoded file.
--- drivers/media/platform/vicodec/codec-fwht.c | 15 +++++++++ drivers/media/platform/vicodec/codec-fwht.h | 2 ++ .../media/platform/vicodec/codec-v4l2-fwht.c | 32 +++++++++++++++++++ drivers/media/platform/vicodec/vicodec-core.c | 12 +++++-- 4 files changed, 59 insertions(+), 2 deletions(-)
drivers/media/platform/vicodec/codec-fwht.c +15 -0
@@ -782,6 +782,17 @@ u32 fwht_encode_frame(struct fwht_raw_frame *frm, encoding |=FWHT_CR_UNENCODED ; encoding &= ~FWHT_FRAME_UNENCODED ; } + +if (frm->components_num ==4 ) { + rlco_max = rlco + size /2 -256 ; + encoding =encode_plane (frm->alpha, ref_frm->alpha, &rlco, rlco_max, cf, + frm->height, frm->width, + frm->luma_alpha_step, is_intra, next_is_intra); +if (encoding &FWHT_FRAME_UNENCODED ) + encoding |=FWHT_ALPHA_UNENCODED ; + encoding &= ~FWHT_FRAME_UNENCODED ; + } + cf->size = (rlco - cf->rlc_data) *sizeof (*rlco);return encoding; }
@@ -860,4 +871,8 @@ void fwht_decode_frame(struct fwht_cframe *cf, struct fwht_raw_frame *ref,decode_plane (cf, &rlco, ref->cr, h, w, hdr_flags &FWHT_FL_CR_IS_UNCOMPRESSED ); } + +if (components_num ==4 ) +decode_plane (cf, &rlco, ref->alpha, cf->height, cf->width, + hdr_flags &FWHT_FL_ALPHA_IS_UNCOMPRESSED ); }
drivers/media/platform/vicodec/codec-fwht.h +2 -0
@@ -75,6 +75,7 @@#define FWHT_FL_CR_IS_UNCOMPRESSED BIT(6)#define FWHT_FL_CHROMA_FULL_HEIGHT BIT(7)#define FWHT_FL_CHROMA_FULL_WIDTH BIT(8) +#define FWHT_FL_ALPHA_IS_UNCOMPRESSED BIT(9)/* A 4-values flag - the number of components - 1 */ #define FWHT_FL_COMPONENTS_NUM_MSK GENMASK(17, 16)
@@ -119,6 +120,7 @@ struct fwht_raw_frame {#define FWHT_LUMA_UNENCODED BIT(2)#define FWHT_CB_UNENCODED BIT(3)#define FWHT_CR_UNENCODED BIT(4) +#define FWHT_ALPHA_UNENCODED BIT(5) u32 fwht_encode_frame(struct fwht_raw_frame *frm, struct fwht_raw_frame *ref_frm,
drivers/media/platform/vicodec/codec-v4l2-fwht.c +32 -0
@@ -33,6 +33,8 @@ static const struct v4l2_fwht_pixfmt_info v4l2_fwht_pixfmts[] = { { V4L2_PIX_FMT_RGB32, 4, 4, 1, 4, 4, 1, 1, 3}, { V4L2_PIX_FMT_XRGB32, 4, 4, 1, 4, 4, 1, 1, 3}, { V4L2_PIX_FMT_HSV32, 4, 4, 1, 4, 4, 1, 1, 3}, + { V4L2_PIX_FMT_ARGB32, 4, 4, 1, 4, 4, 1, 1, 4}, + { V4L2_PIX_FMT_ABGR32, 4, 4, 1, 4, 4, 1, 1, 4}, };
@@ -146,6 +148,18 @@ int v4l2_fwht_encode(struct v4l2_fwht_state *state, u8 *p_in, u8 *p_out) rf.cr = rf.cb +2 ; rf.luma++;break ; +case V4L2_PIX_FMT_ARGB32 : + rf.alpha = rf.luma; + rf.cr = rf.luma +1 ; + rf.cb = rf.cr +2 ; + rf.luma +=2 ; +break ; +case V4L2_PIX_FMT_ABGR32 : + rf.cb = rf.luma; + rf.cr = rf.cb +2 ; + rf.luma++; + rf.alpha = rf.cr +1 ; +break ;default :return -EINVAL ; }
@@ -177,6 +191,8 @@ int v4l2_fwht_encode(struct v4l2_fwht_state *state, u8 *p_in, u8 *p_out) flags |=FWHT_FL_CB_IS_UNCOMPRESSED ;if (encoding &FWHT_CR_UNENCODED ) flags |=FWHT_FL_CR_IS_UNCOMPRESSED ; +if (encoding &FWHT_ALPHA_UNENCODED ) + flags |=FWHT_FL_ALPHA_IS_UNCOMPRESSED ;if (rf.height_div ==1 ) flags |=FWHT_FL_CHROMA_FULL_HEIGHT ;if (rf.width_div ==1 )
@@ -356,6 +372,22 @@ int v4l2_fwht_decode(struct v4l2_fwht_state *state, u8 *p_in, u8 *p_out) *p++ =0 ; }break ; +case V4L2_PIX_FMT_ARGB32 : +for (i =0 , p = p_out; i < size; i++) { + *p++ = state->ref_frame.alpha[i]; + *p++ = state->ref_frame.cr[i]; + *p++ = state->ref_frame.luma[i]; + *p++ = state->ref_frame.cb[i]; + } +break ; +case V4L2_PIX_FMT_ABGR32 : +for (i =0 , p = p_out; i < size; i++) { + *p++ = state->ref_frame.cb[i]; + *p++ = state->ref_frame.luma[i]; + *p++ = state->ref_frame.cr[i]; + *p++ = state->ref_frame.alpha[i]; + } +break ;default :return -EINVAL ; }
drivers/media/platform/vicodec/vicodec-core.c +10 -2
@@ -997,9 +997,11 @@ static int vicodec_start_streaming(struct vb2_queue *q,/* * we don't know ahead how many components are in the encoding type -* V4L2_PIX_FMT_FWHT, so we will allocate space for 3 planes. +* V4L2_PIX_FMT_FWHT, so we will allocate space for 4 planes. */ -if (info->id ==V4L2_PIX_FMT_FWHT || info->components_num >=3 ) +if (info->id ==V4L2_PIX_FMT_FWHT || info->components_num ==4 ) + total_planes_size =2 * size +2 * (size / chroma_div); +else if (info->components_num ==3 ) total_planes_size = size +2 * (size / chroma_div);else total_planes_size = size;
@@ -1028,6 +1030,12 @@ static int vicodec_start_streaming(struct vb2_queue *q, state->ref_frame.cb =NULL ; state->ref_frame.cr =NULL ; } + +if (info->id ==V4L2_PIX_FMT_FWHT || info->components_num ==4 ) + state->ref_frame.alpha = state->ref_frame.cr + size / chroma_div; +else + state->ref_frame.alpha =NULL ; + ctx->last_src_buf =NULL ; ctx->last_dst_buf =NULL ; state->gop_cnt =0 ;
Signature · 1 line
2.17.1
Hello Dafna,
Thanks for the patches.
Just out of curiosity. Why these patches havent't been submitted to the media mailing list?
Also, how are you testing these changes?
Thanks,
Ezequiel
Quoted 44 lines · Dafna Hirschfeld
The new supported formats are
V4L2_PIX_FMT_GREY,V4L2_PIX_FMT_ARGB32,V4L2_PIX_FMT_ABGR32.The returned encoded format is chaned to support various numbers of planes instead of assuming 3 planes.
The first patch adds new fields to structs.
The second patch adds support forV4L2_PIX_FMT_GREY.
The third patch adds support forV4L2_PIX_FMT_ARGB32,V4L2_PIX_FMT_ABGR32.Changes from v3:
patch 1,3: - no change
patch 2:
- replace the 2-bit flag FWHT_FL_COMPONENTS_NUM_BIT[01] with GENMASK
- add TODO comment - handle the case where the encoded stream is different format than the decoded
- allocate maximal space for theV4L2_PIX_FMT_FWHTformatwith the test 'flags & FWHT_FL_COMPONENTS_NUM_BIT[01]'
Dafna Hirschfeld (3):
media: vicodec: prepare support for various number of planes
media: vicodec: Add support of greyscale format
media: vicodec: Add support for 4 planes formatsdrivers/media/platform/vicodec/codec-fwht.c | 73 +++++++---- drivers/media/platform/vicodec/codec-fwht.h | 15 ++- .../media/platform/vicodec/codec-v4l2-fwht.c | 123 +++++++++++++----- .../media/platform/vicodec/codec-v4l2-fwht.h | 3 +- drivers/media/platform/vicodec/vicodec-core.c | 35 ++++- 5 files changed, 182 insertions(+), 67 deletions(-)--
2.17.1--
You received this message because you are subscribed to the Google Groups "outreachy-kernel" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected].
To view this discussion on the web visit https://groups.google.com/d/msgid/outreachy-kernel/cover.1541451484.git.dafna3%40gmail.com.
For more options, visit https://groups.google.com/d/optout.
Signature · 2 lines
Ezequiel García, VanguardiaSur www.vanguardiasur.com.ar
Quoted 8 lines · Ezequiel Garcia
Hello Dafna,
Thanks for the patches.
Just out of curiosity. Why these patches havent't been submitted to the media mailing list?
Hi,
I wasn't sure if I should send it to the media mailing list, since this part of outreachy application.
Also, how are you testing these changes?
Quoted 1 line
Based on Helen's decoder:
https://gitlab.collabora.com/koike/v4l2-codec
I extended it to include encoders and decoders for the new supported formats.
testing formats with alpha plane:
https://github.com/kamomil/outreachy/blob/master/argb-and-abgr-full-example.sh
testing greyscale:
https://github.com/kamomil/outreachy/blob/master/greyscale-full-example.sh
Dafna
Quoted 61 lines
Thanks,
EzequielQuoted 10 lines · Dafna Hirschfeld
The new supported formats are
V4L2_PIX_FMT_GREY,V4L2_PIX_FMT_ARGB32,V4L2_PIX_FMT_ABGR32.The returned encoded format is chaned to support various numbers of planes instead of assuming 3 planes.
The first patch adds new fields to structs. The second patch adds support for
V4L2_PIX_FMT_GREY. The third patch adds support forV4L2_PIX_FMT_ARGB32,
V4L2_PIX_FMT_ABGR32.Quoted 8 lines
Changes from v3:
patch 1,3: - no change
patch 2:
- replace the 2-bit flag FWHT_FL_COMPONENTS_NUM_BIT[01] with GENMASK
- add TODO comment - handle the case where the encoded stream isdifferent format
Quoted 17 lines
than the decoded
- allocate maximal space for theV4L2_PIX_FMT_FWHTformatwith the test 'flags & FWHT_FL_COMPONENTS_NUM_BIT[01]'
Dafna Hirschfeld (3):
media: vicodec: prepare support for various number of planes
media: vicodec: Add support of greyscale format
media: vicodec: Add support for 4 planes formatsdrivers/media/platform/vicodec/codec-fwht.c | 73 +++++++---- drivers/media/platform/vicodec/codec-fwht.h | 15 ++- .../media/platform/vicodec/codec-v4l2-fwht.c | 123 +++++++++++++----- .../media/platform/vicodec/codec-v4l2-fwht.h | 3 +- drivers/media/platform/vicodec/vicodec-core.c | 35 ++++- 5 files changed, 182 insertions(+), 67 deletions(-)Quoted 5 lines
--
2.17.1--
You received this message because you are subscribed to the GoogleGroups "outreachy-kernel" group.
Quoted 1 line
To unsubscribe from this group and stop receiving emails from it, send
an email to [email protected].
Quoted 2 lines
To post to this group, send email to [email protected]. To view this discussion on the web visit
https://groups.google.com/d/msgid/outreachy-kernel/cover.1541451484.git.dafna3%40gmail.com
.Quoted 1 line
For more options, visit https://groups.google.com/d/optout.
--
Ezequiel García, VanguardiaSur
www.vanguardiasur.com.ar
Quoted 5 lines · Dafna Hirschfeld
Quoted 2 lines · Ezequiel Garcia
Hello Dafna,
Quoted 8 lines
Quoted 6 lines
Thanks for the patches.
Just out of curiosity. Why these patches havent't been submitted to the media mailing list?
Hi,
I wasn't sure if I should send it to the media mailing list, since this part of outreachy application.
In general, for any patch you send to any subsystem please Cc all the relevant mailing lists and maintainers. For Outreachy application you already did that (by Cc'ing Greg), you just need to keep doing the same as you continue your work on other parts of the kernel.
Quoted 6 lines
Also, how are you testing these changes?
Quoted 1 line
Based on Helen's decoder:
https://gitlab.collabora.com/koike/v4l2-codec
Quoted 8 lines
I extended it to include encoders and decoders for the new supported formats.
testing formats with alpha plane:
https://github.com/kamomil/outreachy/blob/master/argb-and-abgr-full-example.shtesting greyscale:
https://github.com/kamomil/outreachy/blob/master/greyscale-full-example.sh
It's awesome seeing these testsuites, it gives reviewers confidence that your patch is well tested and they can focus on other parts of the review process rather than check for the basic correctness of the patch.
Please include links such as these and indicate how you tested your code in your future patches.
--
Thanks,
Sasha
Quoted 12 lines · Sasha Levin
Quoted 10 lines · Dafna Hirschfeld
Quoted 7 lines · Ezequiel Garcia
Hello Dafna,
Thanks for the patches.
Just out of curiosity. Why these patches havent't been submitted to the media mailing list?
Quoted 9 lines
Quoted 3 lines
Quoted 1 line
Hi,
I wasn't sure if I should send it to the media mailing list, since this part of outreachy application.
In general, for any patch you send to any subsystem please Cc all the relevant mailing lists and maintainers. For Outreachy application you already did that (by Cc'ing Greg), you just need to keep doing the same as you continue your work on other parts of the kernel.
Let's Cc the mailing list now, as these patches look good, and the test scripts look pretty decent too ;-)
Quoted 15 lines
Quoted 6 lines
Also, how are you testing these changes?
Quoted 1 line
Based on Helen's decoder:
https://gitlab.collabora.com/koike/v4l2-codecQuoted 8 lines
I extended it to include encoders and decoders for the new supported formats.
testing formats with alpha plane:
https://github.com/kamomil/outreachy/blob/master/argb-and-abgr-full-example.shtesting greyscale:
https://github.com/kamomil/outreachy/blob/master/greyscale-full-example.sh
Quoted 7 lines
It's awesome seeing these testsuites, it gives reviewers confidence that your patch is well tested and they can focus on other parts of the review process rather than check for the basic correctness of the patch.
Please include links such as these and indicate how you tested your code in your future patches.
+1
Thanks!
Signature · 2 lines
Ezequiel García, VanguardiaSur www.vanguardiasur.com.ar
Hi Dafna,
This patch series looks very nice!
Can you repost this and add a CC to linux-media?
I'm happy to take this.
The TODO that is in the decoder code (what to do if the fwht bitstream encodes fewer/more planes than the requested raw frame format) is something that needs to be implemented later as part of making vicodec compliant to the stateful codec specification.
Regards,
Hans
Quoted 34 lines · Dafna Hirschfeld
The new supported formats are
V4L2_PIX_FMT_GREY,V4L2_PIX_FMT_ARGB32,V4L2_PIX_FMT_ABGR32.The returned encoded format is chaned to support various numbers of planes instead of assuming 3 planes.
The first patch adds new fields to structs.
The second patch adds support forV4L2_PIX_FMT_GREY.
The third patch adds support forV4L2_PIX_FMT_ARGB32,V4L2_PIX_FMT_ABGR32.Changes from v3:
patch 1,3: - no change
patch 2:
- replace the 2-bit flag FWHT_FL_COMPONENTS_NUM_BIT[01] with GENMASK
- add TODO comment - handle the case where the encoded stream is different format than the decoded
- allocate maximal space for theV4L2_PIX_FMT_FWHTformatwith the test 'flags & FWHT_FL_COMPONENTS_NUM_BIT[01]'
Dafna Hirschfeld (3):
media: vicodec: prepare support for various number of planes
media: vicodec: Add support of greyscale format
media: vicodec: Add support for 4 planes formatsdrivers/media/platform/vicodec/codec-fwht.c | 73 +++++++---- drivers/media/platform/vicodec/codec-fwht.h | 15 ++- .../media/platform/vicodec/codec-v4l2-fwht.c | 123 +++++++++++++----- .../media/platform/vicodec/codec-v4l2-fwht.h | 3 +- drivers/media/platform/vicodec/vicodec-core.c | 35 ++++- 5 files changed, 182 insertions(+), 67 deletions(-)
Quoted 9 lines · Hans Verkuil
Hi Dafna,
This patch series looks very nice!
thanks:)
Can you repost this and add a CC to linux-media?
I will
I'm happy to take this.
Quoted 1 line
The TODO that is in the decoder code (what to do if the fwht bitstream
Quoted 5 lines
encodes fewer/more planes than the requested raw frame format) is something that needs to be implemented later as part of making vicodec compliant to the stateful codec specification.
I tried to look in the docs what should be done in that case and didn't
find.
The user can send VIDIOC_ENUM_FMT ioctl on CAPTURE to enumerate the supported formats based on the OUTPUT buffers
but this is only optional.
Dafna
Regards,
Quoted 42 lines
Hans
Quoted 9 lines · Dafna Hirschfeld
The new supported formats are
V4L2_PIX_FMT_GREY,V4L2_PIX_FMT_ARGB32,V4L2_PIX_FMT_ABGR32.The returned encoded format is chaned to support various numbers of planes instead of assuming 3 planes.
The first patch adds new fields to structs. The second patch adds support for
V4L2_PIX_FMT_GREY. The third patch adds support forV4L2_PIX_FMT_ARGB32,
V4L2_PIX_FMT_ABGR32.Quoted 8 lines
Changes from v3:
patch 1,3: - no change
patch 2:
- replace the 2-bit flag FWHT_FL_COMPONENTS_NUM_BIT[01] with GENMASK
- add TODO comment - handle the case where the encoded stream isdifferent format
Quoted 17 lines
than the decoded
- allocate maximal space for theV4L2_PIX_FMT_FWHTformatwith the test 'flags & FWHT_FL_COMPONENTS_NUM_BIT[01]'
Dafna Hirschfeld (3):
media: vicodec: prepare support for various number of planes
media: vicodec: Add support of greyscale format
media: vicodec: Add support for 4 planes formatsdrivers/media/platform/vicodec/codec-fwht.c | 73 +++++++---- drivers/media/platform/vicodec/codec-fwht.h | 15 ++- .../media/platform/vicodec/codec-v4l2-fwht.c | 123 +++++++++++++----- .../media/platform/vicodec/codec-v4l2-fwht.h | 3 +- drivers/media/platform/vicodec/vicodec-core.c | 35 ++++- 5 files changed, 182 insertions(+), 67 deletions(-)
Quoted 16 lines · Dafna Hirschfeld
On Tue, Nov 13, 2018 at 1:48 PM Hans Verkuil <[email protected] <mailto:[email protected]>> wrote:
Hi Dafna,
This patch series looks very nice!
thanks:)
Can you repost this and add a CC to linux-media?
I will
I'm happy to take this.
Quoted 8 lines
The TODO that is in the decoder code (what to do if the fwht bitstream encodes fewer/more planes than the requested raw frame format) is something that needs to be implemented later as part of making vicodec compliant to the stateful codec specification.
I tried to look in the docs what should be done in that case and didn't find.
The user can sendVIDIOC_ENUM_FMTioctl on CAPTURE to enumerate the supported formats based on the OUTPUT buffers but this is only optional.
You are referring to section 4.6.6, point 4 here:
https://hverkuil.home.xs4all.nl/request-api/uapi/v4l/dev-decoder.html
Right?
It's optional only in the sense that if you already happen to know what the stream contains, then you don't need to do it.
I'm CC-ing Tomasz Figa, since I think just describing a step as 'Optional' is too vague. Something like: 'If <condition>, then you need to perform this step' (or alternatively: 'If !<condition>, then you can skip this step'.
Regards,
Hans
Hi Hans, Dafna,
Quoted 31 lines · Hans Verkuil
Quoted 16 lines · Dafna Hirschfeld
On Tue, Nov 13, 2018 at 1:48 PM Hans Verkuil <[email protected] <mailto:[email protected]>> wrote:
Hi Dafna,
This patch series looks very nice!
thanks:)
Can you repost this and add a CC to linux-media?
I will
I'm happy to take this.
Quoted 8 lines
The TODO that is in the decoder code (what to do if the fwht bitstream encodes fewer/more planes than the requested raw frame format) is something that needs to be implemented later as part of making vicodec compliant to the stateful codec specification.
I tried to look in the docs what should be done in that case and didn't find.
The user can sendVIDIOC_ENUM_FMTioctl on CAPTURE to enumerate the supported formats based on the OUTPUT buffers but this is only optional.You are referring to section 4.6.6, point 4 here:
https://hverkuil.home.xs4all.nl/request-api/uapi/v4l/dev-decoder.html
Quoted 8 lines
Right?
It's optional only in the sense that if you already happen to know what the stream contains, then you don't need to do it.
I'm CC-ing Tomasz Figa, since I think just describing a step as 'Optional' is too vague. Something like: 'If <condition>, then you need to perform this step' (or alternatively: 'If !<condition>, then you can skip this step'.
Just to clarify, the documentation is written from userspace point of view. If something is optional for a userspace application, the application can use it and the driver is expected to support it.
I'm okay replacing "Optional" with something more specific, like "If the client does not need to change the default format", but I wonder if it wouldn't effectively become "if the client does not need to change the default format, or it wants to do it by probing a fixed list of formats it supports by using S_FMT or TRY_FMT, or what not, ...".
Perhaps just explaining the meaning of "Optional" explicitly in the "Conventions and notation used in this document" would be good enough?
Best regards,
Tomasz
Quoted 26 lines · Tomasz Figa
Hi Hans, Dafna,
Quoted 5 lines · Hans Verkuil
Quoted 3 lines · Dafna Hirschfeld
On Tue, Nov 13, 2018 at 1:48 PM Hans Verkuil <[email protected]
Quoted 7 lines · <mailto:[email protected]>> wrote:
Quoted 7 lines
Hi Dafna,
This patch series looks very nice!
thanks:)
Quoted 7 lines
Quoted 7 lines
Can you repost this and add a CC to linux-media?
I will
I'm happy to take this.
The TODO that is in the decoder code (what to do if the fwht
bitstream
Quoted 2 lines
Quoted 2 lines
encodes fewer/more planes than the requested raw frame format) is something that needs to be implemented later as part of making
Quoted 16 lines
vicodec
Quoted 3 lines
Quoted 3 lines
compliant to the stateful codec specification.
I tried to look in the docs what should be done in that case and
didn't find.
Quoted 1 line
Quoted 1 line
The user can send
VIDIOC_ENUM_FMTioctl on CAPTURE to enumerate thesupported formats based on the OUTPUT buffers
Quoted 8 lines
Quoted 1 line
but this is only optional.
You are referring to section 4.6.6, point 4 here:
https://hverkuil.home.xs4all.nl/request-api/uapi/v4l/dev-decoder.html
Right?
Right,
Quoted 3 lines
Quoted 3 lines
It's optional only in the sense that if you already happen to know what the stream contains, then you don't need to do it.
It still not clear to me what should be the behavior in case the user does give the CAPTURE format before the streaming starts
but then the actual encoded data that the user send is of different format. Can we trust the user to be consistent ?
Dafna
Quoted 23 lines
Quoted 1 line
I'm CC-ing Tomasz Figa, since I think just describing a step as
'Optional'
Quoted 2 lines
is too vague. Something like: 'If <condition>, then you need to perform this step' (or alternatively: 'If !<condition>, then you can skip this
step'.
Just to clarify, the documentation is written from userspace point of view. If something is optional for a userspace application, the application can use it and the driver is expected to support it.
I'm okay replacing "Optional" with something more specific, like "If the client does not need to change the default format", but I wonder if it wouldn't effectively become "if the client does not need to change the default format, or it wants to do it by probing a fixed list of formats it supports by using
S_FMTorTRY_FMT, or what not, ...".Perhaps just explaining the meaning of "Optional" explicitly in the "Conventions and notation used in this document" would be good enough?
Best regards,
Tomasz
Quoted 44 lines · Dafna Hirschfeld
On Thu, Nov 15, 2018 at 2:09 PM Tomasz Figa <[email protected] <mailto:[email protected]>> wrote:
Hi Hans, Dafna, On Thu, Nov 15, 2018 at 8:58 PM Hans Verkuil <[email protected] <mailto:[email protected]>> wrote: > > On 11/15/18 12:14, Dafna Hirschfeld wrote: > > > > > > On Tue, Nov 13, 2018 at 1:48 PM Hans Verkuil <[email protected] <mailto:[email protected]> <mailto:[email protected] <mailto:[email protected]>>> wrote: > > > > Hi Dafna, > > > > This patch series looks very nice! > > > > thanks:) > > > > Can you repost this and add a CC to linux-media? > > > > I will > > > > I'm happy to take this. > > > > The TODO that is in the decoder code (what to do if the fwht bitstream > > encodes fewer/more planes than the requested raw frame format) is > > something that needs to be implemented later as part of making vicodec > > compliant to the stateful codec specification. > > > > I tried to look in the docs what should be done in that case and didn't find. > > The user can send VIDIOC_ENUM_FMT ioctl on CAPTURE to enumerate the supported formats based on the OUTPUT buffers > > but this is only optional. > > You are referring to section 4.6.6, point 4 here: > > https://hverkuil.home.xs4all.nl/request-api/uapi/v4l/dev-decoder.html > > Right? >Right,
Quoted 6 lines
Quoted 3 lines
It's optional only in the sense that if you already happen to know what the stream contains, then you don't need to do it.
It still not clear to me what should be the behavior in case the user does give the CAPTURE format before the streaming starts but then the actual encoded data that the user send is of different format. Can we trust the user to be consistent ?
No, we can't trust users. At all :-)
So the driver would have to act the same as if there was a resolution change.
Tomasz, this is actually something to improve: it is not just resolution changes, but also incompatible capture formats. In this case, the stream contains RGB, but the capture format is YUV, and vicodec cannot convert from RGB to YUV.
I think sending a SOURCE_CHANGE event makes sense. One thing though: this would take place at the very start of the decoding process, so step 2 in section 4.6.9 (Dynamic resolution change) says "The decoder will then process and decode all remaining buffers from before the resolution change point.". But no buffers have been decoded yet, so should it queue an empty buffer with V4L2_BUF_FLAG_LAST set?
It is probably the right thing to do.
Regards,
Hans
Quoted 25 lines
Dafna
Quoted 3 lines
I'm CC-ing Tomasz Figa, since I think just describing a step as 'Optional' is too vague. Something like: 'If <condition>, then you need to perform this step' (or alternatively: 'If !<condition>, then you can skip this step'.
Just to clarify, the documentation is written from userspace point of view. If something is optional for a userspace application, the application can use it and the driver is expected to support it.
I'm okay replacing "Optional" with something more specific, like "If the client does not need to change the default format", but I wonder if it wouldn't effectively become "if the client does not need to change the default format, or it wants to do it by probing a fixed list of formats it supports by using
S_FMTorTRY_FMT, or what not, ...".Perhaps just explaining the meaning of "Optional" explicitly in the "Conventions and notation used in this document" would be good enough?
Best regards,
Tomasz
Quoted 61 lines · Hans Verkuil
Quoted 44 lines · Dafna Hirschfeld
On Thu, Nov 15, 2018 at 2:09 PM Tomasz Figa <[email protected] <mailto:[email protected]>> wrote:
Hi Hans, Dafna, On Thu, Nov 15, 2018 at 8:58 PM Hans Verkuil <[email protected] <mailto:[email protected]>> wrote: > > On 11/15/18 12:14, Dafna Hirschfeld wrote: > > > > > > On Tue, Nov 13, 2018 at 1:48 PM Hans Verkuil <[email protected] <mailto:[email protected]> <mailto:[email protected] <mailto:[email protected]>>> wrote: > > > > Hi Dafna, > > > > This patch series looks very nice! > > > > thanks:) > > > > Can you repost this and add a CC to linux-media? > > > > I will > > > > I'm happy to take this. > > > > The TODO that is in the decoder code (what to do if the fwht bitstream > > encodes fewer/more planes than the requested raw frame format) is > > something that needs to be implemented later as part of making vicodec > > compliant to the stateful codec specification. > > > > I tried to look in the docs what should be done in that case and didn't find. > > The user can send VIDIOC_ENUM_FMT ioctl on CAPTURE to enumerate the supported formats based on the OUTPUT buffers > > but this is only optional. > > You are referring to section 4.6.6, point 4 here: > > https://hverkuil.home.xs4all.nl/request-api/uapi/v4l/dev-decoder.html > > Right? >Right,
Quoted 6 lines
Quoted 3 lines
It's optional only in the sense that if you already happen to know what the stream contains, then you don't need to do it.
It still not clear to me what should be the behavior in case the user does give the CAPTURE format before the streaming starts but then the actual encoded data that the user send is of different format. Can we trust the user to be consistent ?
No, we can't trust users. At all :-)
So the driver would have to act the same as if there was a resolution change.
Tomasz, this is actually something to improve: it is not just resolution changes, but also incompatible capture formats. In this case, the stream contains RGB, but the capture format is YUV, and vicodec cannot convert from RGB to YUV.
Quoted 7 lines
I think sending a
SOURCE_CHANGEevent makes sense. One thing though: this would take place at the very start of the decoding process, so step 2 in section 4.6.9 (Dynamic resolution change) says "The decoder will then process and decode all remaining buffers from before the resolution change point.". But no buffers have been decoded yet, so should it queue an empty buffer withV4L2_BUF_FLAG_LASTset?It is probably the right thing to do.
There is already a source change event specified to be signaled in the Initialization sequence. It's defined to always happen after the driver establishes the format. Given that, is there any change still needed?
Best regards,
Tomasz
Quoted 68 lines · Tomasz Figa
Quoted 67 lines · Hans Verkuil
Quoted 44 lines · Dafna Hirschfeld
On Thu, Nov 15, 2018 at 2:09 PM Tomasz Figa <[email protected] <mailto:[email protected]>> wrote:
Hi Hans, Dafna, On Thu, Nov 15, 2018 at 8:58 PM Hans Verkuil <[email protected] <mailto:[email protected]>> wrote: > > On 11/15/18 12:14, Dafna Hirschfeld wrote: > > > > > > On Tue, Nov 13, 2018 at 1:48 PM Hans Verkuil <[email protected] <mailto:[email protected]> <mailto:[email protected] <mailto:[email protected]>>> wrote: > > > > Hi Dafna, > > > > This patch series looks very nice! > > > > thanks:) > > > > Can you repost this and add a CC to linux-media? > > > > I will > > > > I'm happy to take this. > > > > The TODO that is in the decoder code (what to do if the fwht bitstream > > encodes fewer/more planes than the requested raw frame format) is > > something that needs to be implemented later as part of making vicodec > > compliant to the stateful codec specification. > > > > I tried to look in the docs what should be done in that case and didn't find. > > The user can send VIDIOC_ENUM_FMT ioctl on CAPTURE to enumerate the supported formats based on the OUTPUT buffers > > but this is only optional. > > You are referring to section 4.6.6, point 4 here: > > https://hverkuil.home.xs4all.nl/request-api/uapi/v4l/dev-decoder.html > > Right? >Right,
Quoted 6 lines
Quoted 3 lines
It's optional only in the sense that if you already happen to know what the stream contains, then you don't need to do it.
It still not clear to me what should be the behavior in case the user does give the CAPTURE format before the streaming starts but then the actual encoded data that the user send is of different format. Can we trust the user to be consistent ?
No, we can't trust users. At all :-)
So the driver would have to act the same as if there was a resolution change.
Tomasz, this is actually something to improve: it is not just resolution changes, but also incompatible capture formats. In this case, the stream contains RGB, but the capture format is YUV, and vicodec cannot convert from RGB to YUV.
I think sending a
SOURCE_CHANGEevent makes sense. One thing though: this would take place at the very start of the decoding process, so step 2 in section 4.6.9 (Dynamic resolution change) says "The decoder will then process and decode all remaining buffers from before the resolution change point.". But no buffers have been decoded yet, so should it queue an empty buffer withV4L2_BUF_FLAG_LASTset?
Quoted 6 lines
Quoted 1 line
It is probably the right thing to do.
There is already a source change event specified to be signaled in the Initialization sequence. It's defined to always happen after the driver establishes the format. Given that, is there any change still needed?
Ah, you're right. It has to be documented that this happens as part of the pixel format documentation, right? So this should be added to the FWHT format doc once the proper behavior is implemented.
Regards.
Hans
Quoted 72 lines · Hans Verkuil
Quoted 70 lines · Tomasz Figa
Quoted 68 lines · Hans Verkuil
Quoted 44 lines · Dafna Hirschfeld
On Thu, Nov 15, 2018 at 2:09 PM Tomasz Figa <[email protected] <mailto:[email protected]>> wrote:
Hi Hans, Dafna, On Thu, Nov 15, 2018 at 8:58 PM Hans Verkuil <[email protected] <mailto:[email protected]>> wrote: > > On 11/15/18 12:14, Dafna Hirschfeld wrote: > > > > > > On Tue, Nov 13, 2018 at 1:48 PM Hans Verkuil <[email protected] <mailto:[email protected]> <mailto:[email protected] <mailto:[email protected]>>> wrote: > > > > Hi Dafna, > > > > This patch series looks very nice! > > > > thanks:) > > > > Can you repost this and add a CC to linux-media? > > > > I will > > > > I'm happy to take this. > > > > The TODO that is in the decoder code (what to do if the fwht bitstream > > encodes fewer/more planes than the requested raw frame format) is > > something that needs to be implemented later as part of making vicodec > > compliant to the stateful codec specification. > > > > I tried to look in the docs what should be done in that case and didn't find. > > The user can send VIDIOC_ENUM_FMT ioctl on CAPTURE to enumerate the supported formats based on the OUTPUT buffers > > but this is only optional. > > You are referring to section 4.6.6, point 4 here: > > https://hverkuil.home.xs4all.nl/request-api/uapi/v4l/dev-decoder.html > > Right? >Right,
Quoted 6 lines
Quoted 3 lines
It's optional only in the sense that if you already happen to know what the stream contains, then you don't need to do it.
It still not clear to me what should be the behavior in case the user does give the CAPTURE format before the streaming starts but then the actual encoded data that the user send is of different format. Can we trust the user to be consistent ?
No, we can't trust users. At all :-)
So the driver would have to act the same as if there was a resolution change.
Tomasz, this is actually something to improve: it is not just resolution changes, but also incompatible capture formats. In this case, the stream contains RGB, but the capture format is YUV, and vicodec cannot convert from RGB to YUV.
I think sending a
SOURCE_CHANGEevent makes sense. One thing though: this would take place at the very start of the decoding process, so step 2 in section 4.6.9 (Dynamic resolution change) says "The decoder will then process and decode all remaining buffers from before the resolution change point.". But no buffers have been decoded yet, so should it queue an empty buffer withV4L2_BUF_FLAG_LASTset?It is probably the right thing to do.
Quoted 8 lines
Quoted 4 lines
There is already a source change event specified to be signaled in the Initialization sequence. It's defined to always happen after the driver establishes the format. Given that, is there any change still needed?
Ah, you're right. It has to be documented that this happens as part of the pixel format documentation, right? So this should be added to the FWHT format doc once the proper behavior is implemented.
I wonder if it wouldn't be more consistent if we just made the driver send this event even for streams that don't include format data in the headers. In that case the driver would already have the information about the format from the OUTPUT queue (and internal constraints), so it could just signal the event instantly. WDYT?
Best regards,
Tomasz
Quoted 82 lines · Tomasz Figa
Quoted 72 lines · Hans Verkuil
Quoted 70 lines · Tomasz Figa
Quoted 68 lines · Hans Verkuil
Quoted 44 lines · Dafna Hirschfeld
On Thu, Nov 15, 2018 at 2:09 PM Tomasz Figa <[email protected] <mailto:[email protected]>> wrote:
Hi Hans, Dafna, On Thu, Nov 15, 2018 at 8:58 PM Hans Verkuil <[email protected] <mailto:[email protected]>> wrote: > > On 11/15/18 12:14, Dafna Hirschfeld wrote: > > > > > > On Tue, Nov 13, 2018 at 1:48 PM Hans Verkuil <[email protected] <mailto:[email protected]> <mailto:[email protected] <mailto:[email protected]>>> wrote: > > > > Hi Dafna, > > > > This patch series looks very nice! > > > > thanks:) > > > > Can you repost this and add a CC to linux-media? > > > > I will > > > > I'm happy to take this. > > > > The TODO that is in the decoder code (what to do if the fwht bitstream > > encodes fewer/more planes than the requested raw frame format) is > > something that needs to be implemented later as part of making vicodec > > compliant to the stateful codec specification. > > > > I tried to look in the docs what should be done in that case and didn't find. > > The user can send VIDIOC_ENUM_FMT ioctl on CAPTURE to enumerate the supported formats based on the OUTPUT buffers > > but this is only optional. > > You are referring to section 4.6.6, point 4 here: > > https://hverkuil.home.xs4all.nl/request-api/uapi/v4l/dev-decoder.html > > Right? >Right,
Quoted 6 lines
Quoted 3 lines
It's optional only in the sense that if you already happen to know what the stream contains, then you don't need to do it.
It still not clear to me what should be the behavior in case the user does give the CAPTURE format before the streaming starts but then the actual encoded data that the user send is of different format. Can we trust the user to be consistent ?
No, we can't trust users. At all :-)
So the driver would have to act the same as if there was a resolution change.
Tomasz, this is actually something to improve: it is not just resolution changes, but also incompatible capture formats. In this case, the stream contains RGB, but the capture format is YUV, and vicodec cannot convert from RGB to YUV.
I think sending a
SOURCE_CHANGEevent makes sense. One thing though: this would take place at the very start of the decoding process, so step 2 in section 4.6.9 (Dynamic resolution change) says "The decoder will then process and decode all remaining buffers from before the resolution change point.". But no buffers have been decoded yet, so should it queue an empty buffer withV4L2_BUF_FLAG_LASTset?It is probably the right thing to do.
Quoted 8 lines
Quoted 4 lines
There is already a source change event specified to be signaled in the Initialization sequence. It's defined to always happen after the driver establishes the format. Given that, is there any change still needed?
Ah, you're right. It has to be documented that this happens as part of the pixel format documentation, right? So this should be added to the FWHT format doc once the proper behavior is implemented.
Quoted 5 lines
I wonder if it wouldn't be more consistent if we just made the driver send this event even for streams that don't include format data in the headers. In that case the driver would already have the information about the format from the OUTPUT queue (and internal constraints), so it could just signal the event instantly. WDYT?
Can't we leave this open? Are there codecs where the stream doesn't have meta data? I'm not aware of any.
I'm not sure if we need to mention codecs without embedded meta data at all.
Perhaps just mention that such codecs are unsupported at the moment.
Regards,
Hans
Quoted 90 lines · Hans Verkuil
Quoted 82 lines · Tomasz Figa
Quoted 72 lines · Hans Verkuil
Quoted 70 lines · Tomasz Figa
Quoted 68 lines · Hans Verkuil
Quoted 44 lines · Dafna Hirschfeld
On Thu, Nov 15, 2018 at 2:09 PM Tomasz Figa <[email protected] <mailto:[email protected]>> wrote:
Hi Hans, Dafna, On Thu, Nov 15, 2018 at 8:58 PM Hans Verkuil <[email protected] <mailto:[email protected]>> wrote: > > On 11/15/18 12:14, Dafna Hirschfeld wrote: > > > > > > On Tue, Nov 13, 2018 at 1:48 PM Hans Verkuil <[email protected] <mailto:[email protected]> <mailto:[email protected] <mailto:[email protected]>>> wrote: > > > > Hi Dafna, > > > > This patch series looks very nice! > > > > thanks:) > > > > Can you repost this and add a CC to linux-media? > > > > I will > > > > I'm happy to take this. > > > > The TODO that is in the decoder code (what to do if the fwht bitstream > > encodes fewer/more planes than the requested raw frame format) is > > something that needs to be implemented later as part of making vicodec > > compliant to the stateful codec specification. > > > > I tried to look in the docs what should be done in that case and didn't find. > > The user can send VIDIOC_ENUM_FMT ioctl on CAPTURE to enumerate the supported formats based on the OUTPUT buffers > > but this is only optional. > > You are referring to section 4.6.6, point 4 here: > > https://hverkuil.home.xs4all.nl/request-api/uapi/v4l/dev-decoder.html > > Right? >Right,
Quoted 6 lines
Quoted 3 lines
It's optional only in the sense that if you already happen to know what the stream contains, then you don't need to do it.
It still not clear to me what should be the behavior in case the user does give the CAPTURE format before the streaming starts but then the actual encoded data that the user send is of different format. Can we trust the user to be consistent ?
No, we can't trust users. At all :-)
So the driver would have to act the same as if there was a resolution change.
Tomasz, this is actually something to improve: it is not just resolution changes, but also incompatible capture formats. In this case, the stream contains RGB, but the capture format is YUV, and vicodec cannot convert from RGB to YUV.
I think sending a
SOURCE_CHANGEevent makes sense. One thing though: this would take place at the very start of the decoding process, so step 2 in section 4.6.9 (Dynamic resolution change) says "The decoder will then process and decode all remaining buffers from before the resolution change point.". But no buffers have been decoded yet, so should it queue an empty buffer withV4L2_BUF_FLAG_LASTset?It is probably the right thing to do.
Quoted 8 lines
Quoted 4 lines
There is already a source change event specified to be signaled in the Initialization sequence. It's defined to always happen after the driver establishes the format. Given that, is there any change still needed?
Ah, you're right. It has to be documented that this happens as part of the pixel format documentation, right? So this should be added to the FWHT format doc once the proper behavior is implemented.
Quoted 5 lines
I wonder if it wouldn't be more consistent if we just made the driver send this event even for streams that don't include format data in the headers. In that case the driver would already have the information about the format from the OUTPUT queue (and internal constraints), so it could just signal the event instantly. WDYT?
Quoted 6 lines
Can't we leave this open? Are there codecs where the stream doesn't have meta data? I'm not aware of any.
I'm not sure if we need to mention codecs without embedded meta data at all.
Perhaps just mention that such codecs are unsupported at the moment.
That would indeed simplify things. I don't know too much about codecs other than H.264 and VPx, so can't really tell if none of the codecs we have FourCCs for would qualify as such, though...
Best regards,
Tomasz
Quoted 94 lines · Tomasz Figa
Quoted 93 lines · Hans Verkuil
Quoted 82 lines · Tomasz Figa
Quoted 72 lines · Hans Verkuil
Quoted 70 lines · Tomasz Figa
Quoted 68 lines · Hans Verkuil
Quoted 44 lines · Dafna Hirschfeld
On Thu, Nov 15, 2018 at 2:09 PM Tomasz Figa <[email protected] <mailto:[email protected]>> wrote:
Hi Hans, Dafna, On Thu, Nov 15, 2018 at 8:58 PM Hans Verkuil <[email protected] <mailto:[email protected]>> wrote: > > On 11/15/18 12:14, Dafna Hirschfeld wrote: > > > > > > On Tue, Nov 13, 2018 at 1:48 PM Hans Verkuil <[email protected] <mailto:[email protected]> <mailto:[email protected] <mailto:[email protected]>>> wrote: > > > > Hi Dafna, > > > > This patch series looks very nice! > > > > thanks:) > > > > Can you repost this and add a CC to linux-media? > > > > I will > > > > I'm happy to take this. > > > > The TODO that is in the decoder code (what to do if the fwht bitstream > > encodes fewer/more planes than the requested raw frame format) is > > something that needs to be implemented later as part of making vicodec > > compliant to the stateful codec specification. > > > > I tried to look in the docs what should be done in that case and didn't find. > > The user can send VIDIOC_ENUM_FMT ioctl on CAPTURE to enumerate the supported formats based on the OUTPUT buffers > > but this is only optional. > > You are referring to section 4.6.6, point 4 here: > > https://hverkuil.home.xs4all.nl/request-api/uapi/v4l/dev-decoder.html > > Right? >Right,
Quoted 6 lines
Quoted 3 lines
It's optional only in the sense that if you already happen to know what the stream contains, then you don't need to do it.
It still not clear to me what should be the behavior in case the user does give the CAPTURE format before the streaming starts but then the actual encoded data that the user send is of different format. Can we trust the user to be consistent ?
No, we can't trust users. At all :-)
So the driver would have to act the same as if there was a resolution change.
Tomasz, this is actually something to improve: it is not just resolution changes, but also incompatible capture formats. In this case, the stream contains RGB, but the capture format is YUV, and vicodec cannot convert from RGB to YUV.
I think sending a
SOURCE_CHANGEevent makes sense. One thing though: this would take place at the very start of the decoding process, so step 2 in section 4.6.9 (Dynamic resolution change) says "The decoder will then process and decode all remaining buffers from before the resolution change point.". But no buffers have been decoded yet, so should it queue an empty buffer withV4L2_BUF_FLAG_LASTset?It is probably the right thing to do.
Quoted 8 lines
Quoted 4 lines
There is already a source change event specified to be signaled in the Initialization sequence. It's defined to always happen after the driver establishes the format. Given that, is there any change still needed?
Ah, you're right. It has to be documented that this happens as part of the pixel format documentation, right? So this should be added to the FWHT format doc once the proper behavior is implemented.
Quoted 5 lines
I wonder if it wouldn't be more consistent if we just made the driver send this event even for streams that don't include format data in the headers. In that case the driver would already have the information about the format from the OUTPUT queue (and internal constraints), so it could just signal the event instantly. WDYT?
Can't we leave this open? Are there codecs where the stream doesn't have meta data? I'm not aware of any.
Quoted 7 lines
Quoted 3 lines
I'm not sure if we need to mention codecs without embedded meta data at all.
Perhaps just mention that such codecs are unsupported at the moment.
That would indeed simplify things. I don't know too much about codecs other than H.264 and VPx, so can't really tell if none of the codecs we have FourCCs for would qualify as such, though...
As far as I am aware, all of them do have metadata in the bitstream. So I'd just leave it out from the spec. Or perhaps leave a single mention that such codecs are not supported at the moment.
Regards,
Hans
Quoted 100 lines · Hans Verkuil
Quoted 98 lines · Tomasz Figa
Quoted 96 lines · Hans Verkuil
Quoted 82 lines · Tomasz Figa
Quoted 72 lines · Hans Verkuil
Quoted 70 lines · Tomasz Figa
Quoted 68 lines · Hans Verkuil
Quoted 44 lines · Dafna Hirschfeld
On Thu, Nov 15, 2018 at 2:09 PM Tomasz Figa <[email protected] <mailto:[email protected]>> wrote:
Hi Hans, Dafna, On Thu, Nov 15, 2018 at 8:58 PM Hans Verkuil <[email protected] <mailto:[email protected]>> wrote: > > On 11/15/18 12:14, Dafna Hirschfeld wrote: > > > > > > On Tue, Nov 13, 2018 at 1:48 PM Hans Verkuil <[email protected] <mailto:[email protected]> <mailto:[email protected] <mailto:[email protected]>>> wrote: > > > > Hi Dafna, > > > > This patch series looks very nice! > > > > thanks:) > > > > Can you repost this and add a CC to linux-media? > > > > I will > > > > I'm happy to take this. > > > > The TODO that is in the decoder code (what to do if the fwht bitstream > > encodes fewer/more planes than the requested raw frame format) is > > something that needs to be implemented later as part of making vicodec > > compliant to the stateful codec specification. > > > > I tried to look in the docs what should be done in that case and didn't find. > > The user can send VIDIOC_ENUM_FMT ioctl on CAPTURE to enumerate the supported formats based on the OUTPUT buffers > > but this is only optional. > > You are referring to section 4.6.6, point 4 here: > > https://hverkuil.home.xs4all.nl/request-api/uapi/v4l/dev-decoder.html > > Right? >Right,
Quoted 6 lines
Quoted 3 lines
It's optional only in the sense that if you already happen to know what the stream contains, then you don't need to do it.
It still not clear to me what should be the behavior in case the user does give the CAPTURE format before the streaming starts but then the actual encoded data that the user send is of different format. Can we trust the user to be consistent ?
No, we can't trust users. At all :-)
So the driver would have to act the same as if there was a resolution change.
Tomasz, this is actually something to improve: it is not just resolution changes, but also incompatible capture formats. In this case, the stream contains RGB, but the capture format is YUV, and vicodec cannot convert from RGB to YUV.
I think sending a
SOURCE_CHANGEevent makes sense. One thing though: this would take place at the very start of the decoding process, so step 2 in section 4.6.9 (Dynamic resolution change) says "The decoder will then process and decode all remaining buffers from before the resolution change point.". But no buffers have been decoded yet, so should it queue an empty buffer withV4L2_BUF_FLAG_LASTset?It is probably the right thing to do.
Quoted 8 lines
Quoted 4 lines
There is already a source change event specified to be signaled in the Initialization sequence. It's defined to always happen after the driver establishes the format. Given that, is there any change still needed?
Ah, you're right. It has to be documented that this happens as part of the pixel format documentation, right? So this should be added to the FWHT format doc once the proper behavior is implemented.
Quoted 5 lines
I wonder if it wouldn't be more consistent if we just made the driver send this event even for streams that don't include format data in the headers. In that case the driver would already have the information about the format from the OUTPUT queue (and internal constraints), so it could just signal the event instantly. WDYT?
Can't we leave this open? Are there codecs where the stream doesn't have meta data? I'm not aware of any.
I'm not sure if we need to mention codecs without embedded meta data at all.
Perhaps just mention that such codecs are unsupported at the moment.
Quoted 7 lines
Quoted 3 lines
That would indeed simplify things. I don't know too much about codecs other than H.264 and VPx, so can't really tell if none of the codecs we have FourCCs for would qualify as such, though...
As far as I am aware, all of them do have metadata in the bitstream. So I'd just leave it out from the spec. Or perhaps leave a single mention that such codecs are not supported at the moment.
Sounds good to me. Would you be able to post a comment like this in a reply to my patch? Thanks in advance.
Best regards,
Tomasz
Quoted 45 lines · Dafna Hirschfeld
Quoted 37 lines · Tomasz Figa
Hi Hans, Dafna,
Quoted 33 lines · Hans Verkuil
Quoted 16 lines · Dafna Hirschfeld
On Tue, Nov 13, 2018 at 1:48 PM Hans Verkuil <[email protected] <mailto:[email protected]>> wrote:
Hi Dafna,
This patch series looks very nice!
thanks:)
Can you repost this and add a CC to linux-media?
I will
I'm happy to take this.
Quoted 8 lines
The TODO that is in the decoder code (what to do if the fwht bitstream encodes fewer/more planes than the requested raw frame format) is something that needs to be implemented later as part of making vicodec compliant to the stateful codec specification.
I tried to look in the docs what should be done in that case and didn't find.
The user can sendVIDIOC_ENUM_FMTioctl on CAPTURE to enumerate the supported formats based on the OUTPUT buffers but this is only optional.You are referring to section 4.6.6, point 4 here:
https://hverkuil.home.xs4all.nl/request-api/uapi/v4l/dev-decoder.html
Right?
Right,
Quoted 1 line
Quoted 6 lines
Quoted 3 lines
Quoted 3 lines
It's optional only in the sense that if you already happen to know what the stream contains, then you don't need to do it.
It still not clear to me what should be the behavior in case the user does give the CAPTURE format before the streaming starts but then the actual encoded data that the user send is of different format. Can we trust the user to be consistent ?
This is a very good point. Generally the first step of the "4.6.6. Capture setup" section is to query the format and it's mandatory for the client. So when the driver determines the supported formats (possibly after parsing the bitstream headers), it will reset the CAPTURE format to whatever suitable default and signal a source change event. If the client ignores this and doesn't check the real format, it's buggy and correct operation shouldn't be expected.
Best regards,
Tomasz
Quoted 24 lines
Dafna
Quoted 21 lines
Quoted 4 lines
I'm CC-ing Tomasz Figa, since I think just describing a step as 'Optional' is too vague. Something like: 'If <condition>, then you need to perform this step' (or alternatively: 'If !<condition>, then you can skip this step'.
Just to clarify, the documentation is written from userspace point of view. If something is optional for a userspace application, the application can use it and the driver is expected to support it.
I'm okay replacing "Optional" with something more specific, like "If the client does not need to change the default format", but I wonder if it wouldn't effectively become "if the client does not need to change the default format, or it wants to do it by probing a fixed list of formats it supports by using
S_FMTorTRY_FMT, or what not, ...".Perhaps just explaining the meaning of "Optional" explicitly in the "Conventions and notation used in this document" would be good enough?
Best regards,
Tomasz