summaryrefslogtreecommitdiff
path: root/tests/internal/test-fei-enc-out.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/internal/test-fei-enc-out.c')
-rw-r--r--tests/internal/test-fei-enc-out.c300
1 files changed, 0 insertions, 300 deletions
diff --git a/tests/internal/test-fei-enc-out.c b/tests/internal/test-fei-enc-out.c
deleted file mode 100644
index 32326434..00000000
--- a/tests/internal/test-fei-enc-out.c
+++ /dev/null
@@ -1,300 +0,0 @@
-/*
- * test-fei-enc-out.c - FEI Encoder Test application to dump output buffers
- *
- * Copyright (C) 2017 Intel Corporation
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1
- * 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA
- */
-
-/* ./test-fei-enc -i sample_320x240.nv12 -f nv12 -w 320 -h 240 -o out.264 -v mv.out -d dist.out -m mbcode.out -e 1 */
-
-#include <stdio.h>
-#include <gst/gst.h>
-#include <gst/app/gstappsink.h>
-#include <stdlib.h>
-#include "../gst/vaapi/gstvaapifeivideometa.h"
-#include <gst/video/video.h>
-
-int
-main (int argc, char *argv[])
-{
- GstElement *pipeline, *filesrc, *videoparse, *enc, *capsfilter, *appsink;
- GError *err = NULL;
- GstStateChangeReturn ret;
- GstSample *sample;
- GstVideoFormat raw_format = GST_VIDEO_FORMAT_NV12;
- GOptionContext *ctx;
- FILE *file = NULL;
- FILE *mv_file = NULL;
- FILE *dist_file = NULL;
- FILE *mbcode_file = NULL;
- FILE *fei_stat_file = NULL;
- gchar *input_file_name = NULL;
- gchar *output_file_name = NULL;
- gchar *output_mv_name = NULL;
- gchar *output_distortion_name = NULL;
- gchar *output_mbcode_name = NULL;
- gchar *input_format;
- guint input_width;
- guint input_height;
- guint enc_frame_num = 0;
- guint block_size = 0;
- guint fei_mode = 1;
- guint fei_mode_flag = 0x00000004;
- gboolean link_ok = FALSE;
- guint mv_buffer_size = 0;
- guint mbcode_buffer_size = 0;
- guint dist_buffer_size = 0;
- gpointer mapped_data = NULL;
- guint mapped_data_size = 0;
- const gchar *caps_string = "video/x-h264, profile=constrained-baseline";
- GstCaps *filter_caps = NULL;
-
- GOptionEntry options[] = {
- {"input file", 'i', 0, G_OPTION_ARG_STRING, &input_file_name,
- "file to encode", NULL},
- {"output file", 'o', 0, G_OPTION_ARG_STRING, &output_file_name,
- "encpak output file", NULL},
- {"output mv file", 'v', 0, G_OPTION_ARG_STRING, &output_mv_name,
- "encpak mv output file", NULL},
- {"output distortion file", 'd', 0, G_OPTION_ARG_STRING,
- &output_distortion_name,
- "encpak distortion output file", NULL},
- {"output mbcode file", 'm', 0, G_OPTION_ARG_STRING, &output_mbcode_name,
- "encpak mbcode output file", NULL},
- {"format", 'f', 0, G_OPTION_ARG_STRING, &input_format,
- "input raw format: nv12 or i420", NULL},
- {"width", 'w', 0, G_OPTION_ARG_INT, &input_width,
- "input stream width", NULL},
- {"height", 'h', 0, G_OPTION_ARG_INT, &input_height,
- "input stream height", NULL},
- {"frame-num", 'n', 0, G_OPTION_ARG_INT, &enc_frame_num,
- "numumber of buffers to be encoded", NULL},
- {"blocksize", 's', 0, G_OPTION_ARG_INT, &block_size,
- "single buffer size of input stream", NULL},
- {"fei-mode", 'e', 0, G_OPTION_ARG_INT, &fei_mode,
- "1: ENC_PAK 2: ENC+PAK", NULL},
- {NULL}
- };
-
- ctx =
- g_option_context_new
- ("encpak with element filesrc, videoparse, vaapih264feienc, appsink");
- g_option_context_add_main_entries (ctx, options, NULL);
- g_option_context_add_group (ctx, gst_init_get_option_group ());
-
- if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
- g_print ("Error intializing: %s\n", err->message);
- g_option_context_free (ctx);
- g_clear_error (&err);
- return -1;
- }
-
- if (input_file_name == NULL || output_file_name == NULL) {
- g_print ("%s", g_option_context_get_help (ctx, TRUE, NULL));
- g_option_context_free (ctx);
- return -1;
- }
-
- if (!g_strcmp0 (input_format, "nv12"))
- raw_format = GST_VIDEO_FORMAT_NV12;
- else if (!g_strcmp0 (input_format, "i420"))
- raw_format = GST_VIDEO_FORMAT_I420;
- else
- return -1;
-
- if (!input_width || !input_height) {
- g_print ("%s", g_option_context_get_help (ctx, TRUE, NULL));
- g_option_context_free (ctx);
- return -1;
- }
-
- switch (fei_mode) {
- case 1:
- fei_mode_flag = 0x00000004;
- break;
- case 2:
- fei_mode_flag = 0x00000001 | 0x00000002;
- break;
- default:
- printf ("Unknown fei mode \n");
- g_assert (0);
- break;
- }
-
- g_option_context_free (ctx);
-
- gst_init (&argc, &argv);
-
- /* create pipeline */
- pipeline = gst_pipeline_new ("pipeline");
- filesrc = gst_element_factory_make ("filesrc", "source");
- videoparse = gst_element_factory_make ("videoparse", "videoparse");
- enc = gst_element_factory_make ("vaapih264feienc", "encpak");
- capsfilter = gst_element_factory_make ("capsfilter", "enccaps");
- appsink = gst_element_factory_make ("appsink", "sink");
-
- /* element prop setup */
- g_object_set (G_OBJECT (filesrc), "location", input_file_name, NULL);
- g_object_set (G_OBJECT (videoparse), "format", raw_format,
- "width", input_width, "height", input_height, NULL);
-
- if (enc_frame_num != 0)
- g_object_set (G_OBJECT (filesrc), "num-buffers", enc_frame_num, NULL);
- if (block_size != 0)
- g_object_set (G_OBJECT (filesrc), "blocksize", block_size, NULL);
-
- g_object_set (G_OBJECT (enc), "fei-mode", fei_mode_flag, NULL);
- g_object_set (G_OBJECT (enc), "search-window", 5, NULL);
- g_object_set (G_OBJECT (enc), "max-bframes", 0, NULL);
-
- filter_caps = gst_caps_from_string (caps_string);
- if (filter_caps)
- g_object_set (G_OBJECT (capsfilter), "caps", filter_caps, NULL);
- gst_caps_unref (filter_caps);
-
- gst_bin_add_many (GST_BIN (pipeline), filesrc, videoparse, enc, capsfilter,
- appsink, NULL);
-
- link_ok =
- gst_element_link_many (filesrc, videoparse, enc, capsfilter, appsink,
- NULL);
- if (!link_ok) {
- g_print ("filesrc, enc and appsink link fail");
- return -1;
- }
-
- file = fopen (output_file_name, "wb");
-
- if (output_mv_name != NULL)
- mv_file = fopen (output_mv_name, "wb");
-
- if (output_mbcode_name != NULL)
- mbcode_file = fopen (output_mbcode_name, "wb");
-
- if (output_distortion_name != NULL)
- dist_file = fopen (output_distortion_name, "wb");
-
- ret = gst_element_set_state (pipeline, GST_STATE_PLAYING);
- if (ret == GST_STATE_CHANGE_FAILURE) {
- g_printerr ("Unable to set the pipeline to the playing state.\n");
- gst_object_unref (pipeline);
- return -1;
- }
-
- /* pull sample from pipeline */
- while (1) {
- g_signal_emit_by_name (appsink, "pull-sample", &sample, NULL);
- if (sample) {
- GstBuffer *buffer = NULL;
- GstMapInfo map, info;
- GstMemory *mem;
- GstVaapiFeiVideoMeta *meta = NULL;
- GstMeta *m = NULL;
- const GstMetaInfo *meta_info;
- GType api;
-
- g_debug ("appsink received sample.\n");
- buffer = gst_sample_get_buffer (sample);
- if (gst_buffer_map (buffer, &map, GST_MAP_READ)) {
- mem = gst_buffer_peek_memory (buffer, 0);
- if (gst_memory_map (mem, &info, GST_MAP_READ))
- fwrite (info.data, 1, info.size, file);
-
- gst_memory_unmap (mem, &info);
- gst_buffer_unmap (buffer, &map);
- }
-
- meta_info = gst_meta_get_info ("GstVaapiFeiVideoMeta");
- api = meta_info->api;
- m = gst_buffer_get_meta (buffer, api);
- if (m != NULL)
- meta = ((GstVaapiFeiVideoMetaHolder *) (m))->meta;
-
- if (meta != NULL) {
-
- if (mv_file != NULL) {
- mapped_data = NULL;
- mapped_data_size = 0;
- if (gst_vaapi_fei_codec_object_map (GST_VAAPI_FEI_CODEC_OBJECT
- (meta->mv), &mapped_data, &mapped_data_size)) {
- fwrite (mapped_data, 1, mapped_data_size, mv_file);
- gst_vaapi_fei_codec_object_unmap (GST_VAAPI_FEI_CODEC_OBJECT
- (meta->mv));
- mv_buffer_size = mapped_data_size;
- }
- }
-
- if (mbcode_file != NULL) {
- mapped_data = NULL;
- mapped_data_size = 0;
- if (gst_vaapi_fei_codec_object_map (GST_VAAPI_FEI_CODEC_OBJECT
- (meta->mbcode), &mapped_data, &mapped_data_size)) {
- fwrite (mapped_data, 1, mapped_data_size, mbcode_file);
- gst_vaapi_fei_codec_object_unmap (GST_VAAPI_FEI_CODEC_OBJECT
- (meta->mbcode));
- mbcode_buffer_size = mapped_data_size;
- }
- }
-
- if (dist_file != NULL) {
- mapped_data = NULL;
- mapped_data_size = 0;
- if (gst_vaapi_fei_codec_object_map (GST_VAAPI_FEI_CODEC_OBJECT
- (meta->dist), &mapped_data, &mapped_data_size)) {
- fwrite (mapped_data, 1, mapped_data_size, dist_file);
- gst_vaapi_fei_codec_object_unmap (GST_VAAPI_FEI_CODEC_OBJECT
- (meta->dist));
- dist_buffer_size = mapped_data_size;
- }
- }
- }
-
- gst_sample_unref (sample);
- } else {
- g_print ("appsink finished receive sample.\n");
- break;
- }
- }
-
- /* Fixme: Currently assuming the input video has only one resoultion
- * which may not be true */
- /* create a status file for dumping size of each fei output buffer */
- if (output_mv_name || output_mbcode_name || output_distortion_name) {
- fei_stat_file = fopen ("fei_stat.out", "wb");
- fprintf (fei_stat_file, "Frame_MotionVectorData_Buffer_Size => %d \n",
- mv_buffer_size);
- fprintf (fei_stat_file, "Frame_MacroblcokCode_Buffer_Size => %d \n",
- mbcode_buffer_size);
- fprintf (fei_stat_file, "Frame_Distortion_Buffer_Size => %d \n",
- dist_buffer_size);
- }
-
- /* free */
- fclose (file);
- if (mv_file != NULL)
- fclose (mv_file);
- if (mbcode_file != NULL)
- fclose (mbcode_file);
- if (dist_file != NULL)
- fclose (dist_file);
- if (fei_stat_file)
- fclose (fei_stat_file);
-
- gst_element_set_state (pipeline, GST_STATE_NULL);
- gst_object_unref (pipeline);
- return 0;
-}