mirror of
https://github.com/tuxbox-fork-migrations/recycled-ni-libstb-hal.git
synced 2025-08-26 23:12:44 +02:00
rename libeplayer3-arm -> libplayer3
Origin commit data
------------------
Branch: master
Commit: e1b78787fd
Author: max_10 <max_10@gmx.de>
Date: 2019-06-15 (Sat, 15 Jun 2019)
Origin message was:
------------------
- rename libeplayer3-arm -> libplayer3
------------------
No further description and justification available within origin commit message!
------------------
This commit was generated by Migit
This commit is contained in:
95
libeplayer3/container/flv2mpeg4_ffmpeg.c
Normal file
95
libeplayer3/container/flv2mpeg4_ffmpeg.c
Normal file
@@ -0,0 +1,95 @@
|
||||
//
|
||||
// more info
|
||||
// http://forum.doom9.org/archive/index.php/t-157998.html
|
||||
//
|
||||
|
||||
#include "flv2mpeg4/flv2mpeg4.h"
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
flv2mpeg4_CTX *ctx;
|
||||
uint8_t *extradata;
|
||||
int extradatasize;
|
||||
|
||||
Context_t *out_ctx;
|
||||
Track_t *track;
|
||||
} Flv2Mpeg4Context;
|
||||
|
||||
|
||||
static int flv2mpeg4_context_write_packet_cb(void *usr_data, int keyframe, int pts, const uint8_t *buf, int size)
|
||||
{
|
||||
Flv2Mpeg4Context *ctx = usr_data;
|
||||
if (!ctx)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
AudioVideoOut_t avOut;
|
||||
avOut.data = (char *)buf;
|
||||
avOut.len = size;
|
||||
avOut.pts = ctx->track->pts;
|
||||
avOut.dts = ctx->track->dts;
|
||||
avOut.extradata = ctx->extradata;
|
||||
avOut.extralen = ctx->extradatasize;
|
||||
avOut.frameRate = ctx->track->frame_rate;
|
||||
avOut.timeScale = ctx->track->TimeScale;
|
||||
avOut.width = ctx->track->width;
|
||||
avOut.height = ctx->track->height;
|
||||
avOut.type = "video";
|
||||
|
||||
if (Write(ctx->out_ctx->output->video->Write, ctx->out_ctx, &avOut, avOut.pts) < 0)
|
||||
{
|
||||
ffmpeg_err("writing data to video device failed\n");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int flv2mpeg4_context_write_extradata_cb(void *usr_data, int width, int height, int bitrate, const uint8_t *extradata, int extradatasize)
|
||||
{
|
||||
Flv2Mpeg4Context *ctx = usr_data;
|
||||
if (!ctx)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
free(ctx->extradata);
|
||||
ctx->extradata = malloc(extradatasize);
|
||||
memcpy(ctx->extradata, extradata, extradatasize);
|
||||
ctx->extradatasize = extradatasize;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void flv2mpeg4_context_reset(Flv2Mpeg4Context *context)
|
||||
{
|
||||
if (context == NULL || context->ctx == NULL)
|
||||
return;
|
||||
|
||||
flv2mpeg4_set_frame(context->ctx, 0, 0);
|
||||
}
|
||||
|
||||
static int flv2mpeg4_write_packet(Context_t *out_ctx, Flv2Mpeg4Context *mpeg4p2_ctx, Track_t *track, int cAVIdx, int64_t *pts_current, int64_t *pts_latest, AVPacket *pkt)
|
||||
{
|
||||
if (!mpeg4p2_ctx->ctx)
|
||||
{
|
||||
mpeg4p2_ctx->ctx = flv2mpeg4_init_ctx(mpeg4p2_ctx, track->width, track->height, flv2mpeg4_context_write_packet_cb, flv2mpeg4_context_write_extradata_cb);
|
||||
flv2mpeg4_prepare_extra_data(mpeg4p2_ctx->ctx);
|
||||
}
|
||||
|
||||
*pts_current = track->pts = calcPts(cAVIdx, track->stream, pkt->pts);
|
||||
if ((*pts_current > *pts_latest) && (*pts_current != INVALID_PTS_VALUE))
|
||||
{
|
||||
*pts_latest = *pts_current;
|
||||
}
|
||||
track->dts = calcPts(cAVIdx, track->stream, pkt->dts);
|
||||
|
||||
mpeg4p2_ctx->out_ctx = out_ctx;
|
||||
mpeg4p2_ctx->track = track;
|
||||
|
||||
uint32_t time_ms = (uint32_t)(track->pts / 90);
|
||||
|
||||
return flv2mpeg4_process_flv_packet(mpeg4p2_ctx->ctx, 0, pkt->data, pkt->size, time_ms);
|
||||
}
|
||||
|
Reference in New Issue
Block a user