Librerias Para Leer Metadatos De Fotos Y Videos.


Ir a la página Anterior  1, 2, 3

Objetivo: Re: Alguna Libreria Para Leer Metadatos De Fotos.
portaro escribió: [Ver mensaje]
...lo instala o baja pero no lo tengo por ningun lado...

Fijate en el directorio /tmp, es alli donde se descargan los programas y liego se copian a una carpeta en el directorio de tu usuaerio (este ultimo paso me parece que es lo que falla).
Saludos.

Perfil MP  
Objetivo: Re: Alguna Libreria Para Leer Metadatos De Fotos.
Citar:
Tengo un problema extraño en la granja de gambas


Pruebe a descargarlo desde aquí.

Perfil MP  
Objetivo: Re: Alguna Libreria Para Leer Metadatos De Fotos.
tincho escribió: [Ver mensaje]
portaro escribió: [Ver mensaje]
...lo instala o baja pero no lo tengo por ningun lado...

Fijate en el directorio /tmp, es alli donde se descargan los programas y liego se copian a una carpeta en el directorio de tu usuaerio (este ultimo paso me parece que es lo que falla).
Saludos.


Gracias lo revisare.

cogier escribió: [Ver mensaje]
Citar:
Tengo un problema extraño en la granja de gambas


Pruebe a descargarlo desde aquí.



Gracias.
Ya descargue ese paquete y hice el deb para instalarlo pero me da el error supracitado arriba - qt5 y no soporta qt4 y un monton de errores si intentas cambiar a gtk.


Gracias y un saludo a todos.

Perfil MP  
Objetivo: Re: Alguna Libreria Para Leer Metadatos De Fotos.
Bueno Vuott, adapte esta clase que nos compartiste para extraer los metadatos.
Logro extraer casi todos los metadatos que necesito para mi programa (que sirve para ordenar fotos y vídeos tomados con cámaras de fotos digitales), solo me falta extraer la fecha de creación del vídeo.
Algunos fabricantes llaman "Media Create Date" otros "Date/Time Original" etc. estas etiquetas se encuentran en los metadatos EXIF.
He buscado un rato largo en
https://www.olivieraubert.net/vlc/python-ctypes/doc/
Pero no encontré ninguna referencia a dichas etiquetas EXIF
Al parecer esta librería esta destinada a películas y no a vídeos familiares creados con una cámara digital (que es el tipo de archivos que intento ordenar)

Gracias Vuott por todos los aportes de código, son muy interesantes porque de a poco me voy metiendo en el uso de librerías C.

Pongo aquí el código tal como quedo.
' gambas class file

Export

Library "libvlc:5.6.0"

Public Struct video_track_t
i_height As Integer
i_width As Integer
i_sar_num As Integer
i_sar_den As Integer
i_frame_rate_num As Integer
i_frame_rate_den As Integer
i_orientation As Integer
i_projection As Integer
pose1 As Single
pose2 As Single
pose3 As Single
pose4 As Single
i_multiview As Byte
End Struct

Public Struct audio_track_t
i_channels As Integer
i_rate As Integer
End Struct

Private Enum libvlc_media_parse_local = 0,
libvlc_media_parse_network,
libvlc_media_fetch_local,
libvlc_media_fetch_network = 4,
libvlc_media_do_interact = 8

' libvlc_instance_t * libvlc_new (int argc, const char *const *argv)
' Create And initialize a libvlc instance.
Private Extern libvlc_new(argc As Integer, argv As String[]) As Pointer

' libvlc_media_t * libvlc_media_new_path (libvlc_instance_t *p_instance, const char *path)
' Create a media for a certain file path.
Private Extern libvlc_media_new_path(p_instance As Pointer, path As String) As Pointer

' int libvlc_media_parse_with_options (libvlc_media_t *p_md, libvlc_media_parse_flag_t parse_flag, int timeout)
' Parse the media asynchronously with options.
Private Extern libvlc_media_parse_with_options(p_md As Pointer, parse_flag As Integer, timeout As Integer) As Integer

' libvlc_time_t libvlc_media_get_duration(libvlc_media_t *p_md)
' Get duration (in ms) of media descriptor object item.
Private Extern libvlc_media_get_duration(p_md As Pointer) As Long

