Skip to content

File wfm_data.h

File List > doppler > wfm > wfm_data.h

Go to the documentation of this file

#ifndef WFM_DATA_H
#define WFM_DATA_H

#include <stddef.h>
#include <stdint.h>

#include "doppler/dp_state.h"      /* DP_FOURCC, the state envelope */
#include "doppler/wfm/wfm_frame.h" /* wfm_seq_t */

#ifdef __cplusplus
extern "C"
{
#endif

  typedef enum
  {
    WFM_DATA_FRAME   = 0, 
    WFM_DATA_NOT_YET = 1, 
    WFM_DATA_END     = 2, 
    WFM_DATA_ERROR   = 3, 
    WFM_DATA_IDLE    = 4  
  } wfm_data_status_t;

  typedef enum
  {
    WFM_DATA_UNPACED = 0, 
    WFM_DATA_PACED   = 1  
  } wfm_data_pacing_t;

  typedef struct wfm_data_src wfm_data_src_t;

  typedef struct
  {
    uint64_t frames;      
    uint64_t idle_frames; 
    uint64_t pad_bits;    
    uint64_t bits;        
    uint64_t total_bits;  
    uint64_t hash;        
    int      hashed;      
    int      stream;      
  } wfm_data_stats_t;

  wfm_data_src_t *dp_wfm_data_create (const char *data, const char *path,
                                      size_t len, const char *fill,
                                      const char **why);

  wfm_data_src_t *dp_wfm_data_create_fd (int fd, size_t len,
                                         const char *fill, const char **why);

  uint64_t dp_wfm_data_length_bits (const char *data, const char *path);

  wfm_data_src_t *dp_wfm_data_create_seq (const wfm_seq_t *data,
                                          const char *path, size_t len,
                                          const wfm_seq_t *fill,
                                          const char **why);

  void dp_wfm_data_destroy (wfm_data_src_t *s);

  wfm_data_status_t dp_wfm_data_next (wfm_data_src_t *s, size_t reps,
                                      uint8_t *out, size_t max_out,
                                      int timeout_ms);

  wfm_data_status_t dp_wfm_data_idle (wfm_data_src_t *s, size_t reps,
                                      uint8_t *out, size_t max_out);

  wfm_data_status_t dp_wfm_data_frame (wfm_data_src_t *s,
                                       wfm_data_pacing_t pacing, size_t reps,
                                       uint8_t *out, size_t max_out);

  void dp_wfm_data_stats (const wfm_data_src_t *s, wfm_data_stats_t *out);

  int dp_wfm_data_file_identity (const char *path, uint64_t *bits,
                                 uint64_t *h);

#define WFM_DATA_STATE_MAGIC DP_FOURCC ('W', 'F', 'D', 'S')
#define WFM_DATA_STATE_VERSION 1u

  const char *dp_wfm_data_state_refusal (const wfm_data_src_t *s);

  size_t dp_wfm_data_state_bytes (const wfm_data_src_t *s);

  void dp_wfm_data_get_state (const wfm_data_src_t *s, void *blob);

  int dp_wfm_data_set_state (wfm_data_src_t *s, const void *blob);

#ifdef __cplusplus
}
#endif

#endif /* WFM_DATA_H */