/* GStreamer
 * Copyright (C) <2016> Vivia Nikolaidou <vivia@toolsonair.com>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
 * Boston, MA 02110-1301, USA.
 */

#ifndef __GST_VIDEO_TIME_CODE_H__
#define __GST_VIDEO_TIME_CODE_H__

#include <gst/gst.h>

G_BEGIN_DECLS

typedef struct _GstVideoTimeCodeConfig GstVideoTimeCodeConfig;
typedef struct _GstVideoTimeCode GstVideoTimeCode;
typedef struct _GstVideoTimeCodeInterval GstVideoTimeCodeInterval;

/**
 * GstVideoTimeCodeFlags:
 * @GST_VIDEO_TIME_CODE_FLAGS_NONE: No flags
 * @GST_VIDEO_TIME_CODE_FLAGS_DROP_FRAME: Whether we have drop frame rate
 * @GST_VIDEO_TIME_CODE_FLAGS_INTERLACED: Whether we have interlaced video
 *
 * Flags related to the time code information.
 * For drop frame, only 30000/1001 and 60000/1001 frame rates are supported.
 *
 * Since: 1.10
 */
typedef enum
{
  GST_VIDEO_TIME_CODE_FLAGS_NONE = 0,
  GST_VIDEO_TIME_CODE_FLAGS_DROP_FRAME = (1<<0),
  GST_VIDEO_TIME_CODE_FLAGS_INTERLACED = (1<<1)
  /* Not supported yet:
   * GST_VIDEO_TIME_CODE_ALLOW_MORE_THAN_24H = (1<<2)
   * GST_VIDEO_TIME_CODE_ALLOW_NEGATIVE = (1<<3)
   */
} GstVideoTimeCodeFlags;

/**
 * GstVideoTimeCodeConfig:
 * @fps_n: Numerator of the frame rate
 * @fps_d: Denominator of the frame rate
 * @flags: the corresponding #GstVideoTimeCodeFlags
 * @latest_daily_jam: The latest daily jam information, if present, or NULL
 *
 * Supported frame rates: 30000/1001, 60000/1001 (both with and without drop
 * frame), and integer frame rates e.g. 25/1, 30/1, 50/1, 60/1.
 *
 * The configuration of the time code.
 *
 * Since: 1.10
 */
struct _GstVideoTimeCodeConfig {
  guint fps_n;
  guint fps_d;
  GstVideoTimeCodeFlags flags;
  GDateTime *latest_daily_jam;
};

/**
 * GstVideoTimeCode:
 * @hours: the hours field of #GstVideoTimeCode
 * @minutes: the minutes field of #GstVideoTimeCode
 * @seconds: the seconds field of #GstVideoTimeCode
 * @frames: the frames field of #GstVideoTimeCode
 * @field_count: Interlaced video field count
 * @config: the corresponding #GstVideoTimeCodeConfig
 *
 * @field_count must be 0 for progressive video and 1 or 2 for interlaced.
 *
 * A representation of a SMPTE time code.
 *
 * @hours must be positive and less than 24. Will wrap around otherwise.
 * @minutes and @seconds must be positive and less than 60.
 * @frames must be less than or equal to @config.fps_n / @config.fps_d
 * These values are *NOT* automatically normalized.
 *
 * Since: 1.10
 */
struct _GstVideoTimeCode {
  GstVideoTimeCodeConfig config;

  guint hours;
  guint minutes;
  guint seconds;
  guint frames;
  guint field_count;
};

/**
 * GstVideoTimeCodeInterval:
 * @hours: the hours field of #GstVideoTimeCodeInterval
 * @minutes: the minutes field of #GstVideoTimeCodeInterval
 * @seconds: the seconds field of #GstVideoTimeCodeInterval
 * @frames: the frames field of #GstVideoTimeCodeInterval
 *
 * A representation of a difference between two #GstVideoTimeCode instances.
 * Will not necessarily correspond to a real timecode (e.g. 00:00:10;00)
 *
 * Since: 1.12
 */
struct _GstVideoTimeCodeInterval {
  guint hours;
  guint minutes;
  guint seconds;
  guint frames;
};

#define GST_VIDEO_TIME_CODE_INIT { {0, 0, 0, NULL}, 0, 0, 0, 0, 0 }

#define GST_TYPE_VIDEO_TIME_CODE (gst_video_time_code_get_type())
GST_EXPORT
GType gst_video_time_code_get_type (void);