' char* libvlc_media_get_meta (libvlc_media_t * p_md, libvlc_meta_t e_meta)
' Read the meta of the media.
Private Extern libvlc_media_get_meta(p_md As Pointer, e_meta As Integer) As String

' unsigned libvlc_media_tracks_get (libvlc_media_t * p_md, libvlc_media_track_t *** tracks)
' Get media descriptor's elementary streams description.
Private Extern libvlc_media_tracks_get(p_md As Pointer, tracks As Pointer) As Integer

' const char * libvlc_media_get_codec_description (libvlc_track_type_t i_type, uint32_t i_codec)
' Get codec description from media elementary stream.
Private Extern libvlc_media_get_codec_description(i_type As Integer, i_codec As Integer) As String

' void libvlc_media_release (libvlc_media_t *p_md)
' Decrement the reference count of a media descriptor object.
Private Extern libvlc_media_release(p_md As Pointer)

' libvlc_release (libvlc_instance_t * p_instance)
' Decrement the reference count of a libvlc instance, and destroy it if it reaches zero.
Private Extern libvlc_release(p_instance As Pointer)

Public Function MediaData(f As String) As Collection

Dim inst, md, p1, p2 As Pointer

Dim tm As Long ''Duración del flujo
Dim b As Byte
Dim s As String
Dim tp, i As Integer
Dim vt As Video_track_t
Dim at As Audio_track_t

Dim meta As String[] = ["Title:", "Artist:", "Genre", "Copyright:", "Album", "TrackNumber:",
"Description:", "Rating:", "Date:", "Setting:", "URL:",
"Language:", "NowPlaying:", "Publisher:", "EncodedBy:", "ArtworkURL:",
"TrackID:", "TrackTotal:", "Director:", "Season:", "Episode:",
"ShowName:", "Actors:", "AlbumArtist:", "DiscNumber:", "DiscTotal:"]

Dim orient As String[] = ["Normal", "Flipped horizontally", "Flipped vertically", "Rotated 180 degrees",
"Transposed", "Rotated 90 degrees clockwise", "Rotated 90 degrees anti-clockwise", "Anti-transposed"]

Dim cn As New Collection
Dim codec As String

cn.Clear

If Exist(f) Then

inst = libvlc_new(0, Null)
md = libvlc_media_new_path(inst, f)
libvlc_media_parse_with_options(md, libvlc_media_parse_local, 0)

Sleep 0.1

tm = libvlc_media_get_duration(md)

For b = 0 To meta.Max
s = libvlc_media_get_meta(md, b)
cn.Add(s, meta[b])
Next

p1 = Alloc(24)
p2 = VarPtr(p1)

i = libvlc_media_tracks_get(md, VarPtr(p2))

For b = 0 To i - 1

tp = Int@(Pointer@(p2 + (SizeOf(gb.Pointer) * b)) + 12)

Select Case tp

Case 0
codec = libvlc_media_get_codec_description(tp, Int@(Pointer@(p2 + (SizeOf(gb.Pointer) * b))))
cn.Add(codec, "AudioCodec")

at = Pointer@(Pointer@(p2 + (SizeOf(gb.Pointer))) + 24)
With at
cn.Add(.i_channels, "Channels")
cn.Add(.i_rate, "Rate")
End With

Case 1
codec = libvlc_media_get_codec_description(tp, Int@(Pointer@(p2 + (SizeOf(gb.Pointer) * b))))
cn.Add(codec, "VideoCodec")

vt = Pointer@(Pointer@(p2) + 24)

With vt
cn.Add(.i_width & "x" & .i_height, "ImageSize")
cn.Add(.i_frame_rate_num, "Frames/Sec")
cn.Add(orient[.i_orientation], "Orientation")
End With
Case 2
'
End Select
Next

' Libera la memoria:
Free(p1)
libvlc_media_release(md)
libvlc_release(inst)

Endif

Return cn

End


Con la herramienta exiftool recupero estos datos, entre otros
ImageWidth 1920
ImageHeight 1080
CompressorID avc1
VideoFrameRate 29.932
MediaCreateDate 2019:01:01 01:01:01
MediaTimeScale 48000
MediaDuration 13.03 s
AudioFormat mp4a
AudioChannels 2
AudioBitsPerSample 16
AudioSampleRate 48000
ImageSize 1920x1080
Rotation 0

