static void dec_init(MSFilter *f) { DecData *d = (DecData*)ms_new(DecData,1); JNIEnv *jni_env = NULL; JavaVM *jvm = ms_get_jvm(); (*jvm)->AttachCurrentThread(jvm, &jni_env, NULL); d->h264_construct_id = (*jni_env)->GetMethodID(jni_env, h264_codec_class, "<init>", "(IIIII)V"); d->h264_decode_id = (*jni_env)->GetMethodID(jni_env, h264_codec_class, "decode", "([BI[B)I"); d->h264_close_id = (*jni_env)->GetMethodID(jni_env, h264_codec_class, "close", "()V"); d->input_data = (*jni_env)->NewByteArray(jni_env, VIDEO_DEC_MAX_WIDTH*VIDEO_DEC_MAX_HEIGHT*3/2); d->input_data = (*jni_env)->NewGlobalRef(jni_env, d->input_data); d->output_data = (*jni_env)->NewByteArray(jni_env, VIDEO_DEC_MAX_WIDTH*VIDEO_DEC_MAX_HEIGHT*3/2); d->output_data = (*jni_env)->NewGlobalRef(jni_env, d->output_data); (*jvm)->DetachCurrentThread(jvm); d->yuv_msg = NULL; d->sps = NULL; d->pps = NULL; rfc3984_init(&d->unpacker); d->packet_num = 0; d->bitstream_size = VIDEO_DEC_MAX_WIDTH*VIDEO_DEC_MAX_HEIGHT*3/2; d->bitstream = (uint8_t*)ms_malloc0(d->bitstream_size); d->IsFirstImageDec = FALSE; d->IsRecivedFirstIframe = FALSE; d->IsRecivedSps = FALSE; d->IsRecivedPps = FALSE; f->data = d; }
static void dec_init(MSFilter *f){ AMediaFormat *format; AMediaCodec *codec = AMediaCodec_createDecoderByType("video/avc"); DecData *d=ms_new0(DecData,1); d->codec = codec; d->sps=NULL; d->pps=NULL; rfc3984_init(&d->unpacker); d->packet_num=0; d->vsize.width=0; d->vsize.height=0; d->bitstream_size=65536; d->avpf_enabled=FALSE; d->bitstream=ms_malloc0(d->bitstream_size); d->buf_allocator = ms_yuv_buf_allocator_new(); ms_average_fps_init(&d->fps, " H264 decoder: FPS: %f"); format = AMediaFormat_new(); AMediaFormat_setString(format,"mime","video/avc"); //Size mandatory for decoder configuration AMediaFormat_setInt32(format,"width",1920); AMediaFormat_setInt32(format,"height",1080); AMediaCodec_configure(codec, format, NULL, NULL, 0); AMediaCodec_start(codec); AMediaFormat_delete(format); f->data=d; }
static void h264_dec_init(MSFilter *f) { VTH264DecCtx *ctx = ms_new0(VTH264DecCtx, 1); ms_queue_init(&ctx->queue); ms_mutex_init(&ctx->mutex, NULL); ctx->pixbuf_allocator = ms_yuv_buf_allocator_new(); rfc3984_init(&ctx->unpacker); ctx->vsize = MS_VIDEO_SIZE_UNKNOWN; ms_average_fps_init(&ctx->fps, "VideoToolboxDecoder: decoding at %ffps"); ctx->first_image = TRUE; ctx->f = f; f->data = ctx; }
static void dec_init(MSFilter *f){ DecData *d=(DecData*)ms_new(DecData,1); ffmpeg_init(); d->yuv_msg=NULL; d->sps=NULL; d->pps=NULL; d->sws_ctx=NULL; rfc3984_init(&d->unpacker); d->packet_num=0; dec_open(d); d->outbuf.w=0; d->outbuf.h=0; d->bitstream_size=65536; d->bitstream=(uint8_t *)ms_malloc0(d->bitstream_size); f->data=d; }
static void dec_init(MSFilter *f){ DecData *d=(DecData*)ms_new(DecData,1); ffmpeg_init(); d->yuv_msg=NULL; d->sps=NULL; d->pps=NULL; d->sws_ctx=NULL; rfc3984_init(&d->unpacker); d->packet_num=0; dec_open(d); d->outbuf.w=0; d->outbuf.h=0; d->bitstream_size=65536; d->bitstream=ms_malloc0(d->bitstream_size); d->orig = av_frame_alloc(); if (!d->orig) { ms_error("Could not allocate frame"); } f->data=d; }
static void h264_enc_configure(VTH264EncCtx *ctx) { OSStatus err; const char *error_msg = "Could not initialize the VideoToolbox compresson session"; int max_payload_size = ms_factory_get_payload_max_size(ctx->f->factory); CFNumberRef value; CFMutableDictionaryRef pixbuf_attr = CFDictionaryCreateMutable(NULL, 0, NULL, NULL); int pixel_type = kCVPixelFormatType_420YpCbCr8Planar; value = CFNumberCreate(NULL, kCFNumberIntType, &pixel_type); CFDictionarySetValue(pixbuf_attr, kCVPixelBufferPixelFormatTypeKey, value); err =VTCompressionSessionCreate(NULL, ctx->conf.vsize.width, ctx->conf.vsize.height, kCMVideoCodecType_H264, NULL, pixbuf_attr, NULL, (VTCompressionOutputCallback)h264_enc_output_cb, ctx, &ctx->session); CFRelease(pixbuf_attr); if(err) { ms_error("%s: error code %d", error_msg, err); goto fail; } VTSessionSetProperty(ctx->session, kVTCompressionPropertyKey_ProfileLevel, kVTProfileLevel_H264_Baseline_AutoLevel); VTSessionSetProperty(ctx->session, kVTCompressionPropertyKey_AllowFrameReordering, kCFBooleanFalse); value = CFNumberCreate(NULL, kCFNumberIntType, &ctx->conf.required_bitrate); VTSessionSetProperty(ctx->session, kVTCompressionPropertyKey_AverageBitRate, value); value = CFNumberCreate(NULL, kCFNumberFloatType, &ctx->conf.fps); VTSessionSetProperty(ctx->session, kVTCompressionPropertyKey_ExpectedFrameRate, value); if((err = VTCompressionSessionPrepareToEncodeFrames(ctx->session)) != 0) { ms_error("Could not prepare the VideoToolbox compression session: error code %d", err); goto fail; } rfc3984_init(&ctx->packer_ctx); rfc3984_set_mode(&ctx->packer_ctx, 1); ctx->packer_ctx.maxsz = max_payload_size; ctx->is_configured = TRUE; return; fail: if(ctx->session) CFRelease(ctx->session); }