GST_EXPORT
GstVideoTimeCode * gst_video_time_code_new          (guint                    fps_n,
                                                     guint                    fps_d,
                                                     GDateTime              * latest_daily_jam,
                                                     GstVideoTimeCodeFlags    flags,
                                                     guint                    hours,
                                                     guint                    minutes,
                                                     guint                    seconds,
                                                     guint                    frames,
                                                     guint                    field_count);

GST_EXPORT
GstVideoTimeCode * gst_video_time_code_new_empty    (void);

GST_EXPORT
GstVideoTimeCode * gst_video_time_code_new_from_string    (const gchar * tc_str);

GST_EXPORT
GstVideoTimeCode * gst_video_time_code_new_from_date_time (guint              fps_n,
                                                     guint                    fps_d,
                                                     GDateTime              * dt,
                                                     GstVideoTimeCodeFlags    flags,
                                                     guint                    field_count);

GST_EXPORT
void gst_video_time_code_free                       (GstVideoTimeCode       * tc);

GST_EXPORT
GstVideoTimeCode * gst_video_time_code_copy         (const GstVideoTimeCode * tc);

GST_EXPORT
void gst_video_time_code_init                       (GstVideoTimeCode       * tc,
                                                     guint                    fps_n,
                                                     guint                    fps_d,
                                                     GDateTime              * latest_daily_jam,
                                                     GstVideoTimeCodeFlags    flags,
                                                     guint                    hours,
                                                     guint                    minutes,
                                                     guint                    seconds,
                                                     guint                    frames,
                                                     guint                    field_count);

GST_EXPORT
void gst_video_time_code_init_from_date_time        (GstVideoTimeCode       * tc,
                                                     guint                    fps_n,
                                                     guint                    fps_d,
                                                     GDateTime              * dt,
                                                     GstVideoTimeCodeFlags    flags,
                                                     guint                    field_count);

GST_EXPORT
void gst_video_time_code_clear                      (GstVideoTimeCode       * tc);

GST_EXPORT
gboolean gst_video_time_code_is_valid               (const GstVideoTimeCode * tc);

GST_EXPORT
gint gst_video_time_code_compare                    (const GstVideoTimeCode * tc1,
                                                     const GstVideoTimeCode * tc2);

GST_EXPORT
void gst_video_time_code_increment_frame            (GstVideoTimeCode       * tc);

GST_EXPORT
void gst_video_time_code_add_frames                 (GstVideoTimeCode       * tc,
                                                     gint64                   frames);

GST_EXPORT
gchar *gst_video_time_code_to_string                (const GstVideoTimeCode * tc);

GST_EXPORT
GDateTime *gst_video_time_code_to_date_time         (const GstVideoTimeCode * tc);

GST_EXPORT
guint64 gst_video_time_code_nsec_since_daily_jam    (const GstVideoTimeCode * tc);

GST_EXPORT
guint64 gst_video_time_code_frames_since_daily_jam  (const GstVideoTimeCode * tc);

GST_EXPORT
GstVideoTimeCode * gst_video_time_code_add_interval (const GstVideoTimeCode * tc, const GstVideoTimeCodeInterval * tc_inter);

#define GST_TYPE_VIDEO_TIME_CODE_INTERVAL (gst_video_time_code_interval_get_type())
GST_EXPORT
GType gst_video_time_code_interval_get_type (void);

GST_EXPORT
GstVideoTimeCodeInterval * gst_video_time_code_interval_new  (guint                    hours,
                                                     guint                    minutes,
                                                     guint                    seconds,
                                                     guint                    frames);

GST_EXPORT
GstVideoTimeCodeInterval * gst_video_time_code_interval_new_from_string    (const gchar * tc_inter_str);

GST_EXPORT
void gst_video_time_code_interval_free                   (GstVideoTimeCodeInterval       * tc);

GST_EXPORT
GstVideoTimeCodeInterval * gst_video_time_code_interval_copy (const GstVideoTimeCodeInterval * tc);

GST_EXPORT
void gst_video_time_code_interval_init                   (GstVideoTimeCodeInterval       * tc,
                                                     guint                    hours,
                                                     guint                    minutes,
                                                     guint                    seconds,
                                                     guint                    frames);

GST_EXPORT
void gst_video_time_code_interval_clear                  (GstVideoTimeCodeInterval       * tc);

G_END_DECLS

#endif /* __GST_VIDEO_TIME_CODE_H__ */