Mientras que con libvlc recupero estos
Title: test.mp4
Artist:
Genre
Copyright:
Album
TrackNumber:
Description:
Rating:
Date:
Setting:
URL:
Language:
NowPlaying:
Publisher:
EncodedBy:
ArtworkURL:
TrackID:
TrackTotal:
Director:
Season:
Episode:
ShowName:
Actors:
AlbumArtist:
DiscNumber:
DiscTotal:
VideoCodec H264 - MPEG-4 AVC (part 10)
ImageSize 1920x1080
Frames/Sec 17630
Orientation Normal
AudioCodec MPEG AAC Audio
Channels 2
Rate 48000

Saludos.

Perfil MP  
Objetivo: Re: Alguna Libreria Para Leer Metadatos De Fotos.
tincho escribió: [Ver mensaje]
Con la herramienta exiftool recupero estos datos, entre otros
....
CompressorID avc1
.......
AudioFormat mp4a

Podemos obtener con VLC estos datos con estas lineas:
c = mt.i_original_fourcc
...
Print "Formato audio: "; Left(String@(VarPtr(c)), 4)
...
Print "CompressorID: "; Left(String@(VarPtr(c)), 4)



es decir con este nuevisimo codigo:
Library "libvlc:5.6.0"

Public Struct video_track_t
i_height As Integer
i_width As Integer
i_sar_num As Integer
i_sar_den As Integer
i_frame_rate_num As Integer
i_frame_rate_den As Integer
i_orientation As Integer
i_projection As Integer
f_yaw As Single
f_pitch As Single
f_roll As Single
f_field_of_view As Single
i_multiview As Byte
End Struct

Public Struct audio_track_t
i_channels As Integer
i_rate As Integer
End Struct

Public Struct media_track_t
i_codec As Integer
i_original_fourcc As Integer
i_id As Integer
i_type As Integer
i_profile As Integer
i_level As Integer
union As Pointer
i_bitrate As Integer
psz_language As Pointer
psz_description As Pointer
End Struct

Private Enum libvlc_media_parse_local = 0,
libvlc_media_parse_network,
libvlc_media_fetch_local,
libvlc_media_fetch_network = 4,
libvlc_media_do_interact = 8

'libvlc_instance_t * libvlc_new (int argc, const char *const *argv)
' Create And initialize a libvlc instance.
Private Extern libvlc_new(argc As Integer, argv As String[]) As Pointer

'libvlc_media_t * libvlc_media_new_path (libvlc_instance_t *p_instance, const char *path)
' Create a media for a certain file path.
Private Extern libvlc_media_new_path(p_instance As Pointer, path As String) As Pointer

'int libvlc_media_parse_with_options (libvlc_media_t *p_md, libvlc_media_parse_flag_t parse_flag, int timeout)
' Parse the media asynchronously with options.
Private Extern libvlc_media_parse_with_options(p_md As Pointer, parse_flag As Integer, timeout As Integer) As Integer

'libvlc_time_t libvlc_media_get_duration(libvlc_media_t *p_md)
' Get duration (in ms) of media descriptor object item.
Private Extern libvlc_media_get_duration(p_md As Pointer) As Long

'char* libvlc_media_get_meta (libvlc_media_t * p_md, libvlc_meta_t e_meta)
' Read the meta of the media.
Private Extern libvlc_media_get_meta(p_md As Pointer, e_meta As Integer) As String

'unsigned libvlc_media_tracks_get (libvlc_media_t * p_md, libvlc_media_track_t *** tracks)
' Get media descriptor's elementary streams description.
Private Extern libvlc_media_tracks_get(p_md As Pointer, tracks As Pointer) As Integer

'const char * libvlc_media_get_codec_description (libvlc_track_type_t i_type, uint32_t i_codec)
' Get codec description from media elementary stream.
Private Extern libvlc_media_get_codec_description(i_type As Integer, i_codec As Integer) As String

'void libvlc_media_release (libvlc_media_t *p_md)
' Decrement the reference count of a media descriptor object.
Private Extern libvlc_media_release(p_md As Pointer)

'libvlc_release (libvlc_instance_t * p_instance)
' Decrement the reference count of a libvlc instance, and destroy it if it reaches zero.
Private Extern libvlc_release(p_instance As Pointer)


Public Sub Main()

