View previous topic :: View next topic |
Author |
Message |
fresherthanever n00b
Joined: 11 Nov 2013 Posts: 40 Location: Houston
|
Posted: Fri Mar 13, 2015 3:17 am Post subject: ffmpeg migration breaks mpv |
|
|
I am attempting to migrate from libav to ffmpeg. However, vdpau support is not working for mpv (video will play fine without vdpau). Sometimes, vdpau will start, but immediately crash, causing my graphics card to go down. Whilst playing, mpv warns me about video/audio desync, while there is a completely black screen. vdpau works fine in libav (simply to say that I have libvdpau and the appropriate driver installed). I am using an R600 AMD 6870.
I have pruned libpostproc as well as libav only.
My make.conf:
Code: | CFLAGS="-O2 -pipe -march=native"
CXXFLAGS="${CFLAGS}"
# WARNING: Changing your CHOST is not something that should be done lightly.
# Please consult http://www.gentoo.org/doc/en/change-chost.xml before changing.
CHOST="x86_64-pc-linux-gnu"
# These are the USE flags that were used in addition to what is provided by the
# profile used for building.
USE="bindist mmx sse sse2 usb wifi dvd dvdr ipv6 threads smp sse3 ssse3 sse4_1 avx crypt alsa X acl dbus udisks libcmath cxx sasl graphite openmp -systemd -gnome -kde xft bindist png jpeg gif vdpau opencl ffmpeg"
MAKEOPTS="-j8"
PORTDIR="/usr/portage"
DISTDIR="${PORTDIR}/distfiles"
PKGDIR="${PORTDIR}/packages"
INPUT_DEVICES="evdev"
VIDEO_CARDS="radeon"
source /var/lib/layman/make.conf |
When playing H264 mp4s, at first, the video will play fine, but after about a few seconds, it will stop and start giving me graphical defects. Are there some conflicts with ffmpeg with other packages that I am not aware of? For now, I am going back to libav . _________________ Specs: AMD FX-6100|ASUS M5A97 AM3+|XFX AMD Radeon HD 6870|1TB 7200RPM/500GB 7200RPM|8GB DDR3 1600MHz |
|
Back to top |
|
|
Ant P. Watchman
Joined: 18 Apr 2009 Posts: 6920
|
Posted: Fri Mar 13, 2015 3:50 pm Post subject: |
|
|
I have a HD6450 and it works fine most of the time. Sometimes I get better results disabling cpufreq, try that. |
|
Back to top |
|
|
fresherthanever n00b
Joined: 11 Nov 2013 Posts: 40 Location: Houston
|
Posted: Fri Mar 13, 2015 6:38 pm Post subject: |
|
|
Ant P. wrote: | I have a HD6450 and it works fine most of the time. Sometimes I get better results disabling cpufreq, try that. |
:/ it seems that I've broken something while I compiled the libraries; libav doesn't work anymore either.
Is there an in-depth guide of what I need to build when going from libav to ffmpeg? _________________ Specs: AMD FX-6100|ASUS M5A97 AM3+|XFX AMD Radeon HD 6870|1TB 7200RPM/500GB 7200RPM|8GB DDR3 1600MHz |
|
Back to top |
|
|
Ant P. Watchman
Joined: 18 Apr 2009 Posts: 6920
|
Posted: Sat Mar 14, 2015 1:44 am Post subject: |
|
|
It usually just works: mask libav, USE=-libav, emerge -N @world, maybe revdep-rebuild afterwards. Seems odd if things are breaking like that. |
|
Back to top |
|
|
fresherthanever n00b
Joined: 11 Nov 2013 Posts: 40 Location: Houston
|
Posted: Tue Mar 17, 2015 8:50 pm Post subject: |
|
|
Ant P. wrote: | It usually just works: mask libav, USE=-libav, emerge -N @world, maybe revdep-rebuild afterwards. Seems odd if things are breaking like that. |
Thanks, I was able to stop it from crashing and giving me graphical artifacts and locking up my computer, however, the playback with hwdec='vdpau' is extremely slow and unwatchable.
Code: | $ mpv --vo=opengl *.mp4
Playing: 300.2006.BluRay.1080p.x264.YIFY.mp4
(+) Video --vid=1 (*) (h264)
(+) Audio --aid=1 --alang=und (*) (aac)
(+) Subs --sid=1 '300.2006.BluRay.1080p.x264.YIFY.srt' (subrip) (external)
[vo/opengl/x11] X11 error: GLXBadFBConfig
[vo/opengl] Could not create GL3 context. Retrying with legacy context.
Trying to use hardware decoding.
[sub] Using subtitle charset: UTF-8-BROKEN
AO: [alsa] 48000Hz stereo 2ch float
VO: [opengl] 1920x800 vdpau
AV: 00:00:02 / 01:56:38 (0%) A-V: 0.499 Dropped: 40
*************************************************
**** Audio/Video desynchronisation detected! ****
*************************************************
This means either the audio or the video is played too slowly.
Possible reasons, problems, workarounds:
- Your system is simply too slow for this file.
Transcode it to a lower bitrate file with e.g. mpv encoding support.
- Slow video output.
Try a different --vo driver (--vo=help for a list). Make sure framedrop
is not disabled, or experiment with different values for --framedrop.
- Playing from a slow network source.
Download the file instead.
- Try to find out whether audio/video/subs are causing this by experimenting
with --no-video, --no-audio, or --no-sub.
- If you switched audio or video tracks, try seeking to force synchronization.
If none of this helps you, file a bug report.
AV: 00:00:08 / 01:56:38 (0%) A-V: 2.522 Dropped: 120
|
I read up about glxbadfbconfig, and it seems possible that this may be linked to kernel issue? I am using 3.18.9 as of right now. CPU playback works fine. _________________ Specs: AMD FX-6100|ASUS M5A97 AM3+|XFX AMD Radeon HD 6870|1TB 7200RPM/500GB 7200RPM|8GB DDR3 1600MHz |
|
Back to top |
|
|
Ant P. Watchman
Joined: 18 Apr 2009 Posts: 6920
|
Posted: Tue Mar 17, 2015 9:17 pm Post subject: |
|
|
You shouldn't be getting those GL3 failure errors for that card, something else is wrong here. What does glxinfo say? |
|
Back to top |
|
|
fresherthanever n00b
Joined: 11 Nov 2013 Posts: 40 Location: Houston
|
Posted: Wed Mar 18, 2015 10:03 pm Post subject: |
|
|
Ant P. wrote: | You shouldn't be getting those GL3 failure errors for that card, something else is wrong here. What does glxinfo say? |
Code: | name of display: :0
display: :0 screen: 0
direct rendering: Yes
server glx vendor string: SGI
server glx version string: 1.4
server glx extensions:
GLX_ARB_create_context, GLX_ARB_create_context_profile,
GLX_ARB_fbconfig_float, GLX_ARB_framebuffer_sRGB, GLX_ARB_multisample,
GLX_EXT_create_context_es2_profile, GLX_EXT_framebuffer_sRGB,
GLX_EXT_import_context, GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info,
GLX_EXT_visual_rating, GLX_INTEL_swap_event, GLX_MESA_copy_sub_buffer,
GLX_OML_swap_method, GLX_SGIS_multisample, GLX_SGIX_fbconfig,
GLX_SGIX_pbuffer, GLX_SGIX_visual_select_group, GLX_SGI_swap_control
client glx vendor string: Mesa Project and SGI
client glx version string: 1.4
client glx extensions:
GLX_ARB_create_context, GLX_ARB_create_context_profile,
GLX_ARB_create_context_robustness, GLX_ARB_fbconfig_float,
GLX_ARB_framebuffer_sRGB, GLX_ARB_get_proc_address, GLX_ARB_multisample,
GLX_EXT_buffer_age, GLX_EXT_create_context_es2_profile,
GLX_EXT_fbconfig_packed_float, GLX_EXT_framebuffer_sRGB,
GLX_EXT_import_context, GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info,
GLX_EXT_visual_rating, GLX_INTEL_swap_event, GLX_MESA_copy_sub_buffer,
GLX_MESA_multithread_makecurrent, GLX_MESA_query_renderer,
GLX_MESA_swap_control, GLX_OML_swap_method, GLX_OML_sync_control,
GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer,
GLX_SGIX_visual_select_group, GLX_SGI_make_current_read,
GLX_SGI_swap_control, GLX_SGI_video_sync
GLX version: 1.4
GLX extensions:
GLX_ARB_create_context, GLX_ARB_create_context_profile,
GLX_ARB_fbconfig_float, GLX_ARB_framebuffer_sRGB,
GLX_ARB_get_proc_address, GLX_ARB_multisample,
GLX_EXT_create_context_es2_profile, GLX_EXT_framebuffer_sRGB,
GLX_EXT_import_context, GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info,
GLX_EXT_visual_rating, GLX_INTEL_swap_event, GLX_MESA_copy_sub_buffer,
GLX_MESA_multithread_makecurrent, GLX_MESA_query_renderer,
GLX_MESA_swap_control, GLX_OML_swap_method, GLX_OML_sync_control,
GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer,
GLX_SGIX_visual_select_group, GLX_SGI_make_current_read,
GLX_SGI_swap_control, GLX_SGI_video_sync
OpenGL vendor string: X.Org
OpenGL renderer string: Gallium 0.4 on AMD BARTS
OpenGL version string: 2.1 Mesa 10.4.4
OpenGL shading language version string: 1.30
OpenGL extensions:
GL_AMD_conservative_depth, GL_AMD_draw_buffers_blend,
GL_AMD_seamless_cubemap_per_texture, GL_AMD_shader_stencil_export,
GL_AMD_shader_trinary_minmax, GL_ANGLE_texture_compression_dxt3,
GL_ANGLE_texture_compression_dxt5, GL_APPLE_packed_pixels,
GL_APPLE_vertex_array_object, GL_ARB_ES2_compatibility,
GL_ARB_ES3_compatibility, GL_ARB_base_instance,
GL_ARB_blend_func_extended, GL_ARB_buffer_storage,
GL_ARB_clear_buffer_object, GL_ARB_clip_control,
GL_ARB_color_buffer_float, GL_ARB_compressed_texture_pixel_storage,
GL_ARB_conservative_depth, GL_ARB_copy_buffer, GL_ARB_debug_output,
GL_ARB_depth_buffer_float, GL_ARB_depth_clamp, GL_ARB_depth_texture,
GL_ARB_derivative_control, GL_ARB_draw_buffers, GL_ARB_draw_buffers_blend,
GL_ARB_draw_elements_base_vertex, GL_ARB_draw_instanced,
GL_ARB_explicit_attrib_location, GL_ARB_explicit_uniform_location,
GL_ARB_fragment_coord_conventions, GL_ARB_fragment_program,
GL_ARB_fragment_program_shadow, GL_ARB_fragment_shader,
GL_ARB_framebuffer_object, GL_ARB_framebuffer_sRGB,
GL_ARB_get_program_binary, GL_ARB_half_float_pixel,
GL_ARB_half_float_vertex, GL_ARB_instanced_arrays,
GL_ARB_internalformat_query, GL_ARB_invalidate_subdata,
GL_ARB_map_buffer_alignment, GL_ARB_map_buffer_range, GL_ARB_multi_bind,
GL_ARB_multisample, GL_ARB_multitexture, GL_ARB_occlusion_query,
GL_ARB_occlusion_query2, GL_ARB_pixel_buffer_object,
GL_ARB_point_parameters, GL_ARB_point_sprite, GL_ARB_provoking_vertex,
GL_ARB_robustness, GL_ARB_sample_shading, GL_ARB_sampler_objects,
GL_ARB_seamless_cube_map, GL_ARB_seamless_cubemap_per_texture,
GL_ARB_separate_shader_objects, GL_ARB_shader_bit_encoding,
GL_ARB_shader_objects, GL_ARB_shader_stencil_export,
GL_ARB_shader_texture_lod, GL_ARB_shading_language_100,
GL_ARB_shading_language_420pack, GL_ARB_shading_language_packing,
GL_ARB_shadow, GL_ARB_stencil_texturing, GL_ARB_sync,
GL_ARB_texture_barrier, GL_ARB_texture_border_clamp,
GL_ARB_texture_compression, GL_ARB_texture_compression_bptc,
GL_ARB_texture_compression_rgtc, GL_ARB_texture_cube_map,
GL_ARB_texture_cube_map_array, GL_ARB_texture_env_add,
GL_ARB_texture_env_combine, GL_ARB_texture_env_crossbar,
GL_ARB_texture_env_dot3, GL_ARB_texture_gather,
GL_ARB_texture_mirror_clamp_to_edge, GL_ARB_texture_mirrored_repeat,
GL_ARB_texture_multisample, GL_ARB_texture_non_power_of_two,
GL_ARB_texture_query_levels, GL_ARB_texture_query_lod,
GL_ARB_texture_rectangle, GL_ARB_texture_rg, GL_ARB_texture_rgb10_a2ui,
GL_ARB_texture_storage, GL_ARB_texture_storage_multisample,
GL_ARB_texture_swizzle, GL_ARB_timer_query, GL_ARB_transform_feedback2,
GL_ARB_transform_feedback3, GL_ARB_transform_feedback_instanced,
GL_ARB_transpose_matrix, GL_ARB_uniform_buffer_object,
GL_ARB_vertex_array_bgra, GL_ARB_vertex_array_object,
GL_ARB_vertex_attrib_binding, GL_ARB_vertex_buffer_object,
GL_ARB_vertex_program, GL_ARB_vertex_shader,
GL_ARB_vertex_type_10f_11f_11f_rev, GL_ARB_vertex_type_2_10_10_10_rev,
GL_ARB_window_pos, GL_ATI_blend_equation_separate, GL_ATI_draw_buffers,
GL_ATI_separate_stencil, GL_ATI_texture_compression_3dc,
GL_ATI_texture_env_combine3, GL_ATI_texture_mirror_once, GL_EXT_abgr,
GL_EXT_bgra, GL_EXT_blend_color, GL_EXT_blend_equation_separate,
GL_EXT_blend_func_separate, GL_EXT_blend_minmax, GL_EXT_blend_subtract,
GL_EXT_compiled_vertex_array, GL_EXT_copy_texture, GL_EXT_draw_buffers2,
GL_EXT_draw_instanced, GL_EXT_draw_range_elements, GL_EXT_fog_coord,
GL_EXT_framebuffer_blit, GL_EXT_framebuffer_multisample,
GL_EXT_framebuffer_multisample_blit_scaled, GL_EXT_framebuffer_object,
GL_EXT_framebuffer_sRGB, GL_EXT_gpu_program_parameters,
GL_EXT_multi_draw_arrays, GL_EXT_packed_depth_stencil,
GL_EXT_packed_float, GL_EXT_packed_pixels, GL_EXT_pixel_buffer_object,
GL_EXT_point_parameters, GL_EXT_polygon_offset, GL_EXT_provoking_vertex,
GL_EXT_rescale_normal, GL_EXT_secondary_color,
GL_EXT_separate_specular_color, GL_EXT_shader_integer_mix,
GL_EXT_shadow_funcs, GL_EXT_stencil_two_side, GL_EXT_stencil_wrap,
GL_EXT_subtexture, GL_EXT_texture, GL_EXT_texture3D,
GL_EXT_texture_array, GL_EXT_texture_compression_dxt1,
GL_EXT_texture_compression_latc, GL_EXT_texture_compression_rgtc,
GL_EXT_texture_compression_s3tc, GL_EXT_texture_cube_map,
GL_EXT_texture_edge_clamp, GL_EXT_texture_env_add,
GL_EXT_texture_env_combine, GL_EXT_texture_env_dot3,
GL_EXT_texture_filter_anisotropic, GL_EXT_texture_integer,
GL_EXT_texture_lod_bias, GL_EXT_texture_mirror_clamp,
GL_EXT_texture_object, GL_EXT_texture_rectangle, GL_EXT_texture_sRGB,
GL_EXT_texture_sRGB_decode, GL_EXT_texture_shared_exponent,
GL_EXT_texture_snorm, GL_EXT_texture_swizzle, GL_EXT_timer_query,
GL_EXT_transform_feedback, GL_EXT_vertex_array, GL_EXT_vertex_array_bgra,
GL_IBM_multimode_draw_arrays, GL_IBM_rasterpos_clip,
GL_IBM_texture_mirrored_repeat, GL_INGR_blend_func_separate,
GL_KHR_context_flush_control, GL_KHR_debug, GL_MESA_pack_invert,
GL_MESA_texture_signed_rgba, GL_MESA_window_pos, GL_NV_blend_square,
GL_NV_conditional_render, GL_NV_depth_clamp, GL_NV_fog_distance,
GL_NV_light_max_exponent, GL_NV_packed_depth_stencil,
GL_NV_primitive_restart, GL_NV_texgen_reflection, GL_NV_texture_barrier,
GL_NV_texture_env_combine4, GL_NV_texture_rectangle, GL_NV_vdpau_interop,
GL_OES_EGL_image, GL_OES_read_format, GL_S3_s3tc,
GL_SGIS_generate_mipmap, GL_SGIS_texture_border_clamp,
GL_SGIS_texture_edge_clamp, GL_SGIS_texture_lod, GL_SUN_multi_draw_arrays
|
opengl-old doesn't work either :/ _________________ Specs: AMD FX-6100|ASUS M5A97 AM3+|XFX AMD Radeon HD 6870|1TB 7200RPM/500GB 7200RPM|8GB DDR3 1600MHz |
|
Back to top |
|
|
Ant P. Watchman
Joined: 18 Apr 2009 Posts: 6920
|
Posted: Wed Mar 18, 2015 11:15 pm Post subject: |
|
|
Okay that's bad, it's saying OpenGL 2.1 is the max supported version which is normal for the software renderer. You should be seeing 3.3 there.
Post your stuff for "emerge -pv mesa; eselect opengl list; eselect mesa list" |
|
Back to top |
|
|
fresherthanever n00b
Joined: 11 Nov 2013 Posts: 40 Location: Houston
|
Posted: Thu Mar 19, 2015 11:41 pm Post subject: |
|
|
Ant P. wrote: | Okay that's bad, it's saying OpenGL 2.1 is the max supported version which is normal for the software renderer. You should be seeing 3.3 there.
Post your stuff for "emerge -pv mesa; eselect opengl list; eselect mesa list" |
Code: | 64bit i915 (Intel 915, 945)
64bit i965 (Intel GMA 965, G/Q3x, G/Q4x, HD)
64bit r300 (Radeon R300-R500)
[1] gallium *
64bit r600 (Radeon R600-R700, Evergreen, Northern Islands)
[1] gallium *
64bit sw (Software renderer)
[1] classic
[2] gallium *
32bit i915 (Intel 915, 945)
[1] classic
[2] gallium *
32bit i965 (Intel GMA 965, G/Q3x, G/Q4x, HD)
[1] classic *
32bit r300 (Radeon R300-R500)
[1] gallium *
32bit r600 (Radeon R600-R700, Evergreen, Northern Islands)
[1] gallium *
32bit sw (Software renderer)
[1] classic
[2] gallium * |
eselect opengl list
Code: | Available OpenGL implementations:
[1] xorg-x11 *
|
emerge -pv mesa
Code: | [ebuild R ~] media-libs/mesa-10.4.4 USE="bindist classic dri3 egl gallium gbm llvm nptl opencl r600-llvm-compiler udev vdpau -d3d9 -debug -gles1 -gles2 -openmax -osmesa -pax_kernel -pic (-selinux) -vaapi -wayland -xa -xvmc" ABI_X86="(64) -32 (-x32)" VIDEO_CARDS="radeon (-freedreno) -i915 -i965 -ilo -intel -nouveau -r100 -r200 -r300 -r600 -radeonsi -vmware" 0 KiB |
odd, 10.4.4 supports GL3.3? _________________ Specs: AMD FX-6100|ASUS M5A97 AM3+|XFX AMD Radeon HD 6870|1TB 7200RPM/500GB 7200RPM|8GB DDR3 1600MHz |
|
Back to top |
|
|
Ant P. Watchman
Joined: 18 Apr 2009 Posts: 6920
|
Posted: Fri Mar 20, 2015 1:40 am Post subject: |
|
|
Is there a reason you have USE=classic there?
Or USE=bindist? You're disabling pretty much all of mesa that way. |
|
Back to top |
|
|
fresherthanever n00b
Joined: 11 Nov 2013 Posts: 40 Location: Houston
|
Posted: Fri Mar 20, 2015 3:45 am Post subject: |
|
|
Ant P. wrote: | Is there a reason you have USE=classic there?
Or USE=bindist? You're disabling pretty much all of mesa that way. |
I unset bindist, glxinfo shows Code: | OpenGL core profile version string: 3.3 (Core Profile) Mesa 10.4.4 | now, thanks
Playing videos through vdpau no longer gets me GLXBadFBConfig, but it's still incredible slow, dropping maybe 30 frames a second. Interestingly, while I have pretty decent hardware, running somewhat lower resolution videos will work, but most 720p+ videos either give me graphical artifacts, are too slow to play, or will not play at all.. _________________ Specs: AMD FX-6100|ASUS M5A97 AM3+|XFX AMD Radeon HD 6870|1TB 7200RPM/500GB 7200RPM|8GB DDR3 1600MHz |
|
Back to top |
|
|
Ant P. Watchman
Joined: 18 Apr 2009 Posts: 6920
|
Posted: Fri Mar 20, 2015 6:45 am Post subject: |
|
|
I'm out of ideas. I'd suggest it might be something to do with the radeon power management, but that shouldn't prevent something playing at all... |
|
Back to top |
|
|
fresherthanever n00b
Joined: 11 Nov 2013 Posts: 40 Location: Houston
|
Posted: Fri Mar 20, 2015 9:31 pm Post subject: |
|
|
Ant P. wrote: | I'm out of ideas. I'd suggest it might be something to do with the radeon power management, but that shouldn't prevent something playing at all... |
I loaded up the kernel image for linux-3.16.7 and vdpau seems to work fine, mpv typically clocks in at .6% CPU usage, there is flawless playback. These are some of the radeon changes:
Quote: | radeon: Add RADEON_GEM_CPU_ACCESS BO creation flag commit
radeon: add RADEON_GEM_NO_CPU_ACCESS BO creation flag (v4) commit
radeon: add UVD support for older asics v4 commit |
In addition, this curious feature to radeon:
Quote: | 1.2. Radeon: mapping of user pages into video memory
Linux 3.16 added the ability to map users addresses into the video memory for Intel hardware. In this release, AMD Radeon has also gained support for this feature. Normal application data can be used as a texture source or even as a render target (depending upon the capabilities of the chipset). This has a number of uses, with zero-copy downloads to the GPU and efficient readback making the intermixed streaming of CPU and GPU operations fairly efficient. This ability has many widespread implications from faster rendering of client-side software rasterisers (chromium), mitigation of stalls due to read back (Mozilla Firefox) and to faster pipelining of texture data (such as pixel buffer objects in OpenGL or data blobs in OpenCL). |
This maybe could explain some of the graphical artifacts I was getting (the X server was dumped with strange squares). Could file a bug? _________________ Specs: AMD FX-6100|ASUS M5A97 AM3+|XFX AMD Radeon HD 6870|1TB 7200RPM/500GB 7200RPM|8GB DDR3 1600MHz |
|
Back to top |
|
|
Ant P. Watchman
Joined: 18 Apr 2009 Posts: 6920
|
Posted: Fri Mar 20, 2015 10:08 pm Post subject: |
|
|
One more thing before you do that - does your Xorg.log mention glamor accel being enabled at all? Having that active caused all kinds of problems for me, but I don't think you get a choice of AccelMethod on the newer cards... |
|
Back to top |
|
|
fresherthanever n00b
Joined: 11 Nov 2013 Posts: 40 Location: Houston
|
Posted: Sun Mar 22, 2015 5:07 pm Post subject: |
|
|
Ant P. wrote: | One more thing before you do that - does your Xorg.log mention glamor accel being enabled at all? Having that active caused all kinds of problems for me, but I don't think you get a choice of AccelMethod on the newer cards... |
I turned it off after X started hanging whenever I played the video, but without it, it seems to hang inconsistently on different videos. I don't use glamor right now, however, it was no problem on Linux-3.16.7. _________________ Specs: AMD FX-6100|ASUS M5A97 AM3+|XFX AMD Radeon HD 6870|1TB 7200RPM/500GB 7200RPM|8GB DDR3 1600MHz |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|