Set partial pixel to be transparent in video
Nicolas Dufresne
nicolas.dufresne at gmail.com
Mon Sep 26 13:30:40 UTC 2016
Another note, x264enc does not support any format with an alpha
channel. If "myelement" is expecting RGBA, then your pipeline should
fail with "no-negotiated". You should review your caps negotiation.
Nicolas
Le lundi 26 septembre 2016 à 11:12 +0200, Peter Maersk-Moller a écrit :
> Smaller correction
>
> > if (format != RGBA && format != BGRA && format != ARGB && format !=
ABGRA) goto fail;
> > uint8_t *p = frame_address_start + ((start_row*width)+start_col)*4 +
(format == RGBA || format == BGRA) ? 3 : 0;
> stride = (start_col + width - end_col) << 2;
> for (j=start_row; j <= end_row; j++) {
> for (i=start_col; i <= end_col; i++) { *p = 0; p += 4; }
> p += stride;
> }
>
> > On Mon, Sep 26, 2016 at 11:10 AM, Peter Maersk-Moller <pmaersk at gmail.
com> wrote:
> > Hi Sean.
> > > > GStreamer uses RGBA in byteorder and not in word-order. See https:/
/en.wikipedia.org/wiki/RGBA_color_space for byte-order/word-order.
> >
> > > > Your code is clearing the red component for the first half of the
entire frame.
> >
> > > > > > BTW you code should be more efficient. Find the beginning of the
first pixel address, add 3 for RGBA and BGRA (0 for ARGB/ABGR) and
then
> >
> > Something like below
> >
> > > > ifr (format != RGBA && format != BGRA && format != ARGB && format
!= ABGRA) goto fail;
> > > > uint8_t *p = frame_address_start ((start_row*width)+start_col)*4 +
(format == RGBA || format == BGRA) ? 3 : 0;
> > stride = (start_col + width - end_col) << 2;
> > for (j=start_row; j <= end_row; j++) {
> > for (i=start_col; i <= end_col; i++) { *p = 0; p += 4; }
> > p += stride;
> > }
> >
> > > > Only one byte setting and one 32 bit addition per pixel affected
plus one 32 bit addition per line affected.
> >
> > > > On Mon, Sep 26, 2016 at 7:52 AM, Sean <csosmo at hotmail.com> wrote:
> > > Hi,
> > >
> > >
> > > > > > I wrote to customized element (myelement) to set partial pixels
of one video
> > >
> > > frame to be transparent. My machine is little endian.
> > >
> > >
> > >
> > >
> > >
> > > > > > This is myelement implementation, I want to make the upper half
of 640x480
> > >
> > > > > > (i.e. the upper 640x240 pixels ) invisible by setting the Alpha
value to be
> > >
> > > 0x0
> > >
> > >
> > >
> > > GstMapInfo info;
> > >
> > > if (!gst_buffer_map(buffer, &info, GST_MAP_READ)) {
> > >
> > > return GST_FLOW_ERROR;
> > >
> > > }
> > >
> > > for (int i = 0; i < 240; i++) {
> > >
> > > for (int j = 0; j < 640; j++)
> > >
> > > info.data[(i*640+j)*4] = 0x0;
> > >
> > > }
> > >
> > > GST_FLOW_OK;
> > >
> > >
> > >
> > >
> > >
> > > This is my test command:
> > >
> > > > > > gst_launch -v videotestsrc ! video/x-raw,format=RGBA,width=640,
height=480 !
> > >
> > > > > > videoconvert ! myelement ! x264enc ! mpegtsmux ! filesink
location=test.ts
> > >
> > >
> > >
> > > > > > I expect the upper half of the test.ts should be transparent.
However, the
> > >
> > > > > > result is (row,col)=(0,4), (0,8) (0,12)...... become a GREEN
pixel. Would
> > >
> > > anyone help to comment which part is wrong?
> > >
> > >
> > >
> > > Thanks a lot.
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > --
> > >
> > > > > > > > > View this message in context: http://gstreamer-devel.966125.n4.na
bble.com/Set-partial-pixel-to-be-transparent-in-video-
tp4679769.html
> > >
> > > Sent from the GStreamer-devel mailing list archive at Nabble.com.
> > >
> > > _______________________________________________
> > >
> > > gstreamer-devel mailing list
> > >
> > > gstreamer-devel at lists.freedesktop.org
> > >
> > > https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
> > >
> > >
> >
> >
> >
> >
> >
> >
> >
>
>
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20160926/25870614/attachment-0001.html>
More information about the gstreamer-devel
mailing list