Seperate decode and picture_copy if no pix_fmt is specified
[platform/adaptation/emulator/gst-plugins-emulator.git] / src / gstmaru.h
index e7ab644..caaf02d 100644 (file)
@@ -32,6 +32,7 @@
 #define __GST_MARU_H__
 
 #include <stdint.h>
+#include <stdbool.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -48,6 +49,8 @@ GST_DEBUG_CATEGORY_EXTERN (maru_debug);
 
 G_BEGIN_DECLS
 
+extern int device_version;
+
 enum codec_log_level {
   ERR,
   WARN,
@@ -56,17 +59,19 @@ enum codec_log_level {
 };
 
 #define CODEC_DEV   "/dev/brillcodec"
-#define CODEC_VER   1
+#define CODEC_VER   3
+
+#define CHECK_VERSION(version)        (device_version >= version)
 
 #define CODEC_LOG(level, fmt, ...) \
   do { \
     if (level <= INFO) \
-      printf("[gst-maru][%d] " fmt, __LINE__, ##__VA_ARGS__); \
+      printf("[gst-maru][%s:%d] " fmt, __FILE__, __LINE__, ##__VA_ARGS__); \
   } while (0)
 
 #define FF_INPUT_BUFFER_PADDING_SIZE  8
-#define FF_MAX_AUDIO_FRAME_SIZE     192000 // 1 second of 48khz 32bit audio
-#define FF_MIN_BUFFER_SIZE        16384
+#define FF_MAX_AUDIO_FRAME_SIZE       192000 // 1 second of 48khz 32bit audio
+#define FF_MIN_BUFFER_SIZE            16384
 
 #define GEN_MASK(x) ((1<<(x))-1)
 #define ROUND_UP_X(v, x) (((v) + GEN_MASK(x)) & ~GEN_MASK(x))
@@ -75,22 +80,17 @@ enum codec_log_level {
 #define ROUND_UP_8(x) ROUND_UP_X(x, 3)
 #define DIV_ROUND_UP_X(v, x) (((v) + GEN_MASK(x)) >> (x))
 
-typedef struct _CodecIOParams {
-  int32_t   api_index;
-  int32_t   ctx_index;
-  uint32_t  mem_offset;
-} CodecIOParams;
-
-typedef struct _CodecDeviceMem {
-  uint32_t  index;
-  uint32_t  offset;
-} CodecDeviceMem;
+static inline bool can_use_new_decode_api(void) {
+    if (CHECK_VERSION(3)) {
+        return true;
+    }
+    return false;
+}
 
 typedef struct _CodecDevice {
   int       fd;
   uint8_t   *buf;
   uint32_t  buf_size;
-  CodecDeviceMem mem_info;
 } CodecDevice;
 
 typedef struct _CodecElement {
@@ -116,15 +116,13 @@ typedef struct _AudioData {
   int32_t channels, sample_rate;
   int32_t block_align, depth;
   int32_t sample_fmt, frame_size;
-  int32_t bits_per_sample_fmt;
+  int32_t bits_per_sample_fmt, reserved;
   int64_t channel_layout;
 } AudioData;
 
 typedef struct _CodecContext {
-//  union {
-    VideoData video;
-    AudioData audio;
-//  };
+  VideoData video;
+  AudioData audio;
 
   int32_t bit_rate;
   int32_t codec_tag;
@@ -144,42 +142,22 @@ enum CODEC_FUNC_TYPE {
   CODEC_ENCODE_AUDIO,
   CODEC_PICTURE_COPY,
   CODEC_DEINIT,
+  CODEC_FLUSH_BUFFERS,
+  CODEC_DECODE_VIDEO2,
 };
 
-#if 0
-enum CODEC_IO_CMD {
-  CODEC_CMD_COPY_TO_DEVICE_MEM = 5,
-  CODEC_CMD_COPY_FROM_DEVICE_MEM,
-  CODEC_CMD_GET_VERSION = 20,
-  CODEC_CMD_GET_ELEMENT,
-  CODEC_CMD_GET_CONTEXT_INDEX,
-  CODEC_CMD_SECURE_MEMORY = 30,
-  CODEC_CMD_RELEASE_MEMORY,
-  CODEC_CMD_USE_DEVICE_MEM,
-  CODEC_CMD_REQ_FROM_SMALL_MEMORY,
-  CODEC_CMD_REQ_FROM_MEDIUM_MEMORY,
-  CODEC_CMD_REQ_FROM_LARGE_MEMORY,
-  CODEC_CMD_S_SECURE_BUFFER,
-  CODEC_CMD_M_SECURE_BUFFER,
-  CODEC_CMD_L_SECURE_BUFFER,
-};
-#endif
-
 enum CODEC_IO_CMD {
   CODEC_CMD_GET_VERSION = 20,
   CODEC_CMD_GET_ELEMENT,
   CODEC_CMD_GET_CONTEXT_INDEX,
-  CODEC_CMD_USE_DEVICE_MEM = 40,
-  CODEC_CMD_GET_DATA_FROM_SMALL_BUFFER,
-  CODEC_CMD_GET_DATA_FROM_MEDIUM_BUFFER,
-  CODEC_CMD_GET_DATA_FROM_LARGE_BUFFER,
-  CODEC_CMD_SECURE_SMALL_BUFFER,
-  CODEC_CMD_SECURE_MEDIUM_BUFFER,
-  CODEC_CMD_SECURE_LARGE_BUFFER,
+  CODEC_CMD_GET_ELEMENT_DATA,
+  CODEC_CMD_PUT_DATA_INTO_BUFFER = 40,
+  CODEC_CMD_SECURE_BUFFER,
+  CODEC_CMD_TRY_SECURE_BUFFER,
   CODEC_CMD_RELEASE_BUFFER,
+  CODEC_CMD_INVOKE_API_AND_RELEASE_BUFFER,
 };
 
-
 enum CODEC_MEDIA_TYPE {
   AVMEDIA_TYPE_UNKNOWN = -1,
   AVMEDIA_TYPE_VIDEO,
@@ -192,13 +170,19 @@ enum CODEC_TYPE {
   CODEC_TYPE_ENCODE,
 };
 
-enum SAMPLT_FORMAT {
+enum AUDIO_SAMPLE_FORMAT {
   SAMPLE_FMT_NONE = -1,
   SAMPLE_FMT_U8,
   SAMPLE_FMT_S16,
   SAMPLE_FMT_S32,
   SAMPLE_FMT_FLT,
   SAMPLE_FMT_DBL,
+
+  SAMPLE_FMT_U8P,
+  SAMPLE_FMT_S16P,
+  SAMPLE_FMT_S32P,
+  SAMPLE_FMT_FLTP,
+  SAMPLE_FMT_DBLP,
   SAMPLE_FMT_NB
 };