PINE64
New pinebook owner, media playback how? (was: larger eMMC, what and how to install?) - Printable Version

+- PINE64 (https://forum.pine64.org)
+-- Forum: Pinebook (https://forum.pine64.org/forumdisplay.php?fid=76)
+--- Forum: Linux on Pinebook (https://forum.pine64.org/forumdisplay.php?fid=79)
+--- Thread: New pinebook owner, media playback how? (was: larger eMMC, what and how to install?) (/showthread.php?tid=4973)

Pages: 1 2


New pinebook owner, media playback how? (was: larger eMMC, what and how to install?) - dahni - 08-19-2017

Hello everybody,
my pinebook finally arrived.
I was surpirsed to see that it booted straight into Ubuntu(?) Mate, but I had ordered the 64GB eMMC, and have installed it already, so I will need to re-install I think.
I am right now in the process of flashing Xenial Mate for eMMC to a microSD card I borrowed from my phone.
I hope I'm understanding this correctly:
- pinebook cannot boot from USB
- i need to create an installer on a microSD to install the OS to the internal eMMC
???
I hope this will succeed.

I have been using Linux for a long time now, but have zero experience with SBCs!
What options do I have to install a GNU/Linux based (not Android) operating system to my pinebook, with maximum configurability the way I'm used to building up my own minimal desktop from a barebones install?
Why are the images divided in sdcard and eMMC images?
Can I install all pine64 operating systems, or does it have to be specifically for the pinebook?

Can't I install a "normal" ARM Linux to the eMMC, just like to a hard drive?
How is the update process? A quick glance at the forums here gives me the impression that it is different from a normal Linux distro's package managament?

PS:
the Ubuntu(?) Mate the pinebook came preinstalled with works well enough, but I noticed straightaway that media playback is abysmal: (s)mplayer complains that "This device is too slow!" - and playback is indeed very choppy (a h264 encoded 720p full length movie), the video is some sort of hardware overlay on top of all other windows.
Is this an older version of the operating system, will the version provided by the pine64 installer (xenial mate 0.6.2-77 for eMMC) bring some improvement?

Thanks for reading this far.

Cheers,

d.


RE: New pinebook owner, larger eMMC, what and how to install? - daid - 08-19-2017

You can install any linux configuration you want on the Pinebook.

First bit of information you will find valuable, is that from a software perspective, eMMC is just an SD card. So effectively, the Pinebook has 2 SD cards, in in eMMC form, and one external.

Next up is how the pinebook starts up. It can startup from the external SD card or the eMMC. This always happens, is not configurable or software changeable. (extreme tech details: http://linux-sunxi.org/BROM )

From the SD card/eMMC u-boot is loaded, this is the first piece of software that is configurable. u-boot configures the system memory and loads the linux kernel. It's pretty much the BIOS+GRUB from what you know.

The linux kernel, I assume you are a bit familiar with this. However, on a normal desktop system, you can have a generic kernel that auto-detects all your hardware. On ARM, things are a bit less simple. The kernel doesn't have to be hardware specific, but hardware auto-detection isn't as well defined as on the desktop. Which is why you need something called the "device tree", which describes the hardware configuration.

In case of the pinebook, both u-boot, the kernel and the device tree are very device specific. You can build your own from source. But I would recommend using the ones from: https://github.com/ayufan-pine64/linux-build/releases/ (0.6.2 is currently considered stable)

The kernel and device tree are "easy" to install, the parts are generally located in /boot/ for the kernel and device tree. The device tree is named ".dtb", kernel usually "uImage-something".

u-boot however, is installed "raw" on the SD card/eMMC. Check /usr/local/sbin/pine64_update_uboot.sh to see how it is installed.


Now, if you are still following. If you want to go and build your system up from scratch, you'll see that it's important to see the information on what is happening during these first parts. Note that this doesn't differ much from and ARM Linux SBC. For this, you will need a serial port or UART as it called officially. The UART of the Pinebook is accessible trough the headphone port, but for that you need to flip a physical switch inside the pinebook. And you will need to make a custom cable to hook up the phone hack to another computer.

For this, you will most likely want an USB-Serial converter. You can buy these online for less then $10, get one for 3.3v, not 5v. The pinebook resources page contains info on how to connect it (sort of). With this cable you can access the u-boot console, and the linux kernel output you would normally see on a normal computer screen unless some boot splash overrules it.


You most likely have information overload already now :-) So just ping back if this is still interesting for you.

(At my day job we have our own setup on a SBC, which is part of my responsibility. So I know how to set this up quite well and how to do it from scratch)


RE: New pinebook owner, larger eMMC, what and how to install? - dahni - 08-20-2017

Thank you for the detailed information.
(08-19-2017, 02:53 PM)daid Wrote: In case of the pinebook, both u-boot, the kernel and the device tree are very device specific. You can build your own from source. But I would recommend using the ones from: https://github.com/ayufan-pine64/linux-build/releases/ (0.6.2 is currently considered stable)
yes, i will stick with these for the time being.
I realize that smooth media playback really is the most important issue for me.
From above, I tried the stable release first (flashed to microsd with pine64-installer, and installed from there), but upgraded to the latest pre-release pretty much straight away.
i noticed some changes (slight improvement). chromium plays back video much better now, but the overall performance impact still seems to be much larger than necessary (choppiness even at 480p, and the user interface crawls to a near-standstill during video playback).
smplayer does not play youtube video at all, local video plays only sound.

i installed mpv (my media player of choice) and it complains & segfaults on local and youtube video:
Code:
Playing: Bron Broen S03E03.mkv
(+) Video --vid=1 (*) (hevc)
(+) Audio --aid=1 (*) (aac)
(+) Subs  --sid=1 --slang=eng (*) (subrip)
MESA-LOADER: failed to retrieve device information
libGL error: unable to load driver: sunxi_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: sunxi
MESA-LOADER: failed to retrieve device information
libGL error: unable to load driver: sunxi_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: sunxi
[vo/opengl] Suspected software renderer or indirect context.
[VDPAU SUNXI] VE version 0x1689 opened
[VDPAU SUNXI] OSD disabled!
[ffmpeg/audio] aac: element type mismatch 1 != 0
AO: [pulse] 48000Hz stereo 2ch float
[ffmpeg/audio] aac: element type mismatch 1 != 0
[ffmpeg/audio] aac: element type mismatch 1 != 0
[ffmpeg/audio] aac: element type mismatch 1 != 0
[ffmpeg/audio] aac: element type mismatch 1 != 0
VO: [vdpau] 1280x720 yuv420p
[vo/vdpau] Error when calling vdp_presentation_queue_target_create_x11: A catch-all error, used when no other error code applies.
Could not initialize video chain.


...although i'm getting fairly good values from glmark2-es2:
Code:
=======================================================
    glmark2 2014.03+git20150611.fa71af2d
=======================================================
    OpenGL Information
    GL_VENDOR:     ARM
    GL_RENDERER:   Mali-400 MP
    GL_VERSION:    OpenGL ES 2.0
=======================================================
[build] use-vbo=false: FPS: 114 FrameTime: 8.772 ms
[build] use-vbo=true: FPS: 121 FrameTime: 8.264 ms
[texture] texture-filter=nearest: FPS: 131 FrameTime: 7.634 ms
[texture] texture-filter=linear: FPS: 127 FrameTime: 7.874 ms
[texture] texture-filter=mipmap: FPS: 134 FrameTime: 7.463 ms
[shading] shading=gouraud: FPS: 96 FrameTime: 10.417 ms
[shading] shading=blinn-phong-inf: FPS: 97 FrameTime: 10.309 ms
[shading] shading=phong: FPS: 84 FrameTime: 11.905 ms
[shading] shading=cel: FPS: 78 FrameTime: 12.821 ms
[bump] bump-render=high-poly: FPS: 58 FrameTime: 17.241 ms
[bump] bump-render=normals: FPS: 138 FrameTime: 7.246 ms
[bump] bump-render=height: FPS: 128 FrameTime: 7.812 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 78 FrameTime: 12.821 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 47 FrameTime: 21.277 ms
[pulsar] light=false:quads=5:texture=false: FPS: 165 FrameTime: 6.061 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 32 FrameTime: 31.250 ms
[desktop] effect=shadow:windows=4: FPS: 79 FrameTime: 12.658 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 23 FrameTime: 43.478 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 35 FrameTime: 28.571 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 26 FrameTime: 38.462 ms
[ideas] speed=duration: FPS: 84 FrameTime: 11.905 ms
[jellyfish] <default>: FPS: 79 FrameTime: 12.658 ms
Error: SceneTerrain requires Vertex Texture Fetch support, but GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS is 0
[terrain] <default>: Unsupported
[shadow] <default>: FPS: 75 FrameTime: 13.333 ms
[refract] <default>: FPS: 16 FrameTime: 62.500 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 151 FrameTime: 6.623 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 99 FrameTime: 10.101 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 143 FrameTime: 6.993 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 114 FrameTime: 8.772 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 84 FrameTime: 11.905 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 106 FrameTime: 9.434 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 106 FrameTime: 9.434 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 92 FrameTime: 10.870 ms
=======================================================
                                  glmark2 Score: 91
=======================================================


i also installed armagetronad, a game that is good for testing opengl abilities. it starts up but uses software rendering i guess (performance is abysmal on normal settings), i see the same error as with mpv:
Code:
MESA-LOADER: failed to retrieve device information
libGL error: unable to load driver: sunxi_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: sunxi

so is this a question of configuring things properly?
or do applications need to be compiled with support for this gpu?

PS:
I tried to reinstall the 0.7.8 pre-release from scratch (instead of updating from 0.6.2), but failed twice:
- dd'ing the .img to microsd, it did not boot at all. just blinking green led, until i remove the card
- pine64-installer doesn't run on pinebook
so how do we create the bootable images manually?


RE: New pinebook owner, larger eMMC, what and how to install? - MarkHaysHarris777 - 08-21-2017

(08-20-2017, 11:45 PM)dahni Wrote: Thank you for the detailed information.


<snip>  so how do we create the bootable images manually?


hi dahni,   video pretty much is-what-it-is on the A64.  It has more to do with the state of mali and drm and less to do with the build !

In other words, you can manually build an image until the proverbial cows come home, but video on the A64 is not going to improve.   The driver does not support GL;  only GLES (a subset).  

A word about pre releases;   in our neck of the woods pre release means "use at your own risk".  Unless you are an actual developer ( pull requests on github ) you should not be using the pre releases.   Use the latest non pre release (stable tested).   "release" is what is recommended,  not pre release.

Building images manually is a steep learning curve which can take years to climb;  I encourage you to work at it, but its not a quick fix, and its not trivial.


RE: New pinebook owner, media playback how? (was: larger eMMC, what and how to install?) - daid - 08-21-2017

I haven't looked into video playback yet. But there is a script in /usr/local/sbin/mplayer-play.sh which configures mplayer, most likely for hardware acceleration.

Youtube isn't without some frame drops on 720p for me on the default setup with chrome. It's okish when I run it in a window, but fullscreen isn't. Maybe directly using mplayer would improve on this area. But videos isn't my primary use.


RE: New pinebook owner, media playback how? (was: larger eMMC, what and how to install?) - MarkHaysHarris777 - 08-21-2017

(08-21-2017, 02:18 AM)daid Wrote: I haven't looked into video playback yet. But there is a script in /usr/local/sbin/mplayer-play.sh which configures mplayer, most likely for hardware acceleration.

Youtube isn't without some frame drops on 720p for me on the default setup with chrome. It's okish when I run it in a window, but fullscreen isn't. Maybe directly using mplayer would improve on this area. But videos isn't my primary use.


There is no hardware acceleration.

... hardware decoding (of sorts) but no hardware acceleration.


RE: New pinebook owner, larger eMMC, what and how to install? - Luke - 08-21-2017

(08-20-2017, 11:45 PM)dahni Wrote: Thank you for the detailed information.
(08-19-2017, 02:53 PM)daid Wrote: In case of the pinebook, both u-boot, the kernel and the device tree are very device specific. You can build your own from source. But I would recommend using the ones from: https://github.com/ayufan-pine64/linux-build/releases/ (0.6.2 is currently considered stable)
yes, i will stick with these for the time being.
I realize that smooth media playback really is the most important issue for me.
From above, I tried the stable release first (flashed to microsd with pine64-installer, and installed from there), but upgraded to the latest pre-release pretty much straight away.
i noticed some changes (slight improvement). chromium plays back video much better now, but the overall performance impact still seems to be much larger than necessary (choppiness even at 480p, and the user interface crawls to a near-standstill during video playback).
smplayer does not play youtube video at all, local video plays only sound.

i installed mpv (my media player of choice) and it complains & segfaults on local and youtube video:
Code:
Playing: Bron Broen S03E03.mkv
(+) Video --vid=1 (*) (hevc)
(+) Audio --aid=1 (*) (aac)
(+) Subs  --sid=1 --slang=eng (*) (subrip)
MESA-LOADER: failed to retrieve device information
libGL error: unable to load driver: sunxi_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: sunxi
MESA-LOADER: failed to retrieve device information
libGL error: unable to load driver: sunxi_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: sunxi
[vo/opengl] Suspected software renderer or indirect context.
[VDPAU SUNXI] VE version 0x1689 opened
[VDPAU SUNXI] OSD disabled!
[ffmpeg/audio] aac: element type mismatch 1 != 0
AO: [pulse] 48000Hz stereo 2ch float
[ffmpeg/audio] aac: element type mismatch 1 != 0
[ffmpeg/audio] aac: element type mismatch 1 != 0
[ffmpeg/audio] aac: element type mismatch 1 != 0
[ffmpeg/audio] aac: element type mismatch 1 != 0
VO: [vdpau] 1280x720 yuv420p
[vo/vdpau] Error when calling vdp_presentation_queue_target_create_x11: A catch-all error, used when no other error code applies.
Could not initialize video chain.


...although i'm getting fairly good values from glmark2-es2:
Code:
=======================================================
   glmark2 2014.03+git20150611.fa71af2d
=======================================================
   OpenGL Information
   GL_VENDOR:     ARM
   GL_RENDERER:   Mali-400 MP
   GL_VERSION:    OpenGL ES 2.0
=======================================================
[build] use-vbo=false: FPS: 114 FrameTime: 8.772 ms
[build] use-vbo=true: FPS: 121 FrameTime: 8.264 ms
[texture] texture-filter=nearest: FPS: 131 FrameTime: 7.634 ms
[texture] texture-filter=linear: FPS: 127 FrameTime: 7.874 ms
[texture] texture-filter=mipmap: FPS: 134 FrameTime: 7.463 ms
[shading] shading=gouraud: FPS: 96 FrameTime: 10.417 ms
[shading] shading=blinn-phong-inf: FPS: 97 FrameTime: 10.309 ms
[shading] shading=phong: FPS: 84 FrameTime: 11.905 ms
[shading] shading=cel: FPS: 78 FrameTime: 12.821 ms
[bump] bump-render=high-poly: FPS: 58 FrameTime: 17.241 ms
[bump] bump-render=normals: FPS: 138 FrameTime: 7.246 ms
[bump] bump-render=height: FPS: 128 FrameTime: 7.812 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 78 FrameTime: 12.821 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 47 FrameTime: 21.277 ms
[pulsar] light=false:quads=5:texture=false: FPS: 165 FrameTime: 6.061 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 32 FrameTime: 31.250 ms
[desktop] effect=shadow:windows=4: FPS: 79 FrameTime: 12.658 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 23 FrameTime: 43.478 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 35 FrameTime: 28.571 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 26 FrameTime: 38.462 ms
[ideas] speed=duration: FPS: 84 FrameTime: 11.905 ms
[jellyfish] <default>: FPS: 79 FrameTime: 12.658 ms
Error: SceneTerrain requires Vertex Texture Fetch support, but GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS is 0
[terrain] <default>: Unsupported
[shadow] <default>: FPS: 75 FrameTime: 13.333 ms
[refract] <default>: FPS: 16 FrameTime: 62.500 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 151 FrameTime: 6.623 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 99 FrameTime: 10.101 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 143 FrameTime: 6.993 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 114 FrameTime: 8.772 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 84 FrameTime: 11.905 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 106 FrameTime: 9.434 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 106 FrameTime: 9.434 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 92 FrameTime: 10.870 ms
=======================================================
                                 glmark2 Score: 91
=======================================================


i also installed armagetronad, a game that is good for testing opengl abilities. it starts up but uses software rendering i guess (performance is abysmal on normal settings), i see the same error as with mpv:
Code:
MESA-LOADER: failed to retrieve device information
libGL error: unable to load driver: sunxi_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: sunxi

so is this a question of configuring things properly?
or do applications need to be compiled with support for this gpu?

PS:
I tried to reinstall the 0.7.8 pre-release from scratch (instead of updating from 0.6.2), but failed twice:
- dd'ing the .img to microsd, it did not boot at all. just blinking green led, until i remove the card
- pine64-installer doesn't run on pinebook
so how do we create the bootable images manually?

I would stick to 0.6.2 for now. You can get pretty smooth playback in SMplayer - see my SMplayer tweaks thread.


RE: New pinebook owner, media playback how? (was: larger eMMC, what and how to install?) - dahni - 08-22-2017

Thanks everybody!

I have now tried flashing the 0.7.8 release with the pine64-installer (on an x86 machine), and it does not boot either.

so right now I am running ubuntu mate, the 0.6.2 release upgraded to 0.7.8 with the scripts supplied (and I also ran a full "apt-get upgrade" after adding the ppas and running the scripts).

(08-21-2017, 02:57 AM)Luke Wrote: I would stick to 0.6.2 for now. You can get pretty smooth playback in SMplayer - see my SMplayer tweaks thread.
that is the first thing I did.
how smooth exactly?
I have been trying with a few web downloads, h264 in 720 or 1080p resolution, encapsulated in mkv. it was more than choppy with the framebuffer driver, no OSD, no fullscreen; and does not work at all after the upgrade.

(08-21-2017, 02:18 AM)daid Wrote: I haven't looked into video playback yet. But there is a script in /usr/local/sbin/mplayer-play.sh which configures mplayer, most likely for hardware acceleration.
maybe this doesn't work anymore on the upgraded version, it gives an error that /dev/disp is not writeable...

Quote:Youtube isn't without some frame drops on 720p for me on the default setup with chrome. It's okish when I run it in a window, but fullscreen isn't. Maybe directly using mplayer would improve on this area. But videos isn't my primary use.
which release are you getting OKish results on?
and my experience is that chromium plays youtube better than smplayer.

am i asking the impossible here?


RE: New pinebook owner, media playback how? (was: larger eMMC, what and how to install?) - Luke - 08-22-2017

(08-22-2017, 01:04 AM)dahni Wrote: Thanks everybody!

I have now tried flashing the 0.7.8 release with the pine64-installer (on an x86 machine), and it does not boot either.

so right now I am running ubuntu mate, the 0.6.2 release upgraded to 0.7.8 with the scripts supplied (and I also ran a full "apt-get upgrade" after adding the ppas and running the scripts).

(08-21-2017, 02:57 AM)Luke Wrote: I would stick to 0.6.2 for now. You can get pretty smooth playback in SMplayer - see my SMplayer tweaks thread.
that is the first thing I did.
how smooth exactly?
I have been trying with a few web downloads, h264 in 720 or 1080p resolution, encapsulated in mkv. it was more than choppy with the framebuffer driver, no OSD, no fullscreen; and does not work at all after the upgrade.

(08-21-2017, 02:18 AM)daid Wrote: I haven't looked into video playback yet. But there is a script in /usr/local/sbin/mplayer-play.sh which configures mplayer, most likely for hardware acceleration.
maybe this doesn't work anymore on the upgraded version, it gives an error that /dev/disp is not writeable...

Quote:Youtube isn't without some frame drops on 720p for me on the default setup with chrome. It's okish when I run it in a window, but fullscreen isn't. Maybe directly using mplayer would improve on this area. But videos isn't my primary use.
which release are you getting OKish results on?
and my experience is that chromium plays youtube better than smplayer.

am i asking the impossible here?

Again, you should stick to 0.6.2 if you want to playback media. I get perfectly smooth on most 720p and 1080p movie formats streamed locally.  
Youtube is another thing. With the new firefox I get pretty good 480p playback in browser ... but if you want HD then you can get smooth playback like so

So your expectations can be met - but you need to do it the optimal way Wink

As for the 0.7.8 image, you will experience problems ... hence, its labelled pre-release.


RE: New pinebook owner, media playback how? (was: larger eMMC, what and how to install?) - dahni - 08-23-2017

ok, i have seen the error in my ways.
i think the ubuntu mate version my pinebook came with is a little older than 0.6.2 ayufan release, and maybe the driver had more glitches then.
also, video playback was bad with VLC specifically.
It also seems i skipped the stable 0.6.2 and upgraded straight a way to 0.7.8, which really didn't help.

i have meanwhile installed Q4OS which is really much better configured & lighter on resources than ubuntu mate.
video playback is near-perfect with mplayer2 (most hi-res video i tried: x264 at 3000kb/s at 1920x800px - hevc/x265 does NOT work however) and definitely better with VLC.
after that i tried again with ayufan's ubuntu mate 0.6.2 release, and i can confirm 100% that VLC stutters more under ubuntu mate, compared to Q4OS.
now to get a recent version of mpv onto it...

whatever, it's a weight off my chest - this machine is usable after all. not saying video playback is all, but q4os also generally convinced me of the pinebook's capabilities.
also the touchpad works much better! no crazy jumping and the sensitivity is just right.
this is a well-made distro.
only the keyboard spacebar problem remains, and battery life is not exactly fantastic.

btw, the Open with... addon might be interesting to many here (open youtube, soundcloud and other links with mpv & youtube-dl etc).

and pine64-installer aka etcher is electron bloatware and not needed to flash sd cards!
generic instructs are the same as always.

thanks to you all.
it is good that i was neither ignored nor belittled.