more log improvements

This commit is contained in:
Avi Zimmerman
2021-01-07 02:26:30 +02:00
parent 8ff68fb176
commit 34eb969053
6 changed files with 50 additions and 17 deletions

View File

@@ -109,6 +109,7 @@ func (f *fileSrc) setLocation(path string) error {
// gst.GoElement implementation. Here we simply create a new fileSrc with zeroed settings // gst.GoElement implementation. Here we simply create a new fileSrc with zeroed settings
// and state objects. // and state objects.
func (f *fileSrc) New() gst.GoElement { func (f *fileSrc) New() gst.GoElement {
CAT.Log(gst.LevelDebug, "Initializing new fileSrc object")
return &fileSrc{ return &fileSrc{
settings: &settings{}, settings: &settings{},
state: &state{}, state: &state{},
@@ -118,12 +119,14 @@ func (f *fileSrc) New() gst.GoElement {
// The TypeInit method should register any additional interfaces provided by the element. // The TypeInit method should register any additional interfaces provided by the element.
// In this example we signal to the type system that we also implement the GstURIHandler interface. // In this example we signal to the type system that we also implement the GstURIHandler interface.
func (f *fileSrc) TypeInit(instance *gst.TypeInstance) { func (f *fileSrc) TypeInit(instance *gst.TypeInstance) {
CAT.Log(gst.LevelDebug, "Adding URIHandler interface to type")
instance.AddInterface(gst.InterfaceURIHandler) instance.AddInterface(gst.InterfaceURIHandler)
} }
// The ClassInit method should specify the metadata for this element and add any pad templates // The ClassInit method should specify the metadata for this element and add any pad templates
// and properties. // and properties.
func (f *fileSrc) ClassInit(klass *gst.ElementClass) { func (f *fileSrc) ClassInit(klass *gst.ElementClass) {
CAT.Log(gst.LevelDebug, "Initializing gofilesrc class")
klass.SetMetadata( klass.SetMetadata(
"File Source", "File Source",
"Source/File", "Source/File",
@@ -137,6 +140,7 @@ func (f *fileSrc) ClassInit(klass *gst.ElementClass) {
gst.PadPresenceAlways, gst.PadPresenceAlways,
caps, caps,
) )
CAT.Log(gst.LevelDebug, "Adding src pad template and properties to class")
klass.AddPadTemplate(srcPadTemplate) klass.AddPadTemplate(srcPadTemplate)
klass.InstallProperties(properties) klass.InstallProperties(properties)
} }
@@ -164,7 +168,7 @@ func (f *fileSrc) SetProperty(self *gst.Object, id uint, value *glib.Value) {
err.Error(), err.Error(),
) )
} }
self.Log(CAT, gst.LevelInfo, fmt.Sprintf("Set location to %s", f.settings.location)) self.Log(CAT, gst.LevelInfo, fmt.Sprintf("Set `location` to %s", f.settings.location))
} }
} }
@@ -181,7 +185,7 @@ func (f *fileSrc) GetProperty(self *gst.Object, id uint) *glib.Value {
if err == nil { if err == nil {
return val return val
} }
gst.ToElement(self).ErrorMessage(gst.DomainLibrary, gst.LibraryErrorSettings, gst.ToElement(self).ErrorMessage(gst.DomainLibrary, gst.LibraryErrorFailed,
fmt.Sprintf("Could not convert %s to GValue", f.settings.location), fmt.Sprintf("Could not convert %s to GValue", f.settings.location),
err.Error(), err.Error(),
) )
@@ -193,6 +197,7 @@ func (f *fileSrc) GetProperty(self *gst.Object, id uint) *glib.Value {
// during the initialization process can be performed here. In this example, we set the format on our // during the initialization process can be performed here. In this example, we set the format on our
// underlying GstBaseSrc to bytes. // underlying GstBaseSrc to bytes.
func (f *fileSrc) Constructed(self *gst.Object) { func (f *fileSrc) Constructed(self *gst.Object) {
self.Log(CAT, gst.LevelDebug, "Setting format of GstBaseSrc to bytes")
base.ToGstBaseSrc(self).SetFormat(gst.FormatBytes) base.ToGstBaseSrc(self).SetFormat(gst.FormatBytes)
} }
@@ -216,6 +221,7 @@ func (f *fileSrc) GetSize(self *base.GstBaseSrc) (bool, int64) {
) )
return false, 0 return false, 0
} }
self.Log(CAT, gst.LevelDebug, fmt.Sprintf("file stat - name: %s size: %d mode: %v modtime: %v", stat.Name(), stat.Size(), stat.Mode(), stat.ModTime()))
return true, stat.Size() return true, stat.Size()
} }
@@ -233,6 +239,7 @@ func (f *fileSrc) Start(self *base.GstBaseSrc) bool {
} }
var err error var err error
self.Log(CAT, gst.LevelDebug, fmt.Sprintf("Opening file %s for reading", f.settings.location))
f.state.file, err = os.OpenFile(f.settings.location, syscall.O_RDONLY, 0444) f.state.file, err = os.OpenFile(f.settings.location, syscall.O_RDONLY, 0444)
if err != nil { if err != nil {
self.ErrorMessage(gst.DomainResource, gst.ResourceErrorOpenRead, self.ErrorMessage(gst.DomainResource, gst.ResourceErrorOpenRead,
@@ -245,7 +252,7 @@ func (f *fileSrc) Start(self *base.GstBaseSrc) bool {
self.StartComplete(gst.FlowOK) self.StartComplete(gst.FlowOK)
self.Log(CAT, gst.LevelInfo, "Started") self.Log(CAT, gst.LevelInfo, "GoFileSrc has started")
return true return true
} }
@@ -265,7 +272,7 @@ func (f *fileSrc) Stop(self *base.GstBaseSrc) bool {
f.state.position = 0 f.state.position = 0
f.state.started = false f.state.started = false
self.Log(CAT, gst.LevelInfo, "Stopped") self.Log(CAT, gst.LevelInfo, "GoFileSrc has stopped")
return true return true
} }
@@ -278,7 +285,10 @@ func (f *fileSrc) Fill(self *base.GstBaseSrc, offset uint64, size uint, buffer *
return gst.FlowError return gst.FlowError
} }
self.Log(CAT, gst.LevelDebug, fmt.Sprintf("Request to fill buffer from offset %v with size %v", offset, size))
if f.state.position != offset { if f.state.position != offset {
self.Log(CAT, gst.LevelDebug, fmt.Sprintf("Seeking to new position at offset %v from previous position at offset %v", offset, f.state.position))
if _, err := f.state.file.Seek(int64(offset), 0); err != nil { if _, err := f.state.file.Seek(int64(offset), 0); err != nil {
self.ErrorMessage(gst.DomainResource, gst.ResourceErrorSeek, self.ErrorMessage(gst.DomainResource, gst.ResourceErrorSeek,
fmt.Sprintf("Failed to seek to %d in file", offset), err.Error()) fmt.Sprintf("Failed to seek to %d in file", offset), err.Error())
@@ -287,6 +297,7 @@ func (f *fileSrc) Fill(self *base.GstBaseSrc, offset uint64, size uint, buffer *
f.state.position = offset f.state.position = offset
} }
self.Log(CAT, gst.LevelDebug, fmt.Sprintf("Reading %v bytes from file at offset %v", size, f.state.position))
out := make([]byte, int(size)) out := make([]byte, int(size))
if _, err := f.state.file.Read(out); err != nil && err != io.EOF { if _, err := f.state.file.Read(out); err != nil && err != io.EOF {
self.ErrorMessage(gst.DomainResource, gst.ResourceErrorRead, self.ErrorMessage(gst.DomainResource, gst.ResourceErrorRead,
@@ -295,7 +306,9 @@ func (f *fileSrc) Fill(self *base.GstBaseSrc, offset uint64, size uint, buffer *
} }
f.state.position = f.state.position + uint64(size) f.state.position = f.state.position + uint64(size)
self.Log(CAT, gst.LevelDebug, fmt.Sprintf("Incremented current position to %v", f.state.position))
self.Log(CAT, gst.LevelDebug, fmt.Sprintf("Writing data from file to buffer"))
bufmap := buffer.Map(gst.MapWrite) bufmap := buffer.Map(gst.MapWrite)
if bufmap == nil { if bufmap == nil {
self.ErrorMessage(gst.DomainLibrary, gst.LibraryErrorFailed, "Failed to map buffer", "") self.ErrorMessage(gst.DomainLibrary, gst.LibraryErrorFailed, "Failed to map buffer", "")
@@ -329,5 +342,6 @@ func (f *fileSrc) SetURI(uri string) (bool, error) {
if err != nil { if err != nil {
return false, err return false, err
} }
CAT.Log(gst.LevelInfo, fmt.Sprintf("Set `location` to %s via URIHandler", f.settings.location))
return true, nil return true, nil
} }

View File

@@ -303,7 +303,7 @@ func goURIHdlrSetURI(hdlr *C.GstURIHandler, uri *C.gchar, gerr **C.GError) C.gbo
iface := FromObjectUnsafePrivate(unsafe.Pointer(hdlr)) iface := FromObjectUnsafePrivate(unsafe.Pointer(hdlr))
ok, err := iface.(URIHandler).SetURI(C.GoString(uri)) ok, err := iface.(URIHandler).SetURI(C.GoString(uri))
if err != nil { if err != nil {
C.g_set_error_literal(gerr, newQuarkFromString(string(DomainLibrary)), C.gint(LibraryErrorSettings), C.CString(err.Error())) C.g_set_error_literal(gerr, DomainLibrary.toQuark(), C.gint(LibraryErrorSettings), C.CString(err.Error()))
} }
return gboolean(ok) return gboolean(ok)
} }

View File

@@ -96,6 +96,19 @@ func NewDebugCategory(name string, color DebugColorFlags, description string) *D
return &DebugCategory{ptr: cat} return &DebugCategory{ptr: cat}
} }
func (d *DebugCategory) logDepth(level DebugLevel, message string, depth int, obj *C.GObject) {
function, file, line, _ := runtime.Caller(depth)
C.cgoDebugLog(
d.ptr,
C.GstDebugLevel(level),
C.CString(path.Base(file)),
(C.CString(runtime.FuncForPC(function).Name())),
C.gint(line),
obj,
C.CString(message),
)
}
// Log logs the given message using the currently registered debugging handlers. You can optionally // Log logs the given message using the currently registered debugging handlers. You can optionally
// provide a single object to log the message for. GStreamer will automatically add a newline to the // provide a single object to log the message for. GStreamer will automatically add a newline to the
// end of the message. // end of the message.
@@ -104,14 +117,5 @@ func (d *DebugCategory) Log(level DebugLevel, message string, obj ...*Object) {
if len(obj) > 0 { if len(obj) > 0 {
o = (*C.GObject)(obj[0].Unsafe()) o = (*C.GObject)(obj[0].Unsafe())
} }
function, file, line, _ := runtime.Caller(1) d.logDepth(level, message, 2, o)
C.cgoDebugLog(
d.ptr,
C.GstDebugLevel(level),
C.CString(path.Base(file)),
(C.CString(runtime.FuncForPC(function).Name())),
C.gint(line),
o,
C.CString(message),
)
} }

View File

@@ -181,7 +181,7 @@ func (e *Element) MessageFull(msgType MessageType, domain Domain, code ErrorCode
C.gst_element_message_full( C.gst_element_message_full(
e.Instance(), e.Instance(),
C.GstMessageType(msgType), C.GstMessageType(msgType),
newQuarkFromString(string(domain)), domain.toQuark(),
C.gint(code), C.gint(code),
(*C.gchar)(cTxt), (*C.gchar)(cTxt),
(*C.gchar)(cDbg), (*C.gchar)(cDbg),

View File

@@ -16,6 +16,21 @@ const (
DomainStream Domain = "STREAM" DomainStream Domain = "STREAM"
) )
func (d Domain) toQuark() C.GQuark {
switch d {
case DomainCore:
return C.gst_core_error_quark()
case DomainLibrary:
return C.gst_library_error_quark()
case DomainResource:
return C.gst_resource_error_quark()
case DomainStream:
return C.gst_stream_error_quark()
default:
return C.gst_library_error_quark()
}
}
// ErrorCode represents GstGError codes. // ErrorCode represents GstGError codes.
type ErrorCode int type ErrorCode int

View File

@@ -80,5 +80,5 @@ func (o *Object) ListProperties() []*ParameterSpec {
// Log logs a message to the given category from this object using the currently registered // Log logs a message to the given category from this object using the currently registered
// debugging handlers. // debugging handlers.
func (o *Object) Log(cat *DebugCategory, level DebugLevel, message string) { func (o *Object) Log(cat *DebugCategory, level DebugLevel, message string) {
cat.Log(level, message, o) cat.logDepth(level, message, 2, (*C.GObject)(o.Unsafe()))
} }