summaryrefslogtreecommitdiff
path: root/docs/random/error
blob: 7dba910d8675c39db32fa361f6ebc0c23db57067 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
Some notes on the error handling introduced after 0.7.3

- there are four domains for errors:
  - CORE: core GStreamer errors
  - LIBRARY: supporting library errors
  - RESOURCE: errors accessing resources (files, network, memory, ...)
  - STREAM: errors in the data stream
- Each error in GStreamer or plug-ins can be put under one of these four.
- the enum is called Gst(Domain)Error and has GST_(DOMAIN)_ERROR_(CODE) members
  (see GError API docs for rationale)
- each of the enums starts with _FAILED at 1 (with FAILED being the generic
  error if none of the others applies)
- second in the enum is TOO_LAZY, which allows us to keep track of those errors
  that we haven't categorized yet.  This means they really should either move
  to another one, or a new one ought to be created.
- each enum ends with NUM_ERRORS

- elements call gst_element_error to signal an error:
  gst_element_error (element, domain, code, message, debug);
  With :
  - element being the one signalling the error
  - domain one of CORE, LIBRARY, RESOURCE, STREAM
  - code one of the suffixes in the Gst(Domain)Error enum
  - message is either NULL (to signal the standard error message for the
    given domain and code), or a printf-like set with the format being
    marked for translation.
    The string should start with a capital and end in a period so it forms
    a complete sentence.
    The string can/should be shown to the user of an application.
  - debug is either NULL or a non-translated debug string, which can be used
    to diagnose errors after they've happened.
    The string can be shown to the user when he asks for additional debug info.
    A useful macro is GST_ERROR_SYSTEM, which prints out the system error
    that explains the failure by using g_strerror.

- Some example calls:

      gst_element_error (src, RESOURCE, OPEN_READ,
        (_("Could not open file \"%s\" for reading"), src->filename),
        GST_ERROR_SYSTEM);

      The message is specified since we have more information:
          - the resource is a file 
          - we know the file name

      gst_element_error (element, CORE, NEGOTIATION, NULL, NULL);
 
      This is a simple negotiation error.  The default message will be
      signaled, telling the user that GStreamer had an internal error.

      gst_element_error (ebml, RESOURCE, READ, NULL,
                         ("Read error at position %llu (0x%llx)",
                         pos, pos));

      The plugin asked to read on the underlying resource (using bytestream),
      but failed.  The user will get a generic read error.  The debug info
      will contain the exact position in the stream at which the read error
      occured.