Dim inst, md, p1, p2 As Pointer
Dim tm As Long
Dim b As Byte
Dim s As String
Dim tp, i, c As Integer
Dim mt As Media_track_t
Dim vt As Video_track_t
Dim at As Audio_track_t
Dim meta As String[] = ["Title:", "Artist:", "Genre", "Copyright:", "Album", "TrackNumber:",
"Description:", "Rating:", "Date:", "Setting:", "URL:",
"Language:", "NowPlaying:", "Publisher:", "EncodedBy:", "ArtworkURL:",
"TrackID:", "TrackTotal:", "Director:", "Season:", "Episode:",
"ShowName:", "Actors:", "AlbumArtist:", "DiscNumber:", "DiscTotal:"]
Dim orient As String[] = ["Normal", "Flipped horizontally", "Flipped vertically", "Rotated 180 degrees",
"Transposed", "Rotated 90 degrees clockwise", "Rotated 90 degrees anti-clockwise", "Anti-transposed"]

s = "/ruta/del/archivo/video"
Print "Nome file: "; s

inst = libvlc_new(0, Null)

md = libvlc_media_new_path(inst, s)

libvlc_media_parse_with_options(md, libvlc_media_parse_local, 0)

Sleep 0.1

tm = libvlc_media_get_duration(md)
Print "Durata: "; Date(0, 0, 0, 0, 0, 0, tm)

Print "\n- Metadati -"
For b = 0 To meta.Max
s = libvlc_media_get_meta(md, b)
If Not IsNull(s) Then Print meta[b]; String(17 - Len(meta[b]), Chr(32)); s
Next

Print "\n- Codificatore -"
p1 = Alloc(SizeOf(gb.Pointer), 3)
p2 = VarPtr(p1)

i = libvlc_media_tracks_get(md, VarPtr(p2))

For b = 0 To i - 1
mt = Pointer@(p2 + (SizeOf(gb.Pointer) * b))
tp = mt.i_type

c = mt.i_original_fourcc

Print "Tipo media: ";
Select Case tp
Case -1
Print "Sconosciuto"
Case 0
Print "Audio"
Print "Codifica: "; libvlc_media_get_codec_description(tp, mt.i_codec)
Print "Formato audio: "; Left(String@(VarPtr(c)), 4)
at = mt.union
With at
Print "Canali: "; at.i_channels
Print "Frequenza camp.: "; at.i_rate
End With
Case 1
Print "Video"
Print "Codifica: "; libvlc_media_get_codec_description(tp, mt.i_codec)
Print "CompressorID: "; Left(String@(VarPtr(c)), 4)
vt = mt.union
With vt
Print "Risoluzione: "; .i_width; "x"; .i_height
Print "Fotogrammi/sec.: "; .i_frame_rate_num
Print "Orientazione: "; orient[.i_orientation]
End With
Case 2
Print "Testo"
End Select
Print
Next


' Libera la memoria:
Free(p1)
libvlc_media_release(md)
libvlc_release(inst)

End

Perfil MP  
Objetivo: Re: Alguna Libreria Para Leer Metadatos De Fotos.
vuott escribió: [Ver mensaje]
...Podemos obtener con VLC estos datos con estas lineas...

Perfecto gracias Vuott.
Por cierto Feliz cumpleaños !!

¿Has hecho algo con libmediainfo? ¿Esta escrita en c++ verdad?
¿Que hay de libffmpeg? ¿Esa si que es C verdad?
https://github.com/lince/libffmpeg-c/blob/master/src/libffmpeg.c

Saludos.

Perfil MP  
Objetivo: Re: Librerias Para Leer Metadatos De Fotos Y Videos.
Ahora adapte otra clase, también de Vuott, que utiliza libquicktime. y logro extraer una fecha pero no logro convertirla a algo legible por humanos.
La pagina de consulta sobre la libreria que estoy usando es:
http://libquicktime.sourceforge.net...__metadata.html

A la clase hay que pasarle la ruta del archivo de video y luego devuelve una coleccion con los datos.
El resultado es un signo "-" seguido de 9 números

¿Alguna idea de que estoy haciendo mal? o tal vez esta bien pero debo convertir ese formato a fecha pero... ¿Como hacerlo? Probe con dete de la terminal de linux y da cualquier cosa.

El fragmento en cuestión es:
fecha = lqt_get_creation_time(qt, i)
cn.Add(fecha, "VideoCreationDate[" & CStr(i) & "]")


