1bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* 2bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee INTEL CONFIDENTIAL 3bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee Copyright 2009 Intel Corporation All Rights Reserved. 4bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material contains trade secrets and proprietary and confidential information of Intel or its suppliers and licensors. The Material is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel’s prior express written permission. 5bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 6bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing. 7bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee */ 8bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include <glib.h> 9bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include "mixvideolog.h" 10bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include "mixvideoformatenc.h" 11bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 12bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee//#define MDEBUG 13bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 14bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* Default vmethods implementation */ 15bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic MIX_RESULT mix_videofmtenc_getcaps_default(MixVideoFormatEnc *mix, 16bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee GString *msg); 17bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic MIX_RESULT mix_videofmtenc_initialize_default(MixVideoFormatEnc *mix, 18bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixVideoConfigParamsEnc * config_params_enc, 19bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixFrameManager * frame_mgr, 20bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixBufferPool * input_buf_pool, 21bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixSurfacePool ** surface_pool, 22bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee VADisplay vadisplay); 23bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 24bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic MIX_RESULT 25bd8388b4555645b3d29abc6a94c303638064d69awonjong.leemix_videofmtenc_encode_default(MixVideoFormatEnc *mix, MixBuffer * bufin[], 26bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee gint bufincnt, MixIOVec * iovout[], gint iovoutcnt, 27bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixVideoEncodeParams * encode_params); 28bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic MIX_RESULT mix_videofmtenc_flush_default(MixVideoFormatEnc *mix); 29bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic MIX_RESULT mix_videofmtenc_eos_default(MixVideoFormatEnc *mix); 30bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic MIX_RESULT mix_videofmtenc_deinitialize_default(MixVideoFormatEnc *mix); 31bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic MIX_RESULT mix_videofmtenc_get_max_coded_buffer_size_default( 32bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixVideoFormatEnc *mix, guint *max_size); 33bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 34bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 35bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic GObjectClass *parent_class = NULL; 36bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 37bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic void mix_videoformatenc_finalize(GObject * obj); 38bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeG_DEFINE_TYPE (MixVideoFormatEnc, mix_videoformatenc, G_TYPE_OBJECT); 39bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 40bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic void mix_videoformatenc_init(MixVideoFormatEnc * self) { 41bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee /* TODO: public member initialization */ 42bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 43bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee /* TODO: private member initialization */ 44bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 45bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->objectlock = g_mutex_new(); 46bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 47bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->initialized = FALSE; 48bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->framemgr = NULL; 49bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->surfacepool = NULL; 50bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->inputbufpool = NULL; 51bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->inputbufqueue = NULL; 52bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->va_display = NULL; 53bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->va_context = 0; 54bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->va_config = 0; 55bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->mime_type = NULL; 56bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->frame_rate_num= 0; 57bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->frame_rate_denom = 1; 58bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->picture_width = 0; 59bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->picture_height = 0; 60bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->initial_qp = 0; 61bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->min_qp = 0; 62bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->intra_period = 0; 63bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->bitrate = 0; 64bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->share_buf_mode = FALSE; 65bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->ci_frame_id = NULL; 66bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->ci_frame_num = 0; 67bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->drawable = 0x0; 68bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->need_display = TRUE; 69bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 70bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->va_rcmode = VA_RC_NONE; 71bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->va_format = VA_RT_FORMAT_YUV420; 72bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->va_entrypoint = VAEntrypointEncSlice; 73bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->va_profile = VAProfileH264Baseline; 74bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 75bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee //add more properties here 76bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 77bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 78bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic void mix_videoformatenc_class_init(MixVideoFormatEncClass * klass) { 79bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee GObjectClass *gobject_class = (GObjectClass *) klass; 80bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 81bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee /* parent class for later use */ 82bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee parent_class = g_type_class_peek_parent(klass); 83bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 84bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee gobject_class->finalize = mix_videoformatenc_finalize; 85bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 86bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee /* setup vmethods with base implementation */ 87bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee klass->getcaps = mix_videofmtenc_getcaps_default; 88bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee klass->initialize = mix_videofmtenc_initialize_default; 89bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee klass->encode = mix_videofmtenc_encode_default; 90bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee klass->flush = mix_videofmtenc_flush_default; 91bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee klass->eos = mix_videofmtenc_eos_default; 92bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee klass->deinitialize = mix_videofmtenc_deinitialize_default; 93bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee klass->getmaxencodedbufsize = mix_videofmtenc_get_max_coded_buffer_size_default; 94bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 95bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 96bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMixVideoFormatEnc * 97bd8388b4555645b3d29abc6a94c303638064d69awonjong.leemix_videoformatenc_new(void) { 98bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixVideoFormatEnc *ret = g_object_new(MIX_TYPE_VIDEOFORMATENC, NULL); 99bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 100bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return ret; 101bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 102bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 103bd8388b4555645b3d29abc6a94c303638064d69awonjong.leevoid mix_videoformatenc_finalize(GObject * obj) { 104bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee /* clean up here. */ 105bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 106bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (obj == NULL) { 107bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_E( "obj == NULL\n"); 108bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return; 109bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 110bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 111bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixVideoFormatEnc *mix = MIX_VIDEOFORMATENC(obj); 112bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 113bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_V( "\n"); 114bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 115bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if(mix->objectlock) { 116bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_mutex_free(mix->objectlock); 117bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix->objectlock = NULL; 118bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 119bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 120bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee //MiVideo object calls the _deinitialize() for frame manager 121bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (mix->framemgr) 122bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 123bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_framemanager_unref(mix->framemgr); 124bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix->framemgr = NULL; 125bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 126bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 127bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (mix->mime_type) 128bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 129bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (mix->mime_type->str) 130bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_string_free(mix->mime_type, TRUE); 131bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee else 132bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_string_free(mix->mime_type, FALSE); 133bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 134bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 135bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (mix->ci_frame_id) 136bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_free (mix->ci_frame_id); 137bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 138bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 139bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (mix->surfacepool) 140bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 141bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_surfacepool_deinitialize(mix->surfacepool); 142bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_surfacepool_unref(mix->surfacepool); 143bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix->surfacepool = NULL; 144bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 145bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 146bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 147bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee /* TODO: cleanup here */ 148bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 149bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee /* Chain up parent */ 150bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (parent_class->finalize) { 151bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee parent_class->finalize(obj); 152bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 153bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 154bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 155bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMixVideoFormatEnc * 156bd8388b4555645b3d29abc6a94c303638064d69awonjong.leemix_videoformatenc_ref(MixVideoFormatEnc * mix) { 157bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return (MixVideoFormatEnc *) g_object_ref(G_OBJECT(mix)); 158bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 159bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 160bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* Default vmethods implementation */ 161bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic MIX_RESULT mix_videofmtenc_getcaps_default(MixVideoFormatEnc *mix, 162bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee GString *msg) { 163bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_V( "Begin\n"); 164bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_SUCCESS; 165bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 166bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 167bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic MIX_RESULT mix_videofmtenc_initialize_default(MixVideoFormatEnc *mix, 168bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixVideoConfigParamsEnc * config_params_enc, 169bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixFrameManager * frame_mgr, 170bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixBufferPool * input_buf_pool, 171bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixSurfacePool ** surface_pool, 172bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee VADisplay va_display) { 173bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 174bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_V( "Begin\n"); 175bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 176bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (mix == NULL ||config_params_enc == NULL) { 177bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_E( 178bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee "!mix || config_params_enc == NULL\n"); 179bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_NULL_PTR; 180bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 181bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 182bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 183bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MIX_RESULT ret = MIX_RESULT_SUCCESS; 184bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 185bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee //TODO check return values of getter fns for config_params 186bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 187bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_mutex_lock(mix->objectlock); 188bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 189bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix->framemgr = frame_mgr; 190bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_framemanager_ref(mix->framemgr); 191bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 192bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix->va_display = va_display; 193bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 194bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_V( 195bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee "Start to get properities from parent params\n"); 196bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 197bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee /* get properties from param (parent) Object*/ 198bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = mix_videoconfigparamsenc_get_bit_rate (config_params_enc, 199bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee &(mix->bitrate)); 200bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (ret != MIX_RESULT_SUCCESS) { 201bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee //TODO cleanup 202bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_E( 203bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee "Failed to mix_videoconfigparamsenc_get_bps\n"); 204bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_mutex_unlock(mix->objectlock); 205bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_FAIL; 206bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 207bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 208bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = mix_videoconfigparamsenc_get_frame_rate (config_params_enc, 209bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee &(mix->frame_rate_num), &(mix->frame_rate_denom)); 210bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 211bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (ret != MIX_RESULT_SUCCESS) { 212bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee //TODO cleanup 213bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_E( 214bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee "Failed to mix_videoconfigparamsenc_get_frame_rate\n"); 215bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_mutex_unlock(mix->objectlock); 216bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_FAIL; 217bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 218bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 219bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = mix_videoconfigparamsenc_get_init_qp (config_params_enc, 220bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee &(mix->initial_qp)); 221bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 222bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (ret != MIX_RESULT_SUCCESS) { 223bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee //TODO cleanup 224bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 225bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_E( 226bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee "Failed to mix_videoconfigparamsenc_get_init_qp\n"); 227bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_mutex_unlock(mix->objectlock); 228bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_FAIL; 229bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 230bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 231bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 232bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = mix_videoconfigparamsenc_get_min_qp (config_params_enc, 233bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee &(mix->min_qp)); 234bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 235bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (ret != MIX_RESULT_SUCCESS) { 236bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee //TODO cleanup 237bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 238bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_E( 239bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee "Failed to mix_videoconfigparamsenc_get_min_qp\n"); 240bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_mutex_unlock(mix->objectlock); 241bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_FAIL; 242bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 243bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 244bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = mix_videoconfigparamsenc_get_intra_period (config_params_enc, 245bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee &(mix->intra_period)); 246bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 247bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (ret != MIX_RESULT_SUCCESS) { 248bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee //TODO cleanup 249bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 250bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_E( 251bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee "Failed to mix_videoconfigparamsenc_get_intra_period\n"); 252bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_mutex_unlock(mix->objectlock); 253bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_FAIL; 254bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 255bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 256bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = mix_videoconfigparamsenc_get_picture_res (config_params_enc, 257bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee &(mix->picture_width), &(mix->picture_height)); 258bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 259bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (ret != MIX_RESULT_SUCCESS) { 260bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee //TODO cleanup 261bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 262bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_E( 263bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee "Failed to mix_videoconfigparamsenc_get_picture_res\n"); 264bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_mutex_unlock(mix->objectlock); 265bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_FAIL; 266bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 267bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 268bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = mix_videoconfigparamsenc_get_share_buf_mode (config_params_enc, 269bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee &(mix->share_buf_mode)); 270bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 271bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (ret != MIX_RESULT_SUCCESS) { 272bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee //TODO cleanup 273bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 274bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_E( 275bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee "Failed to mix_videoconfigparamsenc_get_share_buf_mode\n"); 276bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_mutex_unlock(mix->objectlock); 277bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_FAIL; 278bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 279bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 280bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 281bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = mix_videoconfigparamsenc_get_ci_frame_info (config_params_enc, 282bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee &(mix->ci_frame_id), &(mix->ci_frame_num)); 283bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 284bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (ret != MIX_RESULT_SUCCESS) { 285bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee //TODO cleanup 286bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 287bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_E( 288bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee "Failed to mix_videoconfigparamsenc_get_ci_frame_info\n"); 289bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_mutex_unlock(mix->objectlock); 290bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_FAIL; 291bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 292bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 293bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 294bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = mix_videoconfigparamsenc_get_drawable (config_params_enc, 295bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee &(mix->drawable)); 296bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 297bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (ret != MIX_RESULT_SUCCESS) { 298bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee //TODO cleanup 299bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 300bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_E( 301bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee "Failed to mix_videoconfigparamsenc_get_drawable\n"); 302bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_mutex_unlock(mix->objectlock); 303bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_FAIL; 304bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 305bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 306bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = mix_videoconfigparamsenc_get_need_display (config_params_enc, 307bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee &(mix->need_display)); 308bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 309bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (ret != MIX_RESULT_SUCCESS) { 310bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee //TODO cleanup 311bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 312bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_E( 313bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee "Failed to mix_videoconfigparamsenc_get_drawable\n"); 314bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_mutex_unlock(mix->objectlock); 315bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_FAIL; 316bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 317bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 318bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = mix_videoconfigparamsenc_get_rate_control (config_params_enc, 319bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee &(mix->va_rcmode)); 320bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 321bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (ret != MIX_RESULT_SUCCESS) { 322bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee //TODO cleanup 323bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 324bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_E( 325bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee "Failed to mix_videoconfigparamsenc_get_rc_mode\n"); 326bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_mutex_unlock(mix->objectlock); 327bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_FAIL; 328bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 329bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 330bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = mix_videoconfigparamsenc_get_raw_format (config_params_enc, 331bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee &(mix->va_format)); 332bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 333bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (ret != MIX_RESULT_SUCCESS) { 334bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee //TODO cleanup 335bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 336bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_E( 337bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee "Failed to mix_videoconfigparamsenc_get_format\n"); 338bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_mutex_unlock(mix->objectlock); 339bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_FAIL; 340bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 341bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 342bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = mix_videoconfigparamsenc_get_profile (config_params_enc, 343bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee (MixProfile *) &(mix->va_profile)); 344bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 345bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (ret != MIX_RESULT_SUCCESS) { 346bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee //TODO cleanup 347bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 348bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_E( 349bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee "Failed to mix_videoconfigparamsenc_get_profile\n"); 350bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_mutex_unlock(mix->objectlock); 351bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_FAIL; 352bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 353bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 354bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 355bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_V( 356bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee "======Video Encode Parent Object properities======:\n"); 357bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 358bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_I( "mix->bitrate = %d\n", 359bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix->bitrate); 360bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_I( "mix->frame_rate = %d\n", 361bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix->frame_rate_denom / mix->frame_rate_denom); 362bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_I( "mix->initial_qp = %d\n", 363bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix->initial_qp); 364bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_I( "mix->min_qp = %d\n", 365bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix->min_qp); 366bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_I( "mix->intra_period = %d\n", 367bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix->intra_period); 368bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_I( "mix->picture_width = %d\n", 369bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix->picture_width); 370bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_I( "mix->picture_height = %d\n", 371bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix->picture_height); 372bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_I( "mix->share_buf_mode = %d\n", 373bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix->share_buf_mode); 374bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_I( "mix->ci_frame_id = 0x%08x\n", 375bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix->ci_frame_id); 376bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_I( "mix->ci_frame_num = %d\n", 377bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix->ci_frame_num); 378bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_I( "mix->drawable = 0x%08x\n", 379bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix->drawable); 380bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_I( "mix->need_display = %d\n", 381bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix->need_display); 382bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_I( "mix->va_format = %d\n", 383bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix->va_format); 384bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_I( "mix->va_profile = %d\n", 385bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix->va_profile); 386bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_I( "mix->va_rcmode = %d\n\n", 387bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix->va_rcmode); 388bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 389bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee g_mutex_unlock(mix->objectlock); 390bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 391bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_V( "end\n"); 392bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 393bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_SUCCESS; 394bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 395bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 396bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic MIX_RESULT mix_videofmtenc_encode_default (MixVideoFormatEnc *mix, MixBuffer * bufin[], 397bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee gint bufincnt, MixIOVec * iovout[], gint iovoutcnt, 398bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixVideoEncodeParams * encode_params) { 399bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_SUCCESS; 400bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 401bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 402bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic MIX_RESULT mix_videofmtenc_flush_default(MixVideoFormatEnc *mix) { 403bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_SUCCESS; 404bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 405bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 406bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic MIX_RESULT mix_videofmtenc_eos_default(MixVideoFormatEnc *mix) { 407bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_SUCCESS; 408bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 409bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 410bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic MIX_RESULT mix_videofmtenc_deinitialize_default(MixVideoFormatEnc *mix) { 411bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 412bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee //TODO decide whether to put any of the teardown from _finalize() here 413bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 414bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_SUCCESS; 415bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 416bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 417bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic MIX_RESULT mix_videofmtenc_get_max_coded_buffer_size_default( 418bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixVideoFormatEnc *mix, guint *max_size) { 419bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 420bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 421bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_SUCCESS; 422bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 423bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 424bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* mixvideoformatenc class methods implementation */ 425bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 426bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMIX_RESULT mix_videofmtenc_getcaps(MixVideoFormatEnc *mix, GString *msg) { 427bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixVideoFormatEncClass *klass = MIX_VIDEOFORMATENC_GET_CLASS(mix); 428bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 429bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee LOG_V( "Begin\n"); 430bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 431bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (klass->getcaps) { 432bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return klass->getcaps(mix, msg); 433bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 434bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_NOTIMPL; 435bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 436bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 437bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMIX_RESULT mix_videofmtenc_initialize(MixVideoFormatEnc *mix, 438bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixVideoConfigParamsEnc * config_params_enc, 439bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixFrameManager * frame_mgr, 440bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixBufferPool * input_buf_pool, 441bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixSurfacePool ** surface_pool, 442bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee VADisplay va_display) { 443bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixVideoFormatEncClass *klass = MIX_VIDEOFORMATENC_GET_CLASS(mix); 444bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 445bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee /*frame_mgr and input_buf_pool is reserved for future use*/ 446bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (klass->initialize) { 447bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return klass->initialize(mix, config_params_enc, frame_mgr, 448bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee input_buf_pool, surface_pool, va_display); 449bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 450bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 451bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_FAIL; 452bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 453bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 454bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 455bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMIX_RESULT mix_videofmtenc_encode(MixVideoFormatEnc *mix, MixBuffer * bufin[], 456bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee gint bufincnt, MixIOVec * iovout[], gint iovoutcnt, 457bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixVideoEncodeParams * encode_params) { 458bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 459bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixVideoFormatEncClass *klass = MIX_VIDEOFORMATENC_GET_CLASS(mix); 460bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (klass->encode) { 461bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return klass->encode(mix, bufin, bufincnt, iovout, iovoutcnt, encode_params); 462bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 463bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 464bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_FAIL; 465bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 466bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 467bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMIX_RESULT mix_videofmtenc_flush(MixVideoFormatEnc *mix) { 468bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixVideoFormatEncClass *klass = MIX_VIDEOFORMATENC_GET_CLASS(mix); 469bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (klass->flush) { 470bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return klass->flush(mix); 471bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 472bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 473bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_FAIL; 474bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 475bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 476bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMIX_RESULT mix_videofmtenc_eos(MixVideoFormatEnc *mix) { 477bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixVideoFormatEncClass *klass = MIX_VIDEOFORMATENC_GET_CLASS(mix); 478bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (klass->eos) { 479bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return klass->eos(mix); 480bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 481bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 482bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_FAIL; 483bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 484bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 485bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMIX_RESULT mix_videofmtenc_deinitialize(MixVideoFormatEnc *mix) { 486bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixVideoFormatEncClass *klass = MIX_VIDEOFORMATENC_GET_CLASS(mix); 487bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (klass->deinitialize) { 488bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return klass->deinitialize(mix); 489bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 490bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 491bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_FAIL; 492bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 493bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 494bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMIX_RESULT mix_videofmtenc_get_max_coded_buffer_size(MixVideoFormatEnc *mix, guint * max_size) { 495bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 496bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixVideoFormatEncClass *klass = MIX_VIDEOFORMATENC_GET_CLASS(mix); 497bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (klass->encode) { 498bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return klass->getmaxencodedbufsize(mix, max_size); 499bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 500bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 501bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_FAIL; 502bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 503