El código completo es:
' gambas class file

Export

'Library "libmediainfo:0.0.0"
'Library "libvlc:5.6.0"

Library "libquicktime:2.0.0"

' quicktime_t * quicktime_open (const char *filename, int rd, int wr)
' Open a file.
Private Extern quicktime_open(filename As String, rd As Integer, wr As Integer) As Pointer

' int quicktime_has_audio (quicktime_t * file)
' Check if a file has at least one audio track.
Private Extern quicktime_has_audio(quicktime As Pointer) As Integer

' int quicktime_audio_tracks (quicktime_t * file)
' Get the number of audio tracks.
Private Extern quicktime_audio_tracks(quicktime As Pointer) As Integer

' long quicktime_sample_rate (quicktime_t *file, int track)
' Get the samplerate of an audio track.
Private Extern quicktime_sample_rate(quicktime As Pointer, track As Integer) As Long

' int quicktime_audio_bits (quicktime_t *file, int track)
' Get the bits per sample of an audio track.
Private Extern quicktime_audio_bits(quicktime As Pointer, track As Integer) As Integer

' int quicktime_track_channels (quicktime_t *file, int track)
' Get the number of channels of an audio track.
Private Extern quicktime_track_channels(quicktime As Pointer, track As Integer) As Integer

' long quicktime_audio_length (quicktime_t *file, int track)
' Get the audio length.
Private Extern quicktime_audio_length(quicktime As Pointer, track As Integer) As Long

' int lqt_get_audio_language (quicktime_t *file, int track, char * language)
' Get the audio language.
Private Extern lqt_get_audio_language(quicktime As Pointer, track As Integer, language As Pointer) As Integer

' int quicktime_has_video (quicktime_t *file)
' Check if a file has at least one video track.
Private Extern quicktime_has_video(quicktime As Pointer) As Integer

' int quicktime_video_tracks (quicktime_t *file)
' Get the number of video tracks.
Private Extern quicktime_video_tracks(quicktime As Pointer) As Integer

' int quicktime_video_width (quicktime_t *file, int track)
' Get the width of a video track.
Private Extern quicktime_video_width(quicktime As Pointer, track As Integer) As Integer

' int quicktime_video_height (quicktime_t *file, int track)
' Get the height of a video track.
Private Extern quicktime_video_height(quicktime As Pointer, track As Integer) As Integer

' double quicktime_frame_rate (quicktime_t *file, int track)
' Get the framerate of a video track.
Private Extern quicktime_frame_rate(quicktime As Pointer, track As Integer) As Float

' long quicktime_video_length (quicktime_t *file, int track)
' Get the video length.
Private Extern quicktime_video_length(quicktime As Pointer, track As Integer) As Long

' char * quicktime_video_compressor (quicktime_t *file, int track)
' Get the four character code of a video track.
Private Extern quicktime_video_compressor(quicktime As Pointer, track As Integer) As String

' int quicktime_close (quicktime_t * file)
' Close a quicktime handle and free all associated memory.
Private Extern quicktime_close(quicktime As Pointer) As Integer

'// Agregado para intentar extraer la fecha de creción
' unsigned long lqt_get_creation_time (quicktime_t * file)
' Get the creation Time From the file.
Private Extern lqt_get_creation_time(quicktime As Pointer, track As Integer) As Long

Public Sub QtimeDat(f As String) As Collection

Dim qt, lingua As Pointer
Dim i, tracce, bit, canali, wi, hi As Integer
Dim frequenza, dimensione As Long

Dim frame As Float
Dim compr As String

Dim fecha As Long '/// Agregado parar fecha
Dim cn As New Collection '/// Agregado parar fecha

cn.Clear
If Exist(f) Then
qt = quicktime_open(f, 1, 0)
If IsNull(qt) Then Error.Raise("Impossibile aprire il file !")

'Print "== ANALISI DELL'AUDIO =="

If CBool(quicktime_has_audio(qt)) = False Then
Print "Il file video non ha tracce audio !"
Quit
Endif

tracce = quicktime_audio_tracks(qt)
'Print "Numero tracce audio: "; Null, tracce
cn.Add(tracce, "AudioTracks")

For i = 0 To tracce - 1

frequenza = quicktime_sample_rate(qt, i)
'Print "Frequenza camp.to: "; Null, "Hz "; frequenza
cn.Add(frequenza, "AudioSampleRate[" & CStr(i) & "]")

bit = quicktime_audio_bits(qt, i)
If bit > 0 Then ' Print "Risoluzione audio: "; Null, bit; " bit"
cn.Add(bit, "AudioBits[" & CStr(i) & "]")
Endif

canali = quicktime_track_channels(qt, i)
'Print "Numero canali audio: "; Null, canali
cn.Add(canali, "AudioChannels[" & CStr(i) & "]")

dimensione = quicktime_audio_length(qt, i)
'Print "Dimensione audio: "; Null, dimensione; " byte"
cn.Add(dimensione, "AudioLength[" & CStr(i) & "]")

lingua = Alloc(SizeOf(gb.String))
lqt_get_audio_language(qt, i, lingua)
'Print "Lingua dell'audio: "; Null, String@(lingua)
cn.Add(lingua, "AudioLanguage[" & CStr(i) & "]")
Next

'Print "\n== ANALISI DEL VIDEO =="

If CBool(quicktime_has_video(qt)) = False Then Error.Raise("Il file non possiede video !")
tracce = quicktime_video_tracks(qt)
Print "Numero tracce video: "; Null, tracce
cn.Add(tracce, "VideoTracks[" & CStr(i) & "]")

For i = 0 To tracce - 1
wi = quicktime_video_width(qt, i)
'Print "Larghezza video: "; Null, wi; " pixel"
cn.Add(wi, "Width[" & CStr(i) & "]")

hi = quicktime_video_height(qt, i)
'Print "Altezza video: ", Null, hi; " pixel"
cn.Add(hi, "Height[" & CStr(i) & "]")

frame = quicktime_frame_rate(qt, i)
'Print "Frequenza frame: "; Null, frame
cn.Add(frame, "VideoFrameRate[" & CStr(i) & "]")

dimensione = quicktime_video_length(qt, i)
'Print "Dimensione video: "; Null, dimensione; " frame"
cn.Add(dimensione, "VideoLength[" & CStr(i) & "]")

compr = quicktime_video_compressor(qt, i)
Print "Tipo compressione: "; Null, compr
cn.Add(compr, "VideoCodec[" & CStr(i) & "]")

'/// Extracción de la fecha de creación
fecha = lqt_get_creation_time(qt, i)
'Print "Fecha video: "; Null, fecha; " frame"
'cn.Add(Format(fecha, "yyyymmdd"), "VideoCreationDate")
cn.Add(fecha, "VideoCreationDate[" & CStr(i) & "]")

Next

' '/// Extracción de la fecha de creación
' fecha = lqt_get_creation_time(qt)
' 'Print "Fecha video: "; Null, fecha; " frame"
' 'cn.Add(Format(fecha, "yyyymmdd"), "VideoCreationDate")
' cn.Add(fecha, "VideoCreationDate")

' Va in chiusura:
Free(lingua)
quicktime_close(qt)
Endif

Return cn

End


Saludos.

Perfil MP  
Objetivo: Re: Alguna Libreria Para Leer Metadatos De Fotos.
tincho escribió: [Ver mensaje]
¿Has hecho algo con libmediainfo? ¿Esta escrita en c++ verdad?

Sì.
En verdad es posible usar tambien C++, pero es más complejo, y su modalidad de escritura del codigo no me gusta.
Mira mi pagina en el wiki italiano:
https://www.gambas-it.org/wiki/inde...itte_in_C%2B%2B




tincho escribió: [Ver mensaje]
¿Que hay de libffmpeg? ¿Esa si que es C verdad?

Sì.

Perfil MP  
Objetivo: Re: Librerias Para Leer Metadatos De Fotos Y Videos.
tincho escribió: [Ver mensaje]

'// Agregado para intentar extraer la fecha de creción
.....
Private Extern lqt_get_creation_time(quicktime As Pointer, track As Integer) As Long

Una pregunta:
porque en gambas tú declaras esta función con dos parametros formales, si ella solo tiene un parametro ?

unsigned long lqt_get_creation_time (quicktime_t * file)

Perfil MP  
Ir a la página Anterior  1, 2, 3

Página 3 de 3


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.4363s (PHP: 66% SQL: 34%)
Consultas SQL: 29 - Debug off - GZIP Activado