forked from FFmpeg/FFmpeg
Merge remote-tracking branch 'qatar/master'
* qatar/master: (22 commits) aacdec: Fix PS in ADTS. avconv: Consistently use PIX_FMT_NONE. dsputil: use cpuflags in x86 emu_edge_core dsputil: use movups instead of movdqu in ff_emu_edge_core_sse() wma: initialize prev_block_len_bits, next_block_len_bits, and block_len_bits. mov: Remove some redundant and obsolete comments. Add libavutil/mathematics.h #includes for INFINITY doxy: structure libavformat groups doxy: introduce an empty structure in libavcodec doxy: provide a start page and document libavutil doxy: cleanup pixfmt.h regtest: split video encode/decode tests into individual targets ARM: add explicit .arch and .fpu directives to asm.S pthread: do not touch has_b_frames avconv: cleanup the transcoding loop in output_packet(). avconv: split subtitle transcoding out of output_packet(). avconv: split video transcoding out of output_packet(). avconv: split audio transcoding out of output_packet(). avconv: reindent. avconv: move streamcopy-only code out of decoding loop. ... Conflicts: avconv.c libavcodec/aaccoder.c libavcodec/pthread.c libavcodec/version.h libavutil/audioconvert.h libavutil/avutil.h libavutil/mem.h tests/ref/vsynth1/dv tests/ref/vsynth1/mpeg2thread tests/ref/vsynth2/dv tests/ref/vsynth2/mpeg2thread Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
0b9a69f244
64 changed files with 1395 additions and 871 deletions
700
avconv.c
700
avconv.c
|
@ -722,11 +722,11 @@ static void choose_pixel_fmt(AVStream *st, AVCodec *codec)
|
|||
p= (const enum PixelFormat[]){PIX_FMT_YUVJ420P, PIX_FMT_YUVJ422P, PIX_FMT_YUVJ444P, PIX_FMT_YUV420P, PIX_FMT_YUV422P, PIX_FMT_YUV444P, PIX_FMT_BGRA, PIX_FMT_NONE};
|
||||
}
|
||||
}
|
||||
for(; *p!=-1; p++){
|
||||
for (; *p != PIX_FMT_NONE; p++) {
|
||||
if(*p == st->codec->pix_fmt)
|
||||
break;
|
||||
}
|
||||
if (*p == -1) {
|
||||
if (*p == PIX_FMT_NONE) {
|
||||
if(st->codec->pix_fmt != PIX_FMT_NONE)
|
||||
av_log(NULL, AV_LOG_WARNING,
|
||||
"Incompatible pixel format '%s' for codec '%s', auto-selecting format '%s'\n",
|
||||
|
@ -1596,26 +1596,338 @@ static void flush_encoders(OutputStream *ost_table, int nb_ostreams)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Check whether a packet from ist should be written into ost at this time
|
||||
*/
|
||||
static int check_output_constraints(InputStream *ist, OutputStream *ost)
|
||||
{
|
||||
OutputFile *of = &output_files[ost->file_index];
|
||||
int ist_index = ist - input_streams;
|
||||
|
||||
if (ost->source_index != ist_index)
|
||||
return 0;
|
||||
|
||||
if (of->start_time && ist->pts < of->start_time)
|
||||
return 0;
|
||||
|
||||
if (of->recording_time != INT64_MAX &&
|
||||
av_compare_ts(ist->pts, AV_TIME_BASE_Q, of->recording_time + of->start_time,
|
||||
(AVRational){1, 1000000}) >= 0) {
|
||||
ost->is_past_recording_time = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void do_streamcopy(InputStream *ist, OutputStream *ost, const AVPacket *pkt)
|
||||
{
|
||||
OutputFile *of = &output_files[ost->file_index];
|
||||
int64_t ost_tb_start_time = av_rescale_q(of->start_time, AV_TIME_BASE_Q, ost->st->time_base);
|
||||
AVPicture pict;
|
||||
AVPacket opkt;
|
||||
|
||||
av_init_packet(&opkt);
|
||||
|
||||
if ((!ost->frame_number && !(pkt->flags & AV_PKT_FLAG_KEY)) &&
|
||||
!ost->copy_initial_nonkeyframes)
|
||||
return;
|
||||
|
||||
/* force the input stream PTS */
|
||||
if (ost->st->codec->codec_type == AVMEDIA_TYPE_AUDIO)
|
||||
audio_size += pkt->size;
|
||||
else if (ost->st->codec->codec_type == AVMEDIA_TYPE_VIDEO) {
|
||||
video_size += pkt->size;
|
||||
ost->sync_opts++;
|
||||
}
|
||||
|
||||
opkt.stream_index = ost->index;
|
||||
if (pkt->pts != AV_NOPTS_VALUE)
|
||||
opkt.pts = av_rescale_q(pkt->pts, ist->st->time_base, ost->st->time_base) - ost_tb_start_time;
|
||||
else
|
||||
opkt.pts = AV_NOPTS_VALUE;
|
||||
|
||||
if (pkt->dts == AV_NOPTS_VALUE)
|
||||
opkt.dts = av_rescale_q(ist->pts, AV_TIME_BASE_Q, ost->st->time_base);
|
||||
else
|
||||
opkt.dts = av_rescale_q(pkt->dts, ist->st->time_base, ost->st->time_base);
|
||||
opkt.dts -= ost_tb_start_time;
|
||||
|
||||
opkt.duration = av_rescale_q(pkt->duration, ist->st->time_base, ost->st->time_base);
|
||||
opkt.flags = pkt->flags;
|
||||
|
||||
//FIXME remove the following 2 lines they shall be replaced by the bitstream filters
|
||||
if( ost->st->codec->codec_id != CODEC_ID_H264
|
||||
&& ost->st->codec->codec_id != CODEC_ID_MPEG1VIDEO
|
||||
&& ost->st->codec->codec_id != CODEC_ID_MPEG2VIDEO
|
||||
) {
|
||||
if (av_parser_change(ist->st->parser, ost->st->codec, &opkt.data, &opkt.size, pkt->data, pkt->size, pkt->flags & AV_PKT_FLAG_KEY))
|
||||
opkt.destruct = av_destruct_packet;
|
||||
} else {
|
||||
opkt.data = pkt->data;
|
||||
opkt.size = pkt->size;
|
||||
}
|
||||
if (of->ctx->oformat->flags & AVFMT_RAWPICTURE) {
|
||||
/* store AVPicture in AVPacket, as expected by the output format */
|
||||
avpicture_fill(&pict, opkt.data, ost->st->codec->pix_fmt, ost->st->codec->width, ost->st->codec->height);
|
||||
opkt.data = (uint8_t *)&pict;
|
||||
opkt.size = sizeof(AVPicture);
|
||||
opkt.flags |= AV_PKT_FLAG_KEY;
|
||||
}
|
||||
|
||||
write_frame(of->ctx, &opkt, ost->st->codec, ost->bitstream_filters);
|
||||
ost->st->codec->frame_number++;
|
||||
ost->frame_number++;
|
||||
av_free_packet(&opkt);
|
||||
}
|
||||
|
||||
static void rate_emu_sleep(InputStream *ist)
|
||||
{
|
||||
if (input_files[ist->file_index].rate_emu) {
|
||||
int64_t pts = av_rescale(ist->pts, 1000000, AV_TIME_BASE);
|
||||
int64_t now = av_gettime() - ist->start;
|
||||
if (pts > now)
|
||||
usleep(pts - now);
|
||||
}
|
||||
}
|
||||
|
||||
static int transcode_audio(InputStream *ist, AVPacket *pkt, int *got_output)
|
||||
{
|
||||
static unsigned int samples_size = 0;
|
||||
int bps = av_get_bytes_per_sample(ist->st->codec->sample_fmt);
|
||||
uint8_t *decoded_data_buf = NULL;
|
||||
int decoded_data_size = 0;
|
||||
int i, ret;
|
||||
|
||||
if (pkt && samples_size < FFMAX(pkt->size * bps, AVCODEC_MAX_AUDIO_FRAME_SIZE)) {
|
||||
av_free(samples);
|
||||
samples_size = FFMAX(pkt->size * bps, AVCODEC_MAX_AUDIO_FRAME_SIZE);
|
||||
samples = av_malloc(samples_size);
|
||||
}
|
||||
decoded_data_size = samples_size;
|
||||
|
||||
ret = avcodec_decode_audio3(ist->st->codec, samples, &decoded_data_size,
|
||||
pkt);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
pkt->data += ret;
|
||||
pkt->size -= ret;
|
||||
*got_output = decoded_data_size > 0;
|
||||
|
||||
/* Some bug in mpeg audio decoder gives */
|
||||
/* decoded_data_size < 0, it seems they are overflows */
|
||||
if (!*got_output) {
|
||||
/* no audio frame */
|
||||
return 0;
|
||||
}
|
||||
|
||||
decoded_data_buf = (uint8_t *)samples;
|
||||
ist->next_pts += ((int64_t)AV_TIME_BASE/bps * decoded_data_size) /
|
||||
(ist->st->codec->sample_rate * ist->st->codec->channels);
|
||||
|
||||
// preprocess audio (volume)
|
||||
if (audio_volume != 256) {
|
||||
switch (ist->st->codec->sample_fmt) {
|
||||
case AV_SAMPLE_FMT_U8:
|
||||
{
|
||||
uint8_t *volp = samples;
|
||||
for (i = 0; i < (decoded_data_size / sizeof(*volp)); i++) {
|
||||
int v = (((*volp - 128) * audio_volume + 128) >> 8) + 128;
|
||||
*volp++ = av_clip_uint8(v);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case AV_SAMPLE_FMT_S16:
|
||||
{
|
||||
int16_t *volp = samples;
|
||||
for (i = 0; i < (decoded_data_size / sizeof(*volp)); i++) {
|
||||
int v = ((*volp) * audio_volume + 128) >> 8;
|
||||
*volp++ = av_clip_int16(v);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case AV_SAMPLE_FMT_S32:
|
||||
{
|
||||
int32_t *volp = samples;
|
||||
for (i = 0; i < (decoded_data_size / sizeof(*volp)); i++) {
|
||||
int64_t v = (((int64_t)*volp * audio_volume + 128) >> 8);
|
||||
*volp++ = av_clipl_int32(v);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case AV_SAMPLE_FMT_FLT:
|
||||
{
|
||||
float *volp = samples;
|
||||
float scale = audio_volume / 256.f;
|
||||
for (i = 0; i < (decoded_data_size / sizeof(*volp)); i++) {
|
||||
*volp++ *= scale;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case AV_SAMPLE_FMT_DBL:
|
||||
{
|
||||
double *volp = samples;
|
||||
double scale = audio_volume / 256.;
|
||||
for (i = 0; i < (decoded_data_size / sizeof(*volp)); i++) {
|
||||
*volp++ *= scale;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
av_log(NULL, AV_LOG_FATAL,
|
||||
"Audio volume adjustment on sample format %s is not supported.\n",
|
||||
av_get_sample_fmt_name(ist->st->codec->sample_fmt));
|
||||
exit_program(1);
|
||||
}
|
||||
}
|
||||
|
||||
rate_emu_sleep(ist);
|
||||
|
||||
for (i = 0; i < nb_output_streams; i++) {
|
||||
OutputStream *ost = &output_streams[i];
|
||||
|
||||
if (!check_output_constraints(ist, ost) || !ost->encoding_needed)
|
||||
continue;
|
||||
do_audio_out(output_files[ost->file_index].ctx, ost, ist,
|
||||
decoded_data_buf, decoded_data_size);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int transcode_video(InputStream *ist, AVPacket *pkt, int *got_output, int64_t *pkt_pts)
|
||||
{
|
||||
AVFrame *decoded_frame, *filtered_frame = NULL;
|
||||
void *buffer_to_free = NULL;
|
||||
int i, ret = 0;
|
||||
float quality;
|
||||
#if CONFIG_AVFILTER
|
||||
int frame_available = 1;
|
||||
#endif
|
||||
|
||||
if (!(decoded_frame = avcodec_alloc_frame()))
|
||||
return AVERROR(ENOMEM);
|
||||
pkt->pts = *pkt_pts;
|
||||
pkt->dts = ist->pts;
|
||||
*pkt_pts = AV_NOPTS_VALUE;
|
||||
|
||||
ret = avcodec_decode_video2(ist->st->codec,
|
||||
decoded_frame, got_output, pkt);
|
||||
if (ret < 0)
|
||||
goto fail;
|
||||
|
||||
quality = same_quant ? decoded_frame->quality : 0;
|
||||
if (!*got_output) {
|
||||
/* no picture yet */
|
||||
av_freep(&decoded_frame);
|
||||
return 0;
|
||||
}
|
||||
ist->next_pts = ist->pts = decoded_frame->best_effort_timestamp;
|
||||
if (ist->st->codec->time_base.num != 0) {
|
||||
int ticks = ist->st->parser ? ist->st->parser->repeat_pict + 1 :
|
||||
ist->st->codec->ticks_per_frame;
|
||||
ist->next_pts += ((int64_t)AV_TIME_BASE *
|
||||
ist->st->codec->time_base.num * ticks) /
|
||||
ist->st->codec->time_base.den;
|
||||
}
|
||||
pkt->size = 0;
|
||||
pre_process_video_frame(ist, (AVPicture *)decoded_frame, &buffer_to_free);
|
||||
|
||||
rate_emu_sleep(ist);
|
||||
|
||||
for (i = 0; i < nb_output_streams; i++) {
|
||||
OutputStream *ost = &output_streams[i];
|
||||
int frame_size;
|
||||
|
||||
if (!check_output_constraints(ist, ost) || !ost->encoding_needed)
|
||||
continue;
|
||||
|
||||
#if CONFIG_AVFILTER
|
||||
if (ost->input_video_filter) {
|
||||
if (!decoded_frame->sample_aspect_ratio.num)
|
||||
decoded_frame->sample_aspect_ratio = ist->st->sample_aspect_ratio;
|
||||
decoded_frame->pts = ist->pts;
|
||||
|
||||
av_vsrc_buffer_add_frame(ost->input_video_filter, decoded_frame, AV_VSRC_BUF_FLAG_OVERWRITE);
|
||||
if (!(filtered_frame = avcodec_alloc_frame())) {
|
||||
ret = AVERROR(ENOMEM);
|
||||
goto fail;
|
||||
}
|
||||
frame_available = avfilter_poll_frame(ost->output_video_filter->inputs[0]);
|
||||
}
|
||||
while (frame_available) {
|
||||
if (ost->output_video_filter) {
|
||||
AVRational ist_pts_tb = ost->output_video_filter->inputs[0]->time_base;
|
||||
if (av_buffersink_get_buffer_ref(ost->output_video_filter, &ost->picref, 0) < 0)
|
||||
goto cont;
|
||||
if (ost->picref) {
|
||||
avfilter_fill_frame_from_video_buffer_ref(filtered_frame, ost->picref);
|
||||
ist->pts = av_rescale_q(ost->picref->pts, ist_pts_tb, AV_TIME_BASE_Q);
|
||||
}
|
||||
}
|
||||
if (ost->picref->video && !ost->frame_aspect_ratio)
|
||||
ost->st->codec->sample_aspect_ratio = ost->picref->video->sample_aspect_ratio;
|
||||
#else
|
||||
filtered_frame = decoded_frame;
|
||||
#endif
|
||||
|
||||
do_video_out(output_files[ost->file_index].ctx, ost, ist, filtered_frame, &frame_size,
|
||||
same_quant ? quality : ost->st->codec->global_quality);
|
||||
if (vstats_filename && frame_size)
|
||||
do_video_stats(output_files[ost->file_index].ctx, ost, frame_size);
|
||||
#if CONFIG_AVFILTER
|
||||
cont:
|
||||
frame_available = ost->output_video_filter && avfilter_poll_frame(ost->output_video_filter->inputs[0]);
|
||||
if (ost->picref)
|
||||
avfilter_unref_buffer(ost->picref);
|
||||
}
|
||||
av_freep(&filtered_frame);
|
||||
#endif
|
||||
}
|
||||
|
||||
fail:
|
||||
av_free(buffer_to_free);
|
||||
av_freep(&decoded_frame);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int transcode_subtitles(InputStream *ist, AVPacket *pkt, int *got_output)
|
||||
{
|
||||
AVSubtitle subtitle;
|
||||
int i, ret = avcodec_decode_subtitle2(ist->st->codec,
|
||||
&subtitle, got_output, pkt);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
if (!*got_output)
|
||||
return 0;
|
||||
|
||||
pkt->size = 0;
|
||||
|
||||
rate_emu_sleep(ist);
|
||||
|
||||
for (i = 0; i < nb_output_streams; i++) {
|
||||
OutputStream *ost = &output_streams[i];
|
||||
|
||||
if (!check_output_constraints(ist, ost) || !ost->encoding_needed)
|
||||
continue;
|
||||
|
||||
do_subtitle_out(output_files[ost->file_index].ctx, ost, ist, &subtitle, pkt->pts);
|
||||
}
|
||||
|
||||
avsubtitle_free(&subtitle);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* pkt = NULL means EOF (needed to flush decoder buffers) */
|
||||
static int output_packet(InputStream *ist, int ist_index,
|
||||
OutputStream *ost_table, int nb_ostreams,
|
||||
const AVPacket *pkt)
|
||||
{
|
||||
AVFormatContext *os;
|
||||
OutputStream *ost;
|
||||
int ret = 0, i;
|
||||
int got_output;
|
||||
void *buffer_to_free = NULL;
|
||||
static unsigned int samples_size= 0;
|
||||
AVSubtitle subtitle, *subtitle_to_free;
|
||||
int64_t pkt_pts = AV_NOPTS_VALUE;
|
||||
#if CONFIG_AVFILTER
|
||||
int frame_available;
|
||||
#endif
|
||||
float quality;
|
||||
|
||||
AVPacket avpkt;
|
||||
int bps = av_get_bytes_per_sample(ist->st->codec->sample_fmt);
|
||||
|
||||
if(ist->next_pts == AV_NOPTS_VALUE)
|
||||
ist->next_pts= ist->pts;
|
||||
|
@ -1636,10 +1948,7 @@ static int output_packet(InputStream *ist, int ist_index,
|
|||
pkt_pts = av_rescale_q(pkt->pts, ist->st->time_base, AV_TIME_BASE_Q);
|
||||
|
||||
//while we have more to decode or while the decoder did output something on EOF
|
||||
while (avpkt.size > 0 || (!pkt && got_output)) {
|
||||
uint8_t *data_buf, *decoded_data_buf;
|
||||
int data_size, decoded_data_size;
|
||||
AVFrame *decoded_frame, *filtered_frame;
|
||||
while (ist->decoding_needed && (avpkt.size > 0 || (!pkt && got_output))) {
|
||||
handle_eof:
|
||||
ist->pts= ist->next_pts;
|
||||
|
||||
|
@ -1648,330 +1957,57 @@ static int output_packet(InputStream *ist, int ist_index,
|
|||
"Multiple frames in a packet from stream %d\n", pkt->stream_index);
|
||||
ist->showed_multi_packet_warning=1;
|
||||
|
||||
/* decode the packet if needed */
|
||||
decoded_frame = filtered_frame = NULL;
|
||||
decoded_data_buf = NULL; /* fail safe */
|
||||
decoded_data_size= 0;
|
||||
data_buf = avpkt.data;
|
||||
data_size = avpkt.size;
|
||||
subtitle_to_free = NULL;
|
||||
if (ist->decoding_needed) {
|
||||
switch(ist->st->codec->codec_type) {
|
||||
case AVMEDIA_TYPE_AUDIO:{
|
||||
if(pkt && samples_size < FFMAX(pkt->size * bps, AVCODEC_MAX_AUDIO_FRAME_SIZE)) {
|
||||
samples_size = FFMAX(pkt->size * bps, AVCODEC_MAX_AUDIO_FRAME_SIZE);
|
||||
av_free(samples);
|
||||
samples= av_malloc(samples_size);
|
||||
}
|
||||
decoded_data_size= samples_size;
|
||||
/* XXX: could avoid copy if PCM 16 bits with same
|
||||
endianness as CPU */
|
||||
ret = avcodec_decode_audio3(ist->st->codec, samples, &decoded_data_size,
|
||||
&avpkt);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
avpkt.data += ret;
|
||||
avpkt.size -= ret;
|
||||
data_size = ret;
|
||||
got_output = decoded_data_size > 0;
|
||||
/* Some bug in mpeg audio decoder gives */
|
||||
/* decoded_data_size < 0, it seems they are overflows */
|
||||
if (!got_output) {
|
||||
/* no audio frame */
|
||||
continue;
|
||||
}
|
||||
decoded_data_buf = (uint8_t *)samples;
|
||||
ist->next_pts += ((int64_t)AV_TIME_BASE/bps * decoded_data_size) /
|
||||
(ist->st->codec->sample_rate * ist->st->codec->channels);
|
||||
break;}
|
||||
case AVMEDIA_TYPE_VIDEO:
|
||||
if (!(decoded_frame = avcodec_alloc_frame()))
|
||||
return AVERROR(ENOMEM);
|
||||
avpkt.pts = pkt_pts;
|
||||
avpkt.dts = ist->pts;
|
||||
pkt_pts = AV_NOPTS_VALUE;
|
||||
|
||||
ret = avcodec_decode_video2(ist->st->codec,
|
||||
decoded_frame, &got_output, &avpkt);
|
||||
quality = same_quant ? decoded_frame->quality : 0;
|
||||
if (ret < 0)
|
||||
goto fail;
|
||||
if (!got_output) {
|
||||
/* no picture yet */
|
||||
av_freep(&decoded_frame);
|
||||
goto discard_packet;
|
||||
}
|
||||
ist->next_pts = ist->pts = decoded_frame->best_effort_timestamp;
|
||||
if (ist->st->codec->time_base.num != 0) {
|
||||
int ticks= ist->st->parser ? ist->st->parser->repeat_pict+1 : ist->st->codec->ticks_per_frame;
|
||||
ist->next_pts += ((int64_t)AV_TIME_BASE *
|
||||
ist->st->codec->time_base.num * ticks) /
|
||||
ist->st->codec->time_base.den;
|
||||
}
|
||||
avpkt.size = 0;
|
||||
buffer_to_free = NULL;
|
||||
pre_process_video_frame(ist, (AVPicture *)decoded_frame, &buffer_to_free);
|
||||
break;
|
||||
case AVMEDIA_TYPE_SUBTITLE:
|
||||
ret = avcodec_decode_subtitle2(ist->st->codec,
|
||||
&subtitle, &got_output, &avpkt);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
if (!got_output) {
|
||||
goto discard_packet;
|
||||
}
|
||||
subtitle_to_free = &subtitle;
|
||||
avpkt.size = 0;
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
switch(ist->st->codec->codec_type) {
|
||||
case AVMEDIA_TYPE_AUDIO:
|
||||
ist->next_pts += ((int64_t)AV_TIME_BASE * ist->st->codec->frame_size) /
|
||||
ist->st->codec->sample_rate;
|
||||
break;
|
||||
case AVMEDIA_TYPE_VIDEO:
|
||||
if (ist->st->codec->time_base.num != 0) {
|
||||
int ticks= ist->st->parser ? ist->st->parser->repeat_pict+1 : ist->st->codec->ticks_per_frame;
|
||||
ist->next_pts += ((int64_t)AV_TIME_BASE *
|
||||
ist->st->codec->time_base.num * ticks) /
|
||||
ist->st->codec->time_base.den;
|
||||
}
|
||||
break;
|
||||
}
|
||||
avpkt.size = 0;
|
||||
switch(ist->st->codec->codec_type) {
|
||||
case AVMEDIA_TYPE_AUDIO:
|
||||
ret = transcode_audio (ist, &avpkt, &got_output);
|
||||
break;
|
||||
case AVMEDIA_TYPE_VIDEO:
|
||||
ret = transcode_video (ist, &avpkt, &got_output, &pkt_pts);
|
||||
break;
|
||||
case AVMEDIA_TYPE_SUBTITLE:
|
||||
ret = transcode_subtitles(ist, &avpkt, &got_output);
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
|
||||
// preprocess audio (volume)
|
||||
if (ist->st->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
|
||||
if (audio_volume != 256) {
|
||||
switch (ist->st->codec->sample_fmt) {
|
||||
case AV_SAMPLE_FMT_U8:
|
||||
{
|
||||
uint8_t *volp = samples;
|
||||
for (i = 0; i < (decoded_data_size / sizeof(*volp)); i++) {
|
||||
int v = (((*volp - 128) * audio_volume + 128) >> 8) + 128;
|
||||
*volp++ = av_clip_uint8(v);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case AV_SAMPLE_FMT_S16:
|
||||
{
|
||||
int16_t *volp = samples;
|
||||
for (i = 0; i < (decoded_data_size / sizeof(*volp)); i++) {
|
||||
int v = ((*volp) * audio_volume + 128) >> 8;
|
||||
*volp++ = av_clip_int16(v);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case AV_SAMPLE_FMT_S32:
|
||||
{
|
||||
int32_t *volp = samples;
|
||||
for (i = 0; i < (decoded_data_size / sizeof(*volp)); i++) {
|
||||
int64_t v = (((int64_t)*volp * audio_volume + 128) >> 8);
|
||||
*volp++ = av_clipl_int32(v);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case AV_SAMPLE_FMT_FLT:
|
||||
{
|
||||
float *volp = samples;
|
||||
float scale = audio_volume / 256.f;
|
||||
for (i = 0; i < (decoded_data_size / sizeof(*volp)); i++) {
|
||||
*volp++ *= scale;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case AV_SAMPLE_FMT_DBL:
|
||||
{
|
||||
double *volp = samples;
|
||||
double scale = audio_volume / 256.;
|
||||
for (i = 0; i < (decoded_data_size / sizeof(*volp)); i++) {
|
||||
*volp++ *= scale;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
av_log(NULL, AV_LOG_FATAL,
|
||||
"Audio volume adjustment on sample format %s is not supported.\n",
|
||||
av_get_sample_fmt_name(ist->st->codec->sample_fmt));
|
||||
exit_program(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* frame rate emulation */
|
||||
if (input_files[ist->file_index].rate_emu) {
|
||||
int64_t pts = av_rescale(ist->pts, 1000000, AV_TIME_BASE);
|
||||
int64_t now = av_gettime() - ist->start;
|
||||
if (pts > now)
|
||||
usleep(pts - now);
|
||||
}
|
||||
/* if output time reached then transcode raw format,
|
||||
encode packets and output them */
|
||||
for (i = 0; i < nb_ostreams; i++) {
|
||||
OutputFile *of = &output_files[ost_table[i].file_index];
|
||||
int frame_size;
|
||||
|
||||
ost = &ost_table[i];
|
||||
if (ost->source_index != ist_index)
|
||||
continue;
|
||||
|
||||
if (of->start_time && ist->pts < of->start_time)
|
||||
continue;
|
||||
|
||||
if (of->recording_time != INT64_MAX &&
|
||||
av_compare_ts(ist->pts, AV_TIME_BASE_Q, of->recording_time + of->start_time,
|
||||
(AVRational){1, 1000000}) >= 0) {
|
||||
ost->is_past_recording_time = 1;
|
||||
continue;
|
||||
}
|
||||
|
||||
#if CONFIG_AVFILTER
|
||||
if (ist->st->codec->codec_type == AVMEDIA_TYPE_VIDEO &&
|
||||
ost->input_video_filter) {
|
||||
if (!decoded_frame->sample_aspect_ratio.num)
|
||||
decoded_frame->sample_aspect_ratio = ist->st->sample_aspect_ratio;
|
||||
decoded_frame->pts = ist->pts;
|
||||
|
||||
av_vsrc_buffer_add_frame(ost->input_video_filter, decoded_frame, AV_VSRC_BUF_FLAG_OVERWRITE);
|
||||
if (!(filtered_frame = avcodec_alloc_frame())) {
|
||||
ret = AVERROR(ENOMEM);
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
frame_available = ist->st->codec->codec_type != AVMEDIA_TYPE_VIDEO ||
|
||||
!ost->output_video_filter || avfilter_poll_frame(ost->output_video_filter->inputs[0]);
|
||||
while (frame_available) {
|
||||
if (ist->st->codec->codec_type == AVMEDIA_TYPE_VIDEO && ost->output_video_filter) {
|
||||
AVRational ist_pts_tb = ost->output_video_filter->inputs[0]->time_base;
|
||||
if (av_buffersink_get_buffer_ref(ost->output_video_filter, &ost->picref, 0) < 0)
|
||||
goto cont;
|
||||
if (ost->picref) {
|
||||
avfilter_fill_frame_from_video_buffer_ref(filtered_frame, ost->picref);
|
||||
ist->pts = av_rescale_q(ost->picref->pts, ist_pts_tb, AV_TIME_BASE_Q);
|
||||
}
|
||||
}
|
||||
#else
|
||||
filtered_frame = decoded_frame;
|
||||
#endif
|
||||
os = output_files[ost->file_index].ctx;
|
||||
|
||||
/* set the input output pts pairs */
|
||||
//ost->sync_ipts = (double)(ist->pts + input_files[ist->file_index].ts_offset - start_time)/ AV_TIME_BASE;
|
||||
|
||||
if (ost->encoding_needed) {
|
||||
av_assert0(ist->decoding_needed);
|
||||
switch(ost->st->codec->codec_type) {
|
||||
case AVMEDIA_TYPE_AUDIO:
|
||||
do_audio_out(os, ost, ist, decoded_data_buf, decoded_data_size);
|
||||
break;
|
||||
case AVMEDIA_TYPE_VIDEO:
|
||||
#if CONFIG_AVFILTER
|
||||
if (ost->picref->video && !ost->frame_aspect_ratio)
|
||||
ost->st->codec->sample_aspect_ratio = ost->picref->video->sample_aspect_ratio;
|
||||
#endif
|
||||
do_video_out(os, ost, ist, filtered_frame, &frame_size,
|
||||
same_quant ? quality : ost->st->codec->global_quality);
|
||||
if (vstats_filename && frame_size)
|
||||
do_video_stats(os, ost, frame_size);
|
||||
break;
|
||||
case AVMEDIA_TYPE_SUBTITLE:
|
||||
do_subtitle_out(os, ost, ist, &subtitle,
|
||||
pkt->pts);
|
||||
break;
|
||||
default:
|
||||
abort();
|
||||
}
|
||||
} else {
|
||||
AVPicture pict;
|
||||
AVPacket opkt;
|
||||
int64_t ost_tb_start_time= av_rescale_q(of->start_time, AV_TIME_BASE_Q, ost->st->time_base);
|
||||
av_init_packet(&opkt);
|
||||
|
||||
if ((!ost->frame_number && !(pkt->flags & AV_PKT_FLAG_KEY)) &&
|
||||
!ost->copy_initial_nonkeyframes)
|
||||
#if !CONFIG_AVFILTER
|
||||
continue;
|
||||
#else
|
||||
goto cont;
|
||||
#endif
|
||||
|
||||
/* no reencoding needed : output the packet directly */
|
||||
/* force the input stream PTS */
|
||||
|
||||
if(ost->st->codec->codec_type == AVMEDIA_TYPE_AUDIO)
|
||||
audio_size += data_size;
|
||||
else if (ost->st->codec->codec_type == AVMEDIA_TYPE_VIDEO) {
|
||||
video_size += data_size;
|
||||
ost->sync_opts++;
|
||||
}
|
||||
|
||||
opkt.stream_index= ost->index;
|
||||
if(pkt->pts != AV_NOPTS_VALUE)
|
||||
opkt.pts= av_rescale_q(pkt->pts, ist->st->time_base, ost->st->time_base) - ost_tb_start_time;
|
||||
else
|
||||
opkt.pts= AV_NOPTS_VALUE;
|
||||
|
||||
if (pkt->dts == AV_NOPTS_VALUE)
|
||||
opkt.dts = av_rescale_q(ist->pts, AV_TIME_BASE_Q, ost->st->time_base);
|
||||
else
|
||||
opkt.dts = av_rescale_q(pkt->dts, ist->st->time_base, ost->st->time_base);
|
||||
opkt.dts -= ost_tb_start_time;
|
||||
|
||||
opkt.duration = av_rescale_q(pkt->duration, ist->st->time_base, ost->st->time_base);
|
||||
opkt.flags= pkt->flags;
|
||||
|
||||
//FIXME remove the following 2 lines they shall be replaced by the bitstream filters
|
||||
if( ost->st->codec->codec_id != CODEC_ID_H264
|
||||
&& ost->st->codec->codec_id != CODEC_ID_MPEG1VIDEO
|
||||
&& ost->st->codec->codec_id != CODEC_ID_MPEG2VIDEO
|
||||
) {
|
||||
if(av_parser_change(ist->st->parser, ost->st->codec, &opkt.data, &opkt.size, data_buf, data_size, pkt->flags & AV_PKT_FLAG_KEY))
|
||||
opkt.destruct= av_destruct_packet;
|
||||
} else {
|
||||
opkt.data = data_buf;
|
||||
opkt.size = data_size;
|
||||
}
|
||||
|
||||
if (os->oformat->flags & AVFMT_RAWPICTURE) {
|
||||
/* store AVPicture in AVPacket, as expected by the output format */
|
||||
avpicture_fill(&pict, opkt.data, ost->st->codec->pix_fmt, ost->st->codec->width, ost->st->codec->height);
|
||||
opkt.data = (uint8_t *)&pict;
|
||||
opkt.size = sizeof(AVPicture);
|
||||
opkt.flags |= AV_PKT_FLAG_KEY;
|
||||
}
|
||||
write_frame(os, &opkt, ost->st->codec, ost->bitstream_filters);
|
||||
ost->st->codec->frame_number++;
|
||||
ost->frame_number++;
|
||||
av_free_packet(&opkt);
|
||||
}
|
||||
#if CONFIG_AVFILTER
|
||||
cont:
|
||||
frame_available = (ist->st->codec->codec_type == AVMEDIA_TYPE_VIDEO) &&
|
||||
ost->output_video_filter && avfilter_poll_frame(ost->output_video_filter->inputs[0]);
|
||||
if (ost->picref)
|
||||
avfilter_unref_buffer(ost->picref);
|
||||
}
|
||||
av_freep(&filtered_frame);
|
||||
#endif
|
||||
}
|
||||
|
||||
fail:
|
||||
av_free(buffer_to_free);
|
||||
/* XXX: allocate the subtitles in the codec ? */
|
||||
if (subtitle_to_free) {
|
||||
avsubtitle_free(subtitle_to_free);
|
||||
subtitle_to_free = NULL;
|
||||
}
|
||||
av_freep(&decoded_frame);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
if (!got_output) {
|
||||
if (ist->st->codec->codec_type == AVMEDIA_TYPE_AUDIO)
|
||||
continue;
|
||||
goto discard_packet;
|
||||
}
|
||||
}
|
||||
discard_packet:
|
||||
|
||||
/* handle stream copy */
|
||||
if (!ist->decoding_needed) {
|
||||
rate_emu_sleep(ist);
|
||||
switch (ist->st->codec->codec_type) {
|
||||
case AVMEDIA_TYPE_AUDIO:
|
||||
ist->next_pts += ((int64_t)AV_TIME_BASE * ist->st->codec->frame_size) /
|
||||
ist->st->codec->sample_rate;
|
||||
break;
|
||||
case AVMEDIA_TYPE_VIDEO:
|
||||
if (ist->st->codec->time_base.num != 0) {
|
||||
int ticks = ist->st->parser ? ist->st->parser->repeat_pict+1 : ist->st->codec->ticks_per_frame;
|
||||
ist->next_pts += ((int64_t)AV_TIME_BASE *
|
||||
ist->st->codec->time_base.num * ticks) /
|
||||
ist->st->codec->time_base.den;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (i = 0; pkt && i < nb_ostreams; i++) {
|
||||
ost = &ost_table[i];
|
||||
|
||||
if (!check_output_constraints(ist, ost) || ost->encoding_needed)
|
||||
continue;
|
||||
|
||||
do_streamcopy(ist, ost, pkt);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
#include "libswscale/swscale.h"
|
||||
#include "libpostproc/postprocess.h"
|
||||
#include "libavutil/avstring.h"
|
||||
#include "libavutil/mathematics.h"
|
||||
#include "libavutil/parseutils.h"
|
||||
#include "libavutil/pixdesc.h"
|
||||
#include "libavutil/eval.h"
|
||||
|
|
8
configure
vendored
8
configure
vendored
|
@ -1677,7 +1677,7 @@ test_deps _encoder _decoder \
|
|||
asv2 \
|
||||
bmp \
|
||||
dnxhd="dnxhd_1080i dnxhd_720p dnxhd_720p_rd" \
|
||||
dvvideo="dv dv50" \
|
||||
dvvideo="dv dv_411 dv50" \
|
||||
ffv1 \
|
||||
flac \
|
||||
flashsv \
|
||||
|
@ -1690,8 +1690,10 @@ test_deps _encoder _decoder \
|
|||
mjpeg="jpg mjpeg ljpeg" \
|
||||
mp2 \
|
||||
mpeg1video="mpeg mpeg1b" \
|
||||
mpeg2video="mpeg2 mpeg2thread" \
|
||||
mpeg4="mpeg4 mpeg4adv mpeg4nr mpeg4thread error rc" \
|
||||
mpeg2video="mpeg2 mpeg2_422 mpeg2_idct_int mpeg2_ilace mpeg2_ivlc_qprd" \
|
||||
mpeg2video="mpeg2thread mpeg2thread_ilace" \
|
||||
mpeg4="mpeg4 mpeg4_adap mpeg4_qpel mpeg4_qprd mpeg4adv mpeg4nr" \
|
||||
mpeg4="mpeg4thread error rc" \
|
||||
msmpeg4v3=msmpeg4 \
|
||||
msmpeg4v2 \
|
||||
pbm=pbmpipe \
|
||||
|
|
740
ffmpeg.c
740
ffmpeg.c
|
@ -770,11 +770,11 @@ static void choose_pixel_fmt(AVStream *st, AVCodec *codec)
|
|||
p= (const enum PixelFormat[]){PIX_FMT_YUVJ420P, PIX_FMT_YUVJ422P, PIX_FMT_YUVJ444P, PIX_FMT_YUV420P, PIX_FMT_YUV422P, PIX_FMT_YUV444P, PIX_FMT_BGRA, PIX_FMT_NONE};
|
||||
}
|
||||
}
|
||||
for(; *p!=-1; p++){
|
||||
for (; *p != PIX_FMT_NONE; p++) {
|
||||
if(*p == st->codec->pix_fmt)
|
||||
break;
|
||||
}
|
||||
if (*p == -1) {
|
||||
if (*p == PIX_FMT_NONE) {
|
||||
if(st->codec->pix_fmt != PIX_FMT_NONE)
|
||||
av_log(NULL, AV_LOG_WARNING,
|
||||
"Incompatible pixel format '%s' for codec '%s', auto-selecting format '%s'\n",
|
||||
|
@ -1621,27 +1621,360 @@ static void flush_encoders(OutputStream *ost_table, int nb_ostreams)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Check whether a packet from ist should be written into ost at this time
|
||||
*/
|
||||
static int check_output_constraints(InputStream *ist, OutputStream *ost)
|
||||
{
|
||||
OutputFile *of = &output_files[ost->file_index];
|
||||
int ist_index = ist - input_streams;
|
||||
|
||||
if (ost->source_index != ist_index)
|
||||
return 0;
|
||||
|
||||
if (of->start_time && ist->pts < of->start_time)
|
||||
return 0;
|
||||
|
||||
if (of->recording_time != INT64_MAX &&
|
||||
av_compare_ts(ist->pts, AV_TIME_BASE_Q, of->recording_time + of->start_time,
|
||||
(AVRational){1, 1000000}) >= 0) {
|
||||
ost->is_past_recording_time = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void do_streamcopy(InputStream *ist, OutputStream *ost, const AVPacket *pkt)
|
||||
{
|
||||
OutputFile *of = &output_files[ost->file_index];
|
||||
int64_t ost_tb_start_time = av_rescale_q(of->start_time, AV_TIME_BASE_Q, ost->st->time_base);
|
||||
AVPicture pict;
|
||||
AVPacket opkt;
|
||||
|
||||
av_init_packet(&opkt);
|
||||
|
||||
if ((!ost->frame_number && !(pkt->flags & AV_PKT_FLAG_KEY)) &&
|
||||
!ost->copy_initial_nonkeyframes)
|
||||
return;
|
||||
|
||||
/* force the input stream PTS */
|
||||
if (ost->st->codec->codec_type == AVMEDIA_TYPE_AUDIO)
|
||||
audio_size += pkt->size;
|
||||
else if (ost->st->codec->codec_type == AVMEDIA_TYPE_VIDEO) {
|
||||
video_size += pkt->size;
|
||||
ost->sync_opts++;
|
||||
}
|
||||
|
||||
opkt.stream_index = ost->index;
|
||||
if (pkt->pts != AV_NOPTS_VALUE)
|
||||
opkt.pts = av_rescale_q(pkt->pts, ist->st->time_base, ost->st->time_base) - ost_tb_start_time;
|
||||
else
|
||||
opkt.pts = AV_NOPTS_VALUE;
|
||||
|
||||
if (pkt->dts == AV_NOPTS_VALUE)
|
||||
opkt.dts = av_rescale_q(ist->pts, AV_TIME_BASE_Q, ost->st->time_base);
|
||||
else
|
||||
opkt.dts = av_rescale_q(pkt->dts, ist->st->time_base, ost->st->time_base);
|
||||
opkt.dts -= ost_tb_start_time;
|
||||
|
||||
opkt.duration = av_rescale_q(pkt->duration, ist->st->time_base, ost->st->time_base);
|
||||
opkt.flags = pkt->flags;
|
||||
|
||||
//FIXME remove the following 2 lines they shall be replaced by the bitstream filters
|
||||
if( ost->st->codec->codec_id != CODEC_ID_H264
|
||||
&& ost->st->codec->codec_id != CODEC_ID_MPEG1VIDEO
|
||||
&& ost->st->codec->codec_id != CODEC_ID_MPEG2VIDEO
|
||||
) {
|
||||
if (av_parser_change(ist->st->parser, ost->st->codec, &opkt.data, &opkt.size, pkt->data, pkt->size, pkt->flags & AV_PKT_FLAG_KEY))
|
||||
opkt.destruct = av_destruct_packet;
|
||||
} else {
|
||||
opkt.data = pkt->data;
|
||||
opkt.size = pkt->size;
|
||||
}
|
||||
if (of->ctx->oformat->flags & AVFMT_RAWPICTURE) {
|
||||
/* store AVPicture in AVPacket, as expected by the output format */
|
||||
avpicture_fill(&pict, opkt.data, ost->st->codec->pix_fmt, ost->st->codec->width, ost->st->codec->height);
|
||||
opkt.data = (uint8_t *)&pict;
|
||||
opkt.size = sizeof(AVPicture);
|
||||
opkt.flags |= AV_PKT_FLAG_KEY;
|
||||
}
|
||||
|
||||
write_frame(of->ctx, &opkt, ost->st->codec, ost->bitstream_filters);
|
||||
ost->st->codec->frame_number++;
|
||||
ost->frame_number++;
|
||||
av_free_packet(&opkt);
|
||||
}
|
||||
|
||||
static void rate_emu_sleep(InputStream *ist)
|
||||
{
|
||||
if (input_files[ist->file_index].rate_emu) {
|
||||
int64_t pts = av_rescale(ist->pts, 1000000, AV_TIME_BASE);
|
||||
int64_t now = av_gettime() - ist->start;
|
||||
if (pts > now)
|
||||
usleep(pts - now);
|
||||
}
|
||||
}
|
||||
|
||||
static int transcode_audio(InputStream *ist, AVPacket *pkt, int *got_output)
|
||||
{
|
||||
static unsigned int samples_size = 0;
|
||||
int bps = av_get_bytes_per_sample(ist->st->codec->sample_fmt);
|
||||
uint8_t *decoded_data_buf = NULL;
|
||||
int decoded_data_size = 0;
|
||||
int i, ret;
|
||||
|
||||
if (pkt && samples_size < FFMAX(pkt->size * bps, AVCODEC_MAX_AUDIO_FRAME_SIZE)) {
|
||||
av_free(samples);
|
||||
samples_size = FFMAX(pkt->size * bps, AVCODEC_MAX_AUDIO_FRAME_SIZE);
|
||||
samples = av_malloc(samples_size);
|
||||
}
|
||||
decoded_data_size = samples_size;
|
||||
|
||||
ret = avcodec_decode_audio3(ist->st->codec, samples, &decoded_data_size,
|
||||
pkt);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
pkt->data += ret;
|
||||
pkt->size -= ret;
|
||||
*got_output = decoded_data_size > 0;
|
||||
|
||||
/* Some bug in mpeg audio decoder gives */
|
||||
/* decoded_data_size < 0, it seems they are overflows */
|
||||
if (!*got_output) {
|
||||
/* no audio frame */
|
||||
return 0;
|
||||
}
|
||||
|
||||
decoded_data_buf = (uint8_t *)samples;
|
||||
ist->next_pts += ((int64_t)AV_TIME_BASE/bps * decoded_data_size) /
|
||||
(ist->st->codec->sample_rate * ist->st->codec->channels);
|
||||
|
||||
// preprocess audio (volume)
|
||||
if (audio_volume != 256) {
|
||||
switch (ist->st->codec->sample_fmt) {
|
||||
case AV_SAMPLE_FMT_U8:
|
||||
{
|
||||
uint8_t *volp = samples;
|
||||
for (i = 0; i < (decoded_data_size / sizeof(*volp)); i++) {
|
||||
int v = (((*volp - 128) * audio_volume + 128) >> 8) + 128;
|
||||
*volp++ = av_clip_uint8(v);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case AV_SAMPLE_FMT_S16:
|
||||
{
|
||||
int16_t *volp = samples;
|
||||
for (i = 0; i < (decoded_data_size / sizeof(*volp)); i++) {
|
||||
int v = ((*volp) * audio_volume + 128) >> 8;
|
||||
*volp++ = av_clip_int16(v);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case AV_SAMPLE_FMT_S32:
|
||||
{
|
||||
int32_t *volp = samples;
|
||||
for (i = 0; i < (decoded_data_size / sizeof(*volp)); i++) {
|
||||
int64_t v = (((int64_t)*volp * audio_volume + 128) >> 8);
|
||||
*volp++ = av_clipl_int32(v);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case AV_SAMPLE_FMT_FLT:
|
||||
{
|
||||
float *volp = samples;
|
||||
float scale = audio_volume / 256.f;
|
||||
for (i = 0; i < (decoded_data_size / sizeof(*volp)); i++) {
|
||||
*volp++ *= scale;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case AV_SAMPLE_FMT_DBL:
|
||||
{
|
||||
double *volp = samples;
|
||||
double scale = audio_volume / 256.;
|
||||
for (i = 0; i < (decoded_data_size / sizeof(*volp)); i++) {
|
||||
*volp++ *= scale;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
av_log(NULL, AV_LOG_FATAL,
|
||||
"Audio volume adjustment on sample format %s is not supported.\n",
|
||||
av_get_sample_fmt_name(ist->st->codec->sample_fmt));
|
||||
exit_program(1);
|
||||
}
|
||||
}
|
||||
|
||||
rate_emu_sleep(ist);
|
||||
|
||||
for (i = 0; i < nb_output_streams; i++) {
|
||||
OutputStream *ost = &output_streams[i];
|
||||
|
||||
if (!check_output_constraints(ist, ost) || !ost->encoding_needed)
|
||||
continue;
|
||||
do_audio_out(output_files[ost->file_index].ctx, ost, ist,
|
||||
decoded_data_buf, decoded_data_size);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int transcode_video(InputStream *ist, AVPacket *pkt, int *got_output, int64_t *pkt_pts, int64_t *pkt_dts)
|
||||
{
|
||||
AVFrame *decoded_frame, *filtered_frame = NULL;
|
||||
void *buffer_to_free = NULL;
|
||||
int i, ret = 0;
|
||||
float quality = 0;
|
||||
#if CONFIG_AVFILTER
|
||||
int frame_available = 1;
|
||||
#endif
|
||||
|
||||
if (!(decoded_frame = avcodec_alloc_frame()))
|
||||
return AVERROR(ENOMEM);
|
||||
pkt->pts = *pkt_pts;
|
||||
pkt->dts = *pkt_dts;
|
||||
*pkt_pts = AV_NOPTS_VALUE;
|
||||
|
||||
if(*pkt_dts != AV_NOPTS_VALUE && ist->st->codec->time_base.num != 0) {
|
||||
int ticks= ist->st->parser ? ist->st->parser->repeat_pict+1 : ist->st->codec->ticks_per_frame;
|
||||
*pkt_dts += ((int64_t)AV_TIME_BASE *
|
||||
ist->st->codec->time_base.num * ticks) /
|
||||
ist->st->codec->time_base.den;
|
||||
}else
|
||||
*pkt_dts = AV_NOPTS_VALUE;
|
||||
|
||||
ret = avcodec_decode_video2(ist->st->codec,
|
||||
decoded_frame, got_output, pkt);
|
||||
if (ret < 0)
|
||||
goto fail;
|
||||
|
||||
quality = same_quant ? decoded_frame->quality : 0;
|
||||
if (!*got_output) {
|
||||
/* no picture yet */
|
||||
av_freep(&decoded_frame);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(decoded_frame->best_effort_timestamp != AV_NOPTS_VALUE)
|
||||
ist->next_pts = ist->pts = decoded_frame->best_effort_timestamp;
|
||||
|
||||
if (ist->st->codec->time_base.num != 0) {
|
||||
int ticks = ist->st->parser ? ist->st->parser->repeat_pict + 1 :
|
||||
ist->st->codec->ticks_per_frame;
|
||||
ist->next_pts += ((int64_t)AV_TIME_BASE *
|
||||
ist->st->codec->time_base.num * ticks) /
|
||||
ist->st->codec->time_base.den;
|
||||
}
|
||||
pkt->size = 0;
|
||||
|
||||
pre_process_video_frame(ist, (AVPicture *)decoded_frame, &buffer_to_free);
|
||||
|
||||
#if CONFIG_AVFILTER
|
||||
for(i=0;i<nb_output_streams;i++) {
|
||||
OutputFile *of = &output_files[output_streams[i].file_index];
|
||||
OutputStream *ost = ost = &output_streams[i];
|
||||
if(check_output_constraints(ist, ost)){
|
||||
if (!decoded_frame->sample_aspect_ratio.num)
|
||||
decoded_frame->sample_aspect_ratio = ist->st->sample_aspect_ratio;
|
||||
decoded_frame->pts = ist->pts;
|
||||
|
||||
av_vsrc_buffer_add_frame(ost->input_video_filter, decoded_frame, AV_VSRC_BUF_FLAG_OVERWRITE);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
rate_emu_sleep(ist);
|
||||
|
||||
for (i = 0; i < nb_output_streams; i++) {
|
||||
OutputStream *ost = &output_streams[i];
|
||||
int frame_size;
|
||||
|
||||
if (!check_output_constraints(ist, ost) || !ost->encoding_needed)
|
||||
continue;
|
||||
|
||||
#if CONFIG_AVFILTER
|
||||
if (ost->input_video_filter) {
|
||||
frame_available = avfilter_poll_frame(ost->output_video_filter->inputs[0]);
|
||||
}
|
||||
while (frame_available) {
|
||||
if (ost->output_video_filter) {
|
||||
AVRational ist_pts_tb = ost->output_video_filter->inputs[0]->time_base;
|
||||
if (av_buffersink_get_buffer_ref(ost->output_video_filter, &ost->picref, 0) < 0)
|
||||
goto cont;
|
||||
if (!filtered_frame && !(filtered_frame = avcodec_alloc_frame())) {
|
||||
ret = AVERROR(ENOMEM);
|
||||
goto fail;
|
||||
}
|
||||
*filtered_frame= *decoded_frame; //for me_threshold
|
||||
if (ost->picref) {
|
||||
avfilter_fill_frame_from_video_buffer_ref(filtered_frame, ost->picref);
|
||||
ist->pts = av_rescale_q(ost->picref->pts, ist_pts_tb, AV_TIME_BASE_Q);
|
||||
}
|
||||
}
|
||||
if (ost->picref->video && !ost->frame_aspect_ratio)
|
||||
ost->st->codec->sample_aspect_ratio = ost->picref->video->sample_aspect_ratio;
|
||||
#else
|
||||
filtered_frame = decoded_frame;
|
||||
#endif
|
||||
|
||||
do_video_out(output_files[ost->file_index].ctx, ost, ist, filtered_frame, &frame_size,
|
||||
same_quant ? quality : ost->st->codec->global_quality);
|
||||
if (vstats_filename && frame_size)
|
||||
do_video_stats(output_files[ost->file_index].ctx, ost, frame_size);
|
||||
#if CONFIG_AVFILTER
|
||||
cont:
|
||||
frame_available = ost->output_video_filter && avfilter_poll_frame(ost->output_video_filter->inputs[0]);
|
||||
avfilter_unref_buffer(ost->picref);
|
||||
}
|
||||
av_freep(&filtered_frame);
|
||||
#endif
|
||||
}
|
||||
|
||||
fail:
|
||||
av_free(buffer_to_free);
|
||||
av_freep(&decoded_frame);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int transcode_subtitles(InputStream *ist, AVPacket *pkt, int *got_output)
|
||||
{
|
||||
AVSubtitle subtitle;
|
||||
int i, ret = avcodec_decode_subtitle2(ist->st->codec,
|
||||
&subtitle, got_output, pkt);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
if (!*got_output)
|
||||
return 0;
|
||||
|
||||
pkt->size = 0;
|
||||
|
||||
rate_emu_sleep(ist);
|
||||
|
||||
for (i = 0; i < nb_output_streams; i++) {
|
||||
OutputStream *ost = &output_streams[i];
|
||||
|
||||
if (!check_output_constraints(ist, ost) || !ost->encoding_needed)
|
||||
continue;
|
||||
|
||||
do_subtitle_out(output_files[ost->file_index].ctx, ost, ist, &subtitle, pkt->pts);
|
||||
}
|
||||
|
||||
avsubtitle_free(&subtitle);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* pkt = NULL means EOF (needed to flush decoder buffers) */
|
||||
static int output_packet(InputStream *ist, int ist_index,
|
||||
OutputStream *ost_table, int nb_ostreams,
|
||||
const AVPacket *pkt)
|
||||
{
|
||||
AVFormatContext *os;
|
||||
OutputStream *ost;
|
||||
int ret = 0, i;
|
||||
int got_output;
|
||||
void *buffer_to_free = NULL;
|
||||
static unsigned int samples_size= 0;
|
||||
AVSubtitle subtitle, *subtitle_to_free;
|
||||
int64_t pkt_dts = AV_NOPTS_VALUE;
|
||||
int64_t pkt_pts = AV_NOPTS_VALUE;
|
||||
#if CONFIG_AVFILTER
|
||||
int frame_available;
|
||||
#endif
|
||||
float quality = 0;
|
||||
|
||||
AVPacket avpkt;
|
||||
int bps = av_get_bytes_per_sample(ist->st->codec->sample_fmt);
|
||||
|
||||
if(ist->next_pts == AV_NOPTS_VALUE)
|
||||
ist->next_pts= ist->pts;
|
||||
|
@ -1665,10 +1998,7 @@ static int output_packet(InputStream *ist, int ist_index,
|
|||
pkt_pts = av_rescale_q(pkt->pts, ist->st->time_base, AV_TIME_BASE_Q);
|
||||
|
||||
//while we have more to decode or while the decoder did output something on EOF
|
||||
while (avpkt.size > 0 || (!pkt && got_output)) {
|
||||
uint8_t *data_buf, *decoded_data_buf;
|
||||
int data_size, decoded_data_size;
|
||||
AVFrame *decoded_frame, *filtered_frame;
|
||||
while (ist->decoding_needed && (avpkt.size > 0 || (!pkt && got_output))) {
|
||||
handle_eof:
|
||||
ist->pts= ist->next_pts;
|
||||
|
||||
|
@ -1677,349 +2007,57 @@ static int output_packet(InputStream *ist, int ist_index,
|
|||
"Multiple frames in a packet from stream %d\n", pkt->stream_index);
|
||||
ist->showed_multi_packet_warning=1;
|
||||
|
||||
/* decode the packet if needed */
|
||||
decoded_frame = filtered_frame = NULL;
|
||||
decoded_data_buf = NULL; /* fail safe */
|
||||
decoded_data_size= 0;
|
||||
data_buf = avpkt.data;
|
||||
data_size = avpkt.size;
|
||||
subtitle_to_free = NULL;
|
||||
if (ist->decoding_needed) {
|
||||
switch(ist->st->codec->codec_type) {
|
||||
case AVMEDIA_TYPE_AUDIO:{
|
||||
if(pkt && samples_size < FFMAX(pkt->size * bps, AVCODEC_MAX_AUDIO_FRAME_SIZE)) {
|
||||
samples_size = FFMAX(pkt->size * bps, AVCODEC_MAX_AUDIO_FRAME_SIZE);
|
||||
av_free(samples);
|
||||
samples= av_malloc(samples_size);
|
||||
}
|
||||
decoded_data_size= samples_size;
|
||||
/* XXX: could avoid copy if PCM 16 bits with same
|
||||
endianness as CPU */
|
||||
ret = avcodec_decode_audio3(ist->st->codec, samples, &decoded_data_size,
|
||||
&avpkt);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
avpkt.data += ret;
|
||||
avpkt.size -= ret;
|
||||
data_size = ret;
|
||||
got_output = decoded_data_size > 0;
|
||||
/* Some bug in mpeg audio decoder gives */
|
||||
/* decoded_data_size < 0, it seems they are overflows */
|
||||
if (!got_output) {
|
||||
/* no audio frame */
|
||||
continue;
|
||||
}
|
||||
decoded_data_buf = (uint8_t *)samples;
|
||||
ist->next_pts += ((int64_t)AV_TIME_BASE/bps * decoded_data_size) /
|
||||
(ist->st->codec->sample_rate * ist->st->codec->channels);
|
||||
break;}
|
||||
case AVMEDIA_TYPE_VIDEO:
|
||||
if (!(decoded_frame = avcodec_alloc_frame()))
|
||||
return AVERROR(ENOMEM);
|
||||
avpkt.pts = pkt_pts;
|
||||
avpkt.dts = pkt_dts;
|
||||
pkt_pts = AV_NOPTS_VALUE;
|
||||
if(pkt_dts != AV_NOPTS_VALUE && ist->st->codec->time_base.num != 0) {
|
||||
int ticks= ist->st->parser ? ist->st->parser->repeat_pict+1 : ist->st->codec->ticks_per_frame;
|
||||
pkt_dts += ((int64_t)AV_TIME_BASE *
|
||||
ist->st->codec->time_base.num * ticks) /
|
||||
ist->st->codec->time_base.den;
|
||||
}else
|
||||
pkt_dts = AV_NOPTS_VALUE;
|
||||
|
||||
ret = avcodec_decode_video2(ist->st->codec,
|
||||
decoded_frame, &got_output, &avpkt);
|
||||
quality = same_quant ? decoded_frame->quality : 0;
|
||||
if (ret < 0)
|
||||
goto fail;
|
||||
if (!got_output) {
|
||||
/* no picture yet */
|
||||
av_freep(&decoded_frame);
|
||||
goto discard_packet;
|
||||
}
|
||||
|
||||
if(decoded_frame->best_effort_timestamp != AV_NOPTS_VALUE)
|
||||
ist->next_pts = ist->pts = decoded_frame->best_effort_timestamp;
|
||||
|
||||
if (ist->st->codec->time_base.num != 0) {
|
||||
int ticks= ist->st->parser ? ist->st->parser->repeat_pict+1 : ist->st->codec->ticks_per_frame;
|
||||
ist->next_pts += ((int64_t)AV_TIME_BASE *
|
||||
ist->st->codec->time_base.num * ticks) /
|
||||
ist->st->codec->time_base.den;
|
||||
}
|
||||
avpkt.size = 0;
|
||||
buffer_to_free = NULL;
|
||||
pre_process_video_frame(ist, (AVPicture *)decoded_frame, &buffer_to_free);
|
||||
break;
|
||||
case AVMEDIA_TYPE_SUBTITLE:
|
||||
ret = avcodec_decode_subtitle2(ist->st->codec,
|
||||
&subtitle, &got_output, &avpkt);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
if (!got_output) {
|
||||
goto discard_packet;
|
||||
}
|
||||
subtitle_to_free = &subtitle;
|
||||
avpkt.size = 0;
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
switch(ist->st->codec->codec_type) {
|
||||
case AVMEDIA_TYPE_AUDIO:
|
||||
ist->next_pts += ((int64_t)AV_TIME_BASE * ist->st->codec->frame_size) /
|
||||
ist->st->codec->sample_rate;
|
||||
break;
|
||||
case AVMEDIA_TYPE_VIDEO:
|
||||
if (ist->st->codec->time_base.num != 0) {
|
||||
int ticks= ist->st->parser ? ist->st->parser->repeat_pict+1 : ist->st->codec->ticks_per_frame;
|
||||
ist->next_pts += ((int64_t)AV_TIME_BASE *
|
||||
ist->st->codec->time_base.num * ticks) /
|
||||
ist->st->codec->time_base.den;
|
||||
}
|
||||
break;
|
||||
}
|
||||
avpkt.size = 0;
|
||||
switch(ist->st->codec->codec_type) {
|
||||
case AVMEDIA_TYPE_AUDIO:
|
||||
ret = transcode_audio (ist, &avpkt, &got_output);
|
||||
break;
|
||||
case AVMEDIA_TYPE_VIDEO:
|
||||
ret = transcode_video (ist, &avpkt, &got_output, &pkt_pts, &pkt_dts);
|
||||
break;
|
||||
case AVMEDIA_TYPE_SUBTITLE:
|
||||
ret = transcode_subtitles(ist, &avpkt, &got_output);
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
|
||||
#if CONFIG_AVFILTER
|
||||
if(ist->st->codec->codec_type == AVMEDIA_TYPE_VIDEO)
|
||||
for(i=0;i<nb_ostreams;i++) {
|
||||
OutputFile *of = &output_files[ost_table[i].file_index];
|
||||
if (of->start_time == 0 || ist->pts >= of->start_time) {
|
||||
ost = &ost_table[i];
|
||||
if (ost->input_video_filter && ost->source_index == ist_index) {
|
||||
if (!decoded_frame->sample_aspect_ratio.num)
|
||||
decoded_frame->sample_aspect_ratio = ist->st->sample_aspect_ratio;
|
||||
decoded_frame->pts = ist->pts;
|
||||
|
||||
av_vsrc_buffer_add_frame(ost->input_video_filter, decoded_frame, AV_VSRC_BUF_FLAG_OVERWRITE);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// preprocess audio (volume)
|
||||
if (ist->st->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
|
||||
if (audio_volume != 256) {
|
||||
switch (ist->st->codec->sample_fmt) {
|
||||
case AV_SAMPLE_FMT_U8:
|
||||
{
|
||||
uint8_t *volp = samples;
|
||||
for (i = 0; i < (decoded_data_size / sizeof(*volp)); i++) {
|
||||
int v = (((*volp - 128) * audio_volume + 128) >> 8) + 128;
|
||||
*volp++ = av_clip_uint8(v);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case AV_SAMPLE_FMT_S16:
|
||||
{
|
||||
int16_t *volp = samples;
|
||||
for (i = 0; i < (decoded_data_size / sizeof(*volp)); i++) {
|
||||
int v = ((*volp) * audio_volume + 128) >> 8;
|
||||
*volp++ = av_clip_int16(v);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case AV_SAMPLE_FMT_S32:
|
||||
{
|
||||
int32_t *volp = samples;
|
||||
for (i = 0; i < (decoded_data_size / sizeof(*volp)); i++) {
|
||||
int64_t v = (((int64_t)*volp * audio_volume + 128) >> 8);
|
||||
*volp++ = av_clipl_int32(v);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case AV_SAMPLE_FMT_FLT:
|
||||
{
|
||||
float *volp = samples;
|
||||
float scale = audio_volume / 256.f;
|
||||
for (i = 0; i < (decoded_data_size / sizeof(*volp)); i++) {
|
||||
*volp++ *= scale;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case AV_SAMPLE_FMT_DBL:
|
||||
{
|
||||
double *volp = samples;
|
||||
double scale = audio_volume / 256.;
|
||||
for (i = 0; i < (decoded_data_size / sizeof(*volp)); i++) {
|
||||
*volp++ *= scale;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
av_log(NULL, AV_LOG_FATAL,
|
||||
"Audio volume adjustment on sample format %s is not supported.\n",
|
||||
av_get_sample_fmt_name(ist->st->codec->sample_fmt));
|
||||
exit_program(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* frame rate emulation */
|
||||
if (input_files[ist->file_index].rate_emu) {
|
||||
int64_t pts = av_rescale(ist->pts, 1000000, AV_TIME_BASE);
|
||||
int64_t now = av_gettime() - ist->start;
|
||||
if (pts > now)
|
||||
usleep(pts - now);
|
||||
}
|
||||
/* if output time reached then transcode raw format,
|
||||
encode packets and output them */
|
||||
for (i = 0; i < nb_ostreams; i++) {
|
||||
OutputFile *of = &output_files[ost_table[i].file_index];
|
||||
int frame_size;
|
||||
|
||||
ost = &ost_table[i];
|
||||
if (ost->source_index != ist_index)
|
||||
continue;
|
||||
|
||||
if (of->start_time && ist->pts < of->start_time)
|
||||
continue;
|
||||
|
||||
if (of->recording_time != INT64_MAX &&
|
||||
av_compare_ts(ist->pts, AV_TIME_BASE_Q, of->recording_time + of->start_time,
|
||||
(AVRational){1, 1000000}) >= 0) {
|
||||
ost->is_past_recording_time = 1;
|
||||
continue;
|
||||
}
|
||||
|
||||
#if CONFIG_AVFILTER
|
||||
frame_available = ist->st->codec->codec_type != AVMEDIA_TYPE_VIDEO ||
|
||||
!ost->output_video_filter || avfilter_poll_frame(ost->output_video_filter->inputs[0]);
|
||||
while (frame_available) {
|
||||
if (ist->st->codec->codec_type == AVMEDIA_TYPE_VIDEO && ost->output_video_filter) {
|
||||
AVRational ist_pts_tb = ost->output_video_filter->inputs[0]->time_base;
|
||||
if (av_buffersink_get_buffer_ref(ost->output_video_filter, &ost->picref, 0) < 0)
|
||||
goto cont;
|
||||
if (!filtered_frame && !(filtered_frame = avcodec_alloc_frame())) {
|
||||
ret = AVERROR(ENOMEM);
|
||||
goto fail;
|
||||
}
|
||||
*filtered_frame= *decoded_frame; //for me_threshold
|
||||
if (ost->picref) {
|
||||
avfilter_fill_frame_from_video_buffer_ref(filtered_frame, ost->picref);
|
||||
ist->pts = av_rescale_q(ost->picref->pts, ist_pts_tb, AV_TIME_BASE_Q);
|
||||
}
|
||||
}
|
||||
#else
|
||||
filtered_frame = decoded_frame;
|
||||
#endif
|
||||
os = output_files[ost->file_index].ctx;
|
||||
|
||||
/* set the input output pts pairs */
|
||||
//ost->sync_ipts = (double)(ist->pts + input_files[ist->file_index].ts_offset - start_time)/ AV_TIME_BASE;
|
||||
|
||||
if (ost->encoding_needed) {
|
||||
av_assert0(ist->decoding_needed);
|
||||
switch(ost->st->codec->codec_type) {
|
||||
case AVMEDIA_TYPE_AUDIO:
|
||||
do_audio_out(os, ost, ist, decoded_data_buf, decoded_data_size);
|
||||
break;
|
||||
case AVMEDIA_TYPE_VIDEO:
|
||||
#if CONFIG_AVFILTER
|
||||
if (ost->picref->video && !ost->frame_aspect_ratio)
|
||||
ost->st->codec->sample_aspect_ratio = ost->picref->video->sample_aspect_ratio;
|
||||
#endif
|
||||
do_video_out(os, ost, ist, filtered_frame, &frame_size,
|
||||
same_quant ? quality : ost->st->codec->global_quality);
|
||||
if (vstats_filename && frame_size)
|
||||
do_video_stats(os, ost, frame_size);
|
||||
break;
|
||||
case AVMEDIA_TYPE_SUBTITLE:
|
||||
do_subtitle_out(os, ost, ist, &subtitle,
|
||||
pkt->pts);
|
||||
break;
|
||||
default:
|
||||
abort();
|
||||
}
|
||||
} else {
|
||||
AVPicture pict;
|
||||
AVPacket opkt;
|
||||
int64_t ost_tb_start_time= av_rescale_q(of->start_time, AV_TIME_BASE_Q, ost->st->time_base);
|
||||
av_init_packet(&opkt);
|
||||
|
||||
if ((!ost->frame_number && !(pkt->flags & AV_PKT_FLAG_KEY)) &&
|
||||
!ost->copy_initial_nonkeyframes)
|
||||
#if !CONFIG_AVFILTER
|
||||
continue;
|
||||
#else
|
||||
goto cont;
|
||||
#endif
|
||||
|
||||
/* no reencoding needed : output the packet directly */
|
||||
/* force the input stream PTS */
|
||||
|
||||
if(ost->st->codec->codec_type == AVMEDIA_TYPE_AUDIO)
|
||||
audio_size += data_size;
|
||||
else if (ost->st->codec->codec_type == AVMEDIA_TYPE_VIDEO) {
|
||||
video_size += data_size;
|
||||
ost->sync_opts++;
|
||||
}
|
||||
|
||||
opkt.stream_index= ost->index;
|
||||
if(pkt->pts != AV_NOPTS_VALUE)
|
||||
opkt.pts= av_rescale_q(pkt->pts, ist->st->time_base, ost->st->time_base) - ost_tb_start_time;
|
||||
else
|
||||
opkt.pts= AV_NOPTS_VALUE;
|
||||
|
||||
if (pkt->dts == AV_NOPTS_VALUE)
|
||||
opkt.dts = av_rescale_q(ist->pts, AV_TIME_BASE_Q, ost->st->time_base);
|
||||
else
|
||||
opkt.dts = av_rescale_q(pkt->dts, ist->st->time_base, ost->st->time_base);
|
||||
opkt.dts -= ost_tb_start_time;
|
||||
|
||||
opkt.duration = av_rescale_q(pkt->duration, ist->st->time_base, ost->st->time_base);
|
||||
opkt.flags= pkt->flags;
|
||||
|
||||
//FIXME remove the following 2 lines they shall be replaced by the bitstream filters
|
||||
if( ost->st->codec->codec_id != CODEC_ID_H264
|
||||
&& ost->st->codec->codec_id != CODEC_ID_MPEG1VIDEO
|
||||
&& ost->st->codec->codec_id != CODEC_ID_MPEG2VIDEO
|
||||
) {
|
||||
if(av_parser_change(ist->st->parser, ost->st->codec, &opkt.data, &opkt.size, data_buf, data_size, pkt->flags & AV_PKT_FLAG_KEY))
|
||||
opkt.destruct= av_destruct_packet;
|
||||
} else {
|
||||
opkt.data = data_buf;
|
||||
opkt.size = data_size;
|
||||
}
|
||||
|
||||
if (os->oformat->flags & AVFMT_RAWPICTURE) {
|
||||
/* store AVPicture in AVPacket, as expected by the output format */
|
||||
avpicture_fill(&pict, opkt.data, ost->st->codec->pix_fmt, ost->st->codec->width, ost->st->codec->height);
|
||||
opkt.data = (uint8_t *)&pict;
|
||||
opkt.size = sizeof(AVPicture);
|
||||
opkt.flags |= AV_PKT_FLAG_KEY;
|
||||
}
|
||||
write_frame(os, &opkt, ost->st->codec, ost->bitstream_filters);
|
||||
ost->st->codec->frame_number++;
|
||||
ost->frame_number++;
|
||||
av_free_packet(&opkt);
|
||||
}
|
||||
#if CONFIG_AVFILTER
|
||||
cont:
|
||||
frame_available = (ist->st->codec->codec_type == AVMEDIA_TYPE_VIDEO) &&
|
||||
ost->output_video_filter && avfilter_poll_frame(ost->output_video_filter->inputs[0]);
|
||||
avfilter_unref_buffer(ost->picref);
|
||||
}
|
||||
av_freep(&filtered_frame);
|
||||
#endif
|
||||
}
|
||||
|
||||
fail:
|
||||
av_free(buffer_to_free);
|
||||
/* XXX: allocate the subtitles in the codec ? */
|
||||
if (subtitle_to_free) {
|
||||
avsubtitle_free(subtitle_to_free);
|
||||
subtitle_to_free = NULL;
|
||||
}
|
||||
av_freep(&decoded_frame);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
if (!got_output) {
|
||||
if (ist->st->codec->codec_type == AVMEDIA_TYPE_AUDIO)
|
||||
continue;
|
||||
goto discard_packet;
|
||||
}
|
||||
}
|
||||
discard_packet:
|
||||
|
||||
/* handle stream copy */
|
||||
if (!ist->decoding_needed) {
|
||||
rate_emu_sleep(ist);
|
||||
switch (ist->st->codec->codec_type) {
|
||||
case AVMEDIA_TYPE_AUDIO:
|
||||
ist->next_pts += ((int64_t)AV_TIME_BASE * ist->st->codec->frame_size) /
|
||||
ist->st->codec->sample_rate;
|
||||
break;
|
||||
case AVMEDIA_TYPE_VIDEO:
|
||||
if (ist->st->codec->time_base.num != 0) {
|
||||
int ticks = ist->st->parser ? ist->st->parser->repeat_pict+1 : ist->st->codec->ticks_per_frame;
|
||||
ist->next_pts += ((int64_t)AV_TIME_BASE *
|
||||
ist->st->codec->time_base.num * ticks) /
|
||||
ist->st->codec->time_base.den;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (i = 0; pkt && i < nb_ostreams; i++) {
|
||||
ost = &ost_table[i];
|
||||
|
||||
if (!check_output_constraints(ist, ost) || ost->encoding_needed)
|
||||
continue;
|
||||
|
||||
do_streamcopy(ist, ost, pkt);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
#include "libavutil/libm.h" // brought forward to work around cygwin header breakage
|
||||
|
||||
#include <float.h>
|
||||
#include <math.h>
|
||||
#include "libavutil/mathematics.h"
|
||||
#include "avcodec.h"
|
||||
#include "put_bits.h"
|
||||
#include "aac.h"
|
||||
|
|
|
@ -2087,7 +2087,8 @@ static int parse_adts_frame_header(AACContext *ac, GetBitContext *gb)
|
|||
ac->m4ac.chan_config = hdr_info.chan_config;
|
||||
if (set_default_channel_config(ac->avctx, new_che_pos, hdr_info.chan_config))
|
||||
return -7;
|
||||
if (output_configure(ac, ac->che_pos, new_che_pos, hdr_info.chan_config, OC_TRIAL_FRAME))
|
||||
if (output_configure(ac, ac->che_pos, new_che_pos, hdr_info.chan_config,
|
||||
FFMAX(ac->output_configured, OC_TRIAL_FRAME)))
|
||||
return -7;
|
||||
} else if (ac->output_configured != OC_LOCKED) {
|
||||
ac->m4ac.chan_config = 0;
|
||||
|
|
|
@ -34,6 +34,22 @@
|
|||
# define T @
|
||||
#endif
|
||||
|
||||
#if HAVE_NEON
|
||||
.arch armv7-a
|
||||
#elif HAVE_ARMV6T2
|
||||
.arch armv6t2
|
||||
#elif HAVE_ARMV6
|
||||
.arch armv6
|
||||
#elif HAVE_ARMV5TE
|
||||
.arch armv5te
|
||||
#endif
|
||||
|
||||
#if HAVE_NEON
|
||||
.fpu neon
|
||||
#elif HAVE_ARMVFP
|
||||
.fpu vfp
|
||||
#endif
|
||||
|
||||
.syntax unified
|
||||
T .thumb
|
||||
|
||||
|
|
|
@ -36,6 +36,37 @@
|
|||
#include "libavutil/rational.h"
|
||||
|
||||
#include "libavcodec/version.h"
|
||||
/**
|
||||
* @defgroup libavc Encoding/Decoding Library
|
||||
* @{
|
||||
*
|
||||
* @defgroup lavc_decoding Decoding
|
||||
* @{
|
||||
* @}
|
||||
*
|
||||
* @defgroup lavc_encoding Encoding
|
||||
* @{
|
||||
* @}
|
||||
*
|
||||
* @defgroup lavc_codec Codecs
|
||||
* @{
|
||||
* @defgroup lavc_codec_native Native Codecs
|
||||
* @{
|
||||
* @}
|
||||
* @defgroup lavc_codec_wrappers External library wrappers
|
||||
* @{
|
||||
* @}
|
||||
* @defgroup lavc_codec_hwaccel Hardware Accelerators bridge
|
||||
* @{
|
||||
* @}
|
||||
* @}
|
||||
* @defgroup lavc_internal Internal
|
||||
* @{
|
||||
* @}
|
||||
* @}
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Identify the syntax and semantics of the bitstream.
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
* http://wiki.multimedia.cx/index.php?title=Nellymoser
|
||||
*/
|
||||
|
||||
#include "libavutil/mathematics.h"
|
||||
#include "nellymoser.h"
|
||||
#include "avcodec.h"
|
||||
#include "dsputil.h"
|
||||
|
|
|
@ -365,8 +365,8 @@ static int update_context_from_thread(AVCodecContext *dst, AVCodecContext *src,
|
|||
}
|
||||
|
||||
if (for_user) {
|
||||
dst->delay = src->thread_count - 1;
|
||||
dst->coded_frame = src->coded_frame;
|
||||
dst->delay = src->thread_count - 1;
|
||||
dst->coded_frame = src->coded_frame;
|
||||
} else {
|
||||
if (dst->codec->update_thread_context)
|
||||
err = dst->codec->update_thread_context(dst, src);
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#define AVCODEC_VERSION_H
|
||||
|
||||
#define LIBAVCODEC_VERSION_MAJOR 53
|
||||
#define LIBAVCODEC_VERSION_MINOR 36
|
||||
#define LIBAVCODEC_VERSION_MINOR 37
|
||||
#define LIBAVCODEC_VERSION_MICRO 0
|
||||
|
||||
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
||||
|
|
|
@ -137,6 +137,9 @@ int ff_wma_init(AVCodecContext *avctx, int flags2)
|
|||
|
||||
/* compute MDCT block size */
|
||||
s->frame_len_bits = ff_wma_get_frame_len_bits(s->sample_rate, s->version, 0);
|
||||
s->next_block_len_bits = s->frame_len_bits;
|
||||
s->prev_block_len_bits = s->frame_len_bits;
|
||||
s->block_len_bits = s->frame_len_bits;
|
||||
|
||||
s->frame_len = 1 << s->frame_len_bits;
|
||||
if (s->use_variable_block_len) {
|
||||
|
|
|
@ -2855,6 +2855,10 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx)
|
|||
#if HAVE_YASM
|
||||
c->scalarproduct_float = ff_scalarproduct_float_sse;
|
||||
c->butterflies_float_interleave = ff_butterflies_float_interleave_sse;
|
||||
|
||||
if (!high_bit_depth)
|
||||
c->emulated_edge_mc = emulated_edge_mc_sse;
|
||||
c->gmc = gmc_sse;
|
||||
#endif
|
||||
}
|
||||
if (HAVE_AMD3DNOW && (mm_flags & AV_CPU_FLAG_3DNOW))
|
||||
|
@ -2875,10 +2879,6 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx)
|
|||
c->apply_window_int16 = ff_apply_window_int16_sse2;
|
||||
}
|
||||
}
|
||||
|
||||
if (!high_bit_depth)
|
||||
c->emulated_edge_mc = emulated_edge_mc_sse;
|
||||
c->gmc= gmc_sse;
|
||||
#endif
|
||||
}
|
||||
if (mm_flags & AV_CPU_FLAG_SSSE3) {
|
||||
|
|
|
@ -497,14 +497,14 @@ cglobal scalarproduct_float_sse, 3,3,2, v1, v2, offset
|
|||
; ... and then the same for left/right extend also. See below for loop
|
||||
; function implementations. Fast are fixed-width, slow is variable-width
|
||||
|
||||
%macro EMU_EDGE_FUNC 1
|
||||
%macro EMU_EDGE_FUNC 0
|
||||
%ifdef ARCH_X86_64
|
||||
%define w_reg r10
|
||||
cglobal emu_edge_core_%1, 6, 7, 1
|
||||
cglobal emu_edge_core, 6, 7, 1
|
||||
mov r11, r5 ; save block_h
|
||||
%else
|
||||
%define w_reg r6
|
||||
cglobal emu_edge_core_%1, 2, 7, 0
|
||||
cglobal emu_edge_core, 2, 7, 0
|
||||
mov r4, r4m ; end_y
|
||||
mov r5, r5m ; block_h
|
||||
%endif
|
||||
|
@ -630,18 +630,18 @@ cglobal emu_edge_core_%1, 2, 7, 0
|
|||
; - if (%2 & 3 == 3) fills 2 bytes into r6, and 1 into ebx
|
||||
; - else fills remaining bytes into ebx
|
||||
; writing data out is in the same way
|
||||
%macro READ_NUM_BYTES 3
|
||||
%macro READ_NUM_BYTES 2
|
||||
%assign %%src_off 0 ; offset in source buffer
|
||||
%assign %%smidx 0 ; mmx register idx
|
||||
%assign %%sxidx 0 ; xmm register idx
|
||||
|
||||
%ifnidn %3, mmx
|
||||
%if cpuflag(sse)
|
||||
%rep %2/16
|
||||
movdqu xmm %+ %%sxidx, [r1+%%src_off]
|
||||
movups xmm %+ %%sxidx, [r1+%%src_off]
|
||||
%assign %%src_off %%src_off+16
|
||||
%assign %%sxidx %%sxidx+1
|
||||
%endrep ; %2/16
|
||||
%endif ; !mmx
|
||||
%endif
|
||||
|
||||
%ifdef ARCH_X86_64
|
||||
%if (%2-%%src_off) == 8
|
||||
|
@ -679,14 +679,14 @@ cglobal emu_edge_core_%1, 2, 7, 0
|
|||
%endif ; (%2-%%src_off) == 1/2/3
|
||||
%endmacro ; READ_NUM_BYTES
|
||||
|
||||
%macro WRITE_NUM_BYTES 3
|
||||
%macro WRITE_NUM_BYTES 2
|
||||
%assign %%dst_off 0 ; offset in destination buffer
|
||||
%assign %%dmidx 0 ; mmx register idx
|
||||
%assign %%dxidx 0 ; xmm register idx
|
||||
|
||||
%ifnidn %3, mmx
|
||||
%if cpuflag(sse)
|
||||
%rep %2/16
|
||||
movdqu [r0+%%dst_off], xmm %+ %%dxidx
|
||||
movups [r0+%%dst_off], xmm %+ %%dxidx
|
||||
%assign %%dst_off %%dst_off+16
|
||||
%assign %%dxidx %%dxidx+1
|
||||
%endrep ; %2/16
|
||||
|
@ -734,7 +734,7 @@ cglobal emu_edge_core_%1, 2, 7, 0
|
|||
; those out into the destination buffer
|
||||
; r0=buf,r1=src,r2=linesize,r3(64)/r3m(32)=start_x,r4=end_y,r5=block_h
|
||||
; r6(eax/64)/r3(ebx/32)=val_reg
|
||||
%macro VERTICAL_EXTEND 1
|
||||
%macro VERTICAL_EXTEND 0
|
||||
%assign %%n 1
|
||||
%rep 22
|
||||
ALIGN 128
|
||||
|
@ -747,9 +747,9 @@ ALIGN 128
|
|||
cmp dword r3m, 0
|
||||
je .emuedge_copy_body_ %+ %%n %+ _loop
|
||||
%endif ; ARCH_X86_64/32
|
||||
READ_NUM_BYTES top, %%n, %1 ; read bytes
|
||||
READ_NUM_BYTES top, %%n ; read bytes
|
||||
.emuedge_extend_top_ %+ %%n %+ _loop: ; do {
|
||||
WRITE_NUM_BYTES top, %%n, %1 ; write bytes
|
||||
WRITE_NUM_BYTES top, %%n ; write bytes
|
||||
add r0 , r2 ; dst += linesize
|
||||
%ifdef ARCH_X86_64
|
||||
dec r3d
|
||||
|
@ -760,8 +760,8 @@ ALIGN 128
|
|||
|
||||
; copy body pixels
|
||||
.emuedge_copy_body_ %+ %%n %+ _loop: ; do {
|
||||
READ_NUM_BYTES body, %%n, %1 ; read bytes
|
||||
WRITE_NUM_BYTES body, %%n, %1 ; write bytes
|
||||
READ_NUM_BYTES body, %%n ; read bytes
|
||||
WRITE_NUM_BYTES body, %%n ; write bytes
|
||||
add r0 , r2 ; dst += linesize
|
||||
add r1 , r2 ; src += linesize
|
||||
dec r4d
|
||||
|
@ -771,9 +771,9 @@ ALIGN 128
|
|||
test r5 , r5 ; if (!block_h)
|
||||
jz .emuedge_v_extend_end_ %+ %%n ; goto end
|
||||
sub r1 , r2 ; src -= linesize
|
||||
READ_NUM_BYTES bottom, %%n, %1 ; read bytes
|
||||
READ_NUM_BYTES bottom, %%n ; read bytes
|
||||
.emuedge_extend_bottom_ %+ %%n %+ _loop: ; do {
|
||||
WRITE_NUM_BYTES bottom, %%n, %1 ; write bytes
|
||||
WRITE_NUM_BYTES bottom, %%n ; write bytes
|
||||
add r0 , r2 ; dst += linesize
|
||||
dec r5d
|
||||
jnz .emuedge_extend_bottom_ %+ %%n %+ _loop ; } while (--block_h)
|
||||
|
@ -796,17 +796,17 @@ ALIGN 128
|
|||
; lowest two bytes of the register (so val*0x0101), and are splatted
|
||||
; into each byte of mm0 as well if n_pixels >= 8
|
||||
|
||||
%macro READ_V_PIXEL 3
|
||||
%macro READ_V_PIXEL 2
|
||||
mov vall, %2
|
||||
mov valh, vall
|
||||
%if %1 >= 8
|
||||
movd mm0, vald
|
||||
%ifidn %3, mmx
|
||||
%if cpuflag(mmx2)
|
||||
pshufw mm0, mm0, 0
|
||||
%else ; mmx
|
||||
punpcklwd mm0, mm0
|
||||
punpckldq mm0, mm0
|
||||
%else ; !mmx
|
||||
pshufw mm0, mm0, 0
|
||||
%endif ; mmx
|
||||
%endif ; sse
|
||||
%endif ; %1 >= 8
|
||||
%endmacro
|
||||
|
||||
|
@ -831,13 +831,13 @@ ALIGN 128
|
|||
%endmacro
|
||||
|
||||
; r0=buf+block_h*linesize, r1=start_x, r2=linesize, r5=block_h, r6/r3=val
|
||||
%macro LEFT_EXTEND 1
|
||||
%macro LEFT_EXTEND 0
|
||||
%assign %%n 2
|
||||
%rep 11
|
||||
ALIGN 64
|
||||
.emuedge_extend_left_ %+ %%n: ; do {
|
||||
sub r0, r2 ; dst -= linesize
|
||||
READ_V_PIXEL %%n, [r0+r1], %1 ; read pixels
|
||||
READ_V_PIXEL %%n, [r0+r1] ; read pixels
|
||||
WRITE_V_PIXEL %%n, r0 ; write pixels
|
||||
dec r5
|
||||
jnz .emuedge_extend_left_ %+ %%n ; } while (--block_h)
|
||||
|
@ -851,19 +851,19 @@ ALIGN 64
|
|||
%endmacro ; LEFT_EXTEND
|
||||
|
||||
; r3/r0=buf+block_h*linesize, r2=linesize, r11/r5=block_h, r0/r6=end_x, r6/r3=val
|
||||
%macro RIGHT_EXTEND 1
|
||||
%macro RIGHT_EXTEND 0
|
||||
%assign %%n 2
|
||||
%rep 11
|
||||
ALIGN 64
|
||||
.emuedge_extend_right_ %+ %%n: ; do {
|
||||
%ifdef ARCH_X86_64
|
||||
sub r3, r2 ; dst -= linesize
|
||||
READ_V_PIXEL %%n, [r3+w_reg-1], %1 ; read pixels
|
||||
READ_V_PIXEL %%n, [r3+w_reg-1] ; read pixels
|
||||
WRITE_V_PIXEL %%n, r3+r4-%%n ; write pixels
|
||||
dec r11
|
||||
%else ; ARCH_X86_32
|
||||
sub r0, r2 ; dst -= linesize
|
||||
READ_V_PIXEL %%n, [r0+w_reg-1], %1 ; read pixels
|
||||
READ_V_PIXEL %%n, [r0+w_reg-1] ; read pixels
|
||||
WRITE_V_PIXEL %%n, r0+r4-%%n ; write pixels
|
||||
dec r5
|
||||
%endif ; ARCH_X86_64/32
|
||||
|
@ -905,17 +905,17 @@ ALIGN 64
|
|||
.%1_skip_%4_px:
|
||||
%endmacro
|
||||
|
||||
%macro V_COPY_ROW 3
|
||||
%macro V_COPY_ROW 2
|
||||
%ifidn %1, bottom
|
||||
sub r1, linesize
|
||||
%endif
|
||||
.%1_copy_loop:
|
||||
xor cnt_reg, cnt_reg
|
||||
%ifidn %3, mmx
|
||||
%if notcpuflag(sse)
|
||||
%define linesize r2m
|
||||
V_COPY_NPX %1, mm0, movq, 8, 0xFFFFFFF8
|
||||
%else ; !mmx
|
||||
V_COPY_NPX %1, xmm0, movdqu, 16, 0xFFFFFFF0
|
||||
%else ; sse
|
||||
V_COPY_NPX %1, xmm0, movups, 16, 0xFFFFFFF0
|
||||
%ifdef ARCH_X86_64
|
||||
%define linesize r2
|
||||
V_COPY_NPX %1, rax , mov, 8
|
||||
|
@ -923,7 +923,7 @@ ALIGN 64
|
|||
%define linesize r2m
|
||||
V_COPY_NPX %1, mm0, movq, 8
|
||||
%endif ; ARCH_X86_64/32
|
||||
%endif ; mmx
|
||||
%endif ; sse
|
||||
V_COPY_NPX %1, vald, mov, 4
|
||||
V_COPY_NPX %1, valw, mov, 2
|
||||
V_COPY_NPX %1, vall, mov, 1
|
||||
|
@ -936,7 +936,7 @@ ALIGN 64
|
|||
jnz .%1_copy_loop
|
||||
%endmacro
|
||||
|
||||
%macro SLOW_V_EXTEND 1
|
||||
%macro SLOW_V_EXTEND 0
|
||||
.slow_v_extend_loop:
|
||||
; r0=buf,r1=src,r2(64)/r2m(32)=linesize,r3(64)/r3m(32)=start_x,r4=end_y,r5=block_h
|
||||
; r11(64)/r3(later-64)/r2(32)=cnt_reg,r6(64)/r3(32)=val_reg,r10(64)/r6(32)=w=end_x-start_x
|
||||
|
@ -945,16 +945,16 @@ ALIGN 64
|
|||
test r3, r3
|
||||
%define cnt_reg r11
|
||||
jz .do_body_copy ; if (!start_y) goto do_body_copy
|
||||
V_COPY_ROW top, r3, %1
|
||||
V_COPY_ROW top, r3
|
||||
%else
|
||||
cmp dword r3m, 0
|
||||
%define cnt_reg r2
|
||||
je .do_body_copy ; if (!start_y) goto do_body_copy
|
||||
V_COPY_ROW top, dword r3m, %1
|
||||
V_COPY_ROW top, dword r3m
|
||||
%endif
|
||||
|
||||
.do_body_copy:
|
||||
V_COPY_ROW body, r4, %1
|
||||
V_COPY_ROW body, r4
|
||||
|
||||
%ifdef ARCH_X86_64
|
||||
pop r11 ; restore old value of block_h
|
||||
|
@ -966,7 +966,7 @@ ALIGN 64
|
|||
%else
|
||||
jz .skip_bottom_extend
|
||||
%endif
|
||||
V_COPY_ROW bottom, r5, %1
|
||||
V_COPY_ROW bottom, r5
|
||||
%ifdef ARCH_X86_32
|
||||
.skip_bottom_extend:
|
||||
mov r2, r2m
|
||||
|
@ -974,12 +974,12 @@ ALIGN 64
|
|||
jmp .v_extend_end
|
||||
%endmacro
|
||||
|
||||
%macro SLOW_LEFT_EXTEND 1
|
||||
%macro SLOW_LEFT_EXTEND 0
|
||||
.slow_left_extend_loop:
|
||||
; r0=buf+block_h*linesize,r2=linesize,r6(64)/r3(32)=val,r5=block_h,r4=cntr,r10/r6=start_x
|
||||
mov r4, 8
|
||||
sub r0, linesize
|
||||
READ_V_PIXEL 8, [r0+w_reg], %1
|
||||
READ_V_PIXEL 8, [r0+w_reg]
|
||||
.left_extend_8px_loop:
|
||||
movq [r0+r4-8], mm0
|
||||
add r4, 8
|
||||
|
@ -1002,7 +1002,7 @@ ALIGN 64
|
|||
jmp .right_extend
|
||||
%endmacro
|
||||
|
||||
%macro SLOW_RIGHT_EXTEND 1
|
||||
%macro SLOW_RIGHT_EXTEND 0
|
||||
.slow_right_extend_loop:
|
||||
; r3(64)/r0(32)=buf+block_h*linesize,r2=linesize,r4=block_w,r11(64)/r5(32)=block_h,
|
||||
; r10(64)/r6(32)=end_x,r6/r3=val,r1=cntr
|
||||
|
@ -1015,7 +1015,7 @@ ALIGN 64
|
|||
%endif
|
||||
lea r1, [r4-8]
|
||||
sub buf_reg, linesize
|
||||
READ_V_PIXEL 8, [buf_reg+w_reg-1], %1
|
||||
READ_V_PIXEL 8, [buf_reg+w_reg-1]
|
||||
.right_extend_8px_loop:
|
||||
movq [buf_reg+r1], mm0
|
||||
sub r1, 8
|
||||
|
@ -1036,13 +1036,14 @@ ALIGN 64
|
|||
%endmacro
|
||||
|
||||
%macro emu_edge 1
|
||||
EMU_EDGE_FUNC %1
|
||||
VERTICAL_EXTEND %1
|
||||
LEFT_EXTEND %1
|
||||
RIGHT_EXTEND %1
|
||||
SLOW_V_EXTEND %1
|
||||
SLOW_LEFT_EXTEND %1
|
||||
SLOW_RIGHT_EXTEND %1
|
||||
INIT_XMM %1
|
||||
EMU_EDGE_FUNC
|
||||
VERTICAL_EXTEND
|
||||
LEFT_EXTEND
|
||||
RIGHT_EXTEND
|
||||
SLOW_V_EXTEND
|
||||
SLOW_LEFT_EXTEND
|
||||
SLOW_RIGHT_EXTEND
|
||||
%endmacro
|
||||
|
||||
emu_edge sse
|
||||
|
|
|
@ -21,6 +21,40 @@
|
|||
#ifndef AVFORMAT_AVFORMAT_H
|
||||
#define AVFORMAT_AVFORMAT_H
|
||||
|
||||
/**
|
||||
* @defgroup libavf I/O and Muxing/Demuxing Library
|
||||
* @{
|
||||
*
|
||||
* @defgroup lavf_decoding Demuxing
|
||||
* @{
|
||||
* @}
|
||||
*
|
||||
* @defgroup lavf_encoding Muxing
|
||||
* @{
|
||||
* @}
|
||||
*
|
||||
* @defgroup lavf_proto I/O Read/Write
|
||||
* @{
|
||||
* @}
|
||||
*
|
||||
* @defgroup lavf_codec Demuxers
|
||||
* @{
|
||||
* @defgroup lavf_codec_native Native Demuxers
|
||||
* @{
|
||||
* @}
|
||||
* @defgroup lavf_codec_wrappers External library wrappers
|
||||
* @{
|
||||
* @}
|
||||
* @}
|
||||
* @defgroup lavf_protos I/O Protocols
|
||||
* @{
|
||||
* @}
|
||||
* @defgroup lavf_internal Internal
|
||||
* @{
|
||||
* @}
|
||||
* @}
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Return the LIBAVFORMAT_VERSION_INT constant.
|
||||
|
|
|
@ -44,21 +44,6 @@
|
|||
/*
|
||||
* First version by Francois Revol revol@free.fr
|
||||
* Seek function by Gael Chardon gael.dev@4now.net
|
||||
*
|
||||
* Features and limitations:
|
||||
* - reads most of the QT files I have (at least the structure),
|
||||
* Sample QuickTime files with mp3 audio can be found at: http://www.3ivx.com/showcase.html
|
||||
* - the code is quite ugly... maybe I won't do it recursive next time :-)
|
||||
*
|
||||
* Funny I didn't know about http://sourceforge.net/projects/qt-ffmpeg/
|
||||
* when coding this :) (it's a writer anyway)
|
||||
*
|
||||
* Reference documents:
|
||||
* http://www.geocities.com/xhelmboyx/quicktime/formats/qtm-layout.txt
|
||||
* Apple:
|
||||
* http://developer.apple.com/documentation/QuickTime/QTFF/
|
||||
* http://developer.apple.com/documentation/QuickTime/QTFF/qtff.pdf
|
||||
* QuickTime is a trademark of Apple (AFAIK :))
|
||||
*/
|
||||
|
||||
#include "qtpalette.h"
|
||||
|
@ -67,13 +52,7 @@
|
|||
#undef NDEBUG
|
||||
#include <assert.h>
|
||||
|
||||
/* XXX: it's the first time I make a recursive parser I think... sorry if it's ugly :P */
|
||||
|
||||
/* those functions parse an atom */
|
||||
/* return code:
|
||||
0: continue to parse next atom
|
||||
<0: error occurred, exit
|
||||
*/
|
||||
/* links atom IDs to parse functions */
|
||||
typedef struct MOVParseTableEntry {
|
||||
uint32_t type;
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include "attributes.h"
|
||||
|
||||
/**
|
||||
* @ingroup lavu_crypto
|
||||
* Calculate the Adler32 checksum of a buffer.
|
||||
*
|
||||
* Passing the return value to a subsequent av_adler32_update() call
|
||||
|
|
|
@ -23,6 +23,12 @@
|
|||
|
||||
#include <stdint.h>
|
||||
|
||||
/**
|
||||
* @defgroup lavu_aes AES
|
||||
* @ingroup lavu_crypto
|
||||
* @{
|
||||
*/
|
||||
|
||||
extern const int av_aes_size;
|
||||
|
||||
struct AVAES;
|
||||
|
@ -44,4 +50,8 @@ int av_aes_init(struct AVAES *a, const uint8_t *key, int key_bits, int decrypt);
|
|||
*/
|
||||
void av_aes_crypt(struct AVAES *a, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* AVUTIL_AES_H */
|
||||
|
|
|
@ -29,7 +29,15 @@
|
|||
* audio conversion routines
|
||||
*/
|
||||
|
||||
/* Audio channel masks */
|
||||
/**
|
||||
* @addtogroup lavu_audio
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup channel_masks Audio channel masks
|
||||
* @{
|
||||
*/
|
||||
#define AV_CH_FRONT_LEFT 0x00000001
|
||||
#define AV_CH_FRONT_RIGHT 0x00000002
|
||||
#define AV_CH_FRONT_CENTER 0x00000004
|
||||
|
@ -56,7 +64,11 @@
|
|||
to be the native codec channel order. */
|
||||
#define AV_CH_LAYOUT_NATIVE 0x8000000000000000LL
|
||||
|
||||
/* Audio channel convenience macros */
|
||||
/**
|
||||
* @}
|
||||
* @defgroup channel_mask_c Audio channel convenience macros
|
||||
* @{
|
||||
* */
|
||||
#define AV_CH_LAYOUT_MONO (AV_CH_FRONT_CENTER)
|
||||
#define AV_CH_LAYOUT_STEREO (AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT)
|
||||
#define AV_CH_LAYOUT_2_1 (AV_CH_LAYOUT_STEREO|AV_CH_BACK_CENTER)
|
||||
|
@ -73,6 +85,10 @@
|
|||
#define AV_CH_LAYOUT_7POINT1_WIDE (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
|
||||
#define AV_CH_LAYOUT_STEREO_DOWNMIX (AV_CH_STEREO_LEFT|AV_CH_STEREO_RIGHT)
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* Return a channel layout id that matches name, 0 if no match.
|
||||
* name can be one or several of the following notations,
|
||||
|
@ -109,4 +125,8 @@ int av_get_channel_layout_nb_channels(int64_t channel_layout);
|
|||
*/
|
||||
int64_t av_get_default_channel_layout(int nb_channels);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* AVUTIL_AUDIOCONVERT_H */
|
||||
|
|
|
@ -24,6 +24,11 @@
|
|||
#include <stddef.h>
|
||||
#include "attributes.h"
|
||||
|
||||
/**
|
||||
* @addtogroup lavu_string
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* Return non-zero if pfx is a prefix of str. If it is, *ptr is set to
|
||||
* the address of the first character in str after the prefix.
|
||||
|
@ -72,7 +77,7 @@ char *av_stristr(const char *haystack, const char *needle);
|
|||
* @param size size of destination buffer
|
||||
* @return the length of src
|
||||
*
|
||||
* WARNING: since the return value is the length of src, src absolutely
|
||||
* @warning since the return value is the length of src, src absolutely
|
||||
* _must_ be a properly 0-terminated string, otherwise this will read beyond
|
||||
* the end of the buffer and possibly crash.
|
||||
*/
|
||||
|
@ -90,9 +95,9 @@ size_t av_strlcpy(char *dst, const char *src, size_t size);
|
|||
* @param size size of destination buffer
|
||||
* @return the total length of src and dst
|
||||
*
|
||||
* WARNING: since the return value use the length of src and dst, these absolutely
|
||||
* _must_ be a properly 0-terminated strings, otherwise this will read beyond
|
||||
* the end of the buffer and possibly crash.
|
||||
* @warning since the return value use the length of src and dst, these
|
||||
* absolutely _must_ be a properly 0-terminated strings, otherwise this
|
||||
* will read beyond the end of the buffer and possibly crash.
|
||||
*/
|
||||
size_t av_strlcat(char *dst, const char *src, size_t size);
|
||||
|
||||
|
@ -187,14 +192,18 @@ static inline int av_tolower(int c)
|
|||
|
||||
/**
|
||||
* Locale independent case-insensitive compare.
|
||||
* Note: This means only ASCII-range characters are case-insensitive
|
||||
* @note This means only ASCII-range characters are case-insensitive
|
||||
*/
|
||||
int av_strcasecmp(const char *a, const char *b);
|
||||
|
||||
/**
|
||||
* Locale independent case-insensitive compare.
|
||||
* Note: This means only ASCII-range characters are case-insensitive
|
||||
* @note This means only ASCII-range characters are case-insensitive
|
||||
*/
|
||||
int av_strncasecmp(const char *a, const char *b, size_t n);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* AVUTIL_AVSTRING_H */
|
||||
|
|
|
@ -26,6 +26,95 @@
|
|||
* external API header
|
||||
*/
|
||||
|
||||
/**
|
||||
* @mainpage
|
||||
*
|
||||
* @section libav_intro Introduction
|
||||
*
|
||||
* This document describe the usage of the different libraries
|
||||
* provided by Libav.
|
||||
*
|
||||
* @li @ref libavc "libavcodec" encoding/decoding library
|
||||
* @li @subpage libavfilter graph based frame editing library
|
||||
* @li @ref libavf "libavformat" I/O and muxing/demuxing library
|
||||
* @li @ref lavu "libavutil" common utility library
|
||||
* @li @subpage libpostproc post processing library
|
||||
* @li @subpage libswscale color conversion and scaling library
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup lavu Common utility functions
|
||||
*
|
||||
* @brief
|
||||
* libavutil contains the code shared across all the other Libav
|
||||
* libraries
|
||||
*
|
||||
* @note In order to use the functions provided by avutil you must include
|
||||
* the specific header.
|
||||
*
|
||||
* @{
|
||||
*
|
||||
* @defgroup lavu_crypto Crypto and Hashing
|
||||
*
|
||||
* @{
|
||||
* @}
|
||||
*
|
||||
* @defgroup lavu_math Maths
|
||||
* @{
|
||||
*
|
||||
* @}
|
||||
*
|
||||
* @defgroup lavu_string String Manipulation
|
||||
*
|
||||
* @{
|
||||
*
|
||||
* @}
|
||||
*
|
||||
* @defgroup lavu_mem Memory Management
|
||||
*
|
||||
* @{
|
||||
*
|
||||
* @}
|
||||
*
|
||||
* @defgroup lavu_data Data Structures
|
||||
* @{
|
||||
*
|
||||
* @}
|
||||
*
|
||||
* @defgroup lavu_audio Audio related
|
||||
*
|
||||
* @{
|
||||
*
|
||||
* @}
|
||||
*
|
||||
* @defgroup lavu_error Error Codes
|
||||
*
|
||||
* @{
|
||||
*
|
||||
* @}
|
||||
*
|
||||
* @defgroup lavu_misc Other
|
||||
*
|
||||
* @{
|
||||
*
|
||||
* @defgroup lavu_internal Internal
|
||||
*
|
||||
* Not exported functions, for internal usage only
|
||||
*
|
||||
* @{
|
||||
*
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @defgroup preproc_misc Preprocessor String Macros
|
||||
*
|
||||
* String manipulation macros
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
#define AV_STRINGIFY(s) AV_TOSTRING(s)
|
||||
#define AV_TOSTRING(s) #s
|
||||
|
@ -35,10 +124,34 @@
|
|||
|
||||
#define AV_PRAGMA(s) _Pragma(#s)
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup version_utils Library Version Macros
|
||||
*
|
||||
* Useful to check and match library version in order to maintain
|
||||
* backward compatibility.
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
#define AV_VERSION_INT(a, b, c) (a<<16 | b<<8 | c)
|
||||
#define AV_VERSION_DOT(a, b, c) a ##.## b ##.## c
|
||||
#define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c)
|
||||
|
||||
/**
|
||||
* @}
|
||||
*
|
||||
* @defgroup lavu_ver Version and Build diagnostics
|
||||
*
|
||||
* Macros and function useful to check at compiletime and at runtime
|
||||
* which version of libavutil is in use.
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
#define LIBAVUTIL_VERSION_MAJOR 51
|
||||
#define LIBAVUTIL_VERSION_MINOR 26
|
||||
#define LIBAVUTIL_VERSION_MICRO 0
|
||||
|
@ -54,8 +167,16 @@
|
|||
#define LIBAVUTIL_IDENT "Lavu" AV_STRINGIFY(LIBAVUTIL_VERSION)
|
||||
|
||||
/**
|
||||
* @}
|
||||
*
|
||||
* @defgroup depr_guards Deprecation guards
|
||||
* Those FF_API_* defines are not part of public API.
|
||||
* They may change, break or disappear at any time.
|
||||
*
|
||||
* They are used mostly internally to mark code that will be removed
|
||||
* on the next major version.
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
#ifndef FF_API_OLD_EVAL_NAMES
|
||||
#define FF_API_OLD_EVAL_NAMES (LIBAVUTIL_VERSION_MAJOR < 52)
|
||||
|
@ -73,6 +194,15 @@
|
|||
#define FF_API_OLD_AVOPTIONS (LIBAVUTIL_VERSION_MAJOR < 52)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @addtogroup lavu_ver
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* Return the LIBAVUTIL_VERSION_INT constant.
|
||||
*/
|
||||
|
@ -88,13 +218,22 @@ const char *avutil_configuration(void);
|
|||
*/
|
||||
const char *avutil_license(void);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @addtogroup lavu_media Media Type
|
||||
* @brief Media Type
|
||||
*/
|
||||
|
||||
enum AVMediaType {
|
||||
AVMEDIA_TYPE_UNKNOWN = -1,
|
||||
AVMEDIA_TYPE_UNKNOWN = -1, ///< Usually treated as AVMEDIA_TYPE_DATA
|
||||
AVMEDIA_TYPE_VIDEO,
|
||||
AVMEDIA_TYPE_AUDIO,
|
||||
AVMEDIA_TYPE_DATA,
|
||||
AVMEDIA_TYPE_DATA, ///< Opaque data information usually continuous
|
||||
AVMEDIA_TYPE_SUBTITLE,
|
||||
AVMEDIA_TYPE_ATTACHMENT,
|
||||
AVMEDIA_TYPE_ATTACHMENT, ///< Opaque data information usually sparse
|
||||
AVMEDIA_TYPE_NB
|
||||
};
|
||||
|
||||
|
@ -104,6 +243,16 @@ enum AVMediaType {
|
|||
*/
|
||||
const char *av_get_media_type_string(enum AVMediaType media_type);
|
||||
|
||||
/**
|
||||
* @defgroup lavu_const Constants
|
||||
* @{
|
||||
*
|
||||
* @defgroup lavu_enc Encoding specific
|
||||
*
|
||||
* @note those definition should move to avcodec
|
||||
* @{
|
||||
*/
|
||||
|
||||
#define FF_LAMBDA_SHIFT 7
|
||||
#define FF_LAMBDA_SCALE (1<<FF_LAMBDA_SHIFT)
|
||||
#define FF_QP2LAMBDA 118 ///< factor to convert from H.263 QP to lambda
|
||||
|
@ -111,10 +260,46 @@ const char *av_get_media_type_string(enum AVMediaType media_type);
|
|||
|
||||
#define FF_QUALITY_SCALE FF_LAMBDA_SCALE //FIXME maybe remove
|
||||
|
||||
/**
|
||||
* @}
|
||||
* @defgroup lavu_time Timestamp specific
|
||||
*
|
||||
* Libav internal timebase and timestamp definitions
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Undefined timestamp value
|
||||
*
|
||||
* Usually reported by demuxer that work on containers that do not provide
|
||||
* either pts or dts.
|
||||
*/
|
||||
|
||||
#define AV_NOPTS_VALUE INT64_C(0x8000000000000000)
|
||||
|
||||
/**
|
||||
* Internal time base represented as integer
|
||||
*/
|
||||
|
||||
#define AV_TIME_BASE 1000000
|
||||
|
||||
/**
|
||||
* Internal time base represented as fractional value
|
||||
*/
|
||||
|
||||
#define AV_TIME_BASE_Q (AVRational){1, AV_TIME_BASE}
|
||||
|
||||
/**
|
||||
* @}
|
||||
* @}
|
||||
* @defgroup lavu_picture Image related
|
||||
*
|
||||
* AVPicture types, pixel formats and basic image planes manipulation.
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
enum AVPictureType {
|
||||
AV_PICTURE_TYPE_NONE = 0, ///< Undefined
|
||||
AV_PICTURE_TYPE_I, ///< Intra
|
||||
|
@ -135,6 +320,10 @@ enum AVPictureType {
|
|||
*/
|
||||
char av_get_picture_type_char(enum AVPictureType pict_type);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* Return x default pointer in case p is NULL.
|
||||
*/
|
||||
|
@ -151,4 +340,9 @@ static inline const void *av_x_if_null(const void *p, const void *x)
|
|||
#include "log.h"
|
||||
#include "pixfmt.h"
|
||||
|
||||
/**
|
||||
* @}
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* AVUTIL_AVUTIL_H */
|
||||
|
|
|
@ -23,6 +23,13 @@
|
|||
|
||||
#include <stdint.h>
|
||||
|
||||
/**
|
||||
* @defgroup lavu_base64 Base64
|
||||
* @ingroup lavu_crypto
|
||||
* @{
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Decode a base64-encoded string.
|
||||
*
|
||||
|
@ -51,4 +58,8 @@ char *av_base64_encode(char *out, int out_size, const uint8_t *in, int in_size);
|
|||
*/
|
||||
#define AV_BASE64_SIZE(x) (((x)+2) / 3 * 4 + 1)
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* AVUTIL_BASE64_H */
|
||||
|
|
|
@ -32,7 +32,11 @@
|
|||
#define AVUTIL_DICT_H
|
||||
|
||||
/**
|
||||
* @defgroup dict_api Public Dictionary API
|
||||
* @addtogroup lavu_dict AVDictionary
|
||||
* @ingroup lavu_data
|
||||
*
|
||||
* @brief Simple key:value store
|
||||
*
|
||||
* @{
|
||||
* Dictionaries are used for storing key:value pairs. To create
|
||||
* an AVDictionary, simply pass an address of a NULL pointer to
|
||||
|
@ -58,7 +62,6 @@
|
|||
* av_dict_free(&d);
|
||||
* @endcode
|
||||
*
|
||||
* @}
|
||||
*/
|
||||
|
||||
#define AV_DICT_MATCH_CASE 1
|
||||
|
@ -117,4 +120,8 @@ void av_dict_copy(AVDictionary **dst, AVDictionary *src, int flags);
|
|||
*/
|
||||
void av_dict_free(AVDictionary **m);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif // AVUTIL_DICT_H
|
||||
|
|
|
@ -27,6 +27,13 @@
|
|||
#include <errno.h>
|
||||
#include "avutil.h"
|
||||
|
||||
/**
|
||||
* @addtogroup lavu_error
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
|
||||
/* error handling */
|
||||
#if EDOM > 0
|
||||
#define AVERROR(e) (-(e)) ///< Returns a negative error code from a POSIX error code, to return from library functions.
|
||||
|
@ -65,4 +72,8 @@
|
|||
*/
|
||||
int av_strerror(int errnum, char *errbuf, size_t errbuf_size);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* AVUTIL_ERROR_H */
|
||||
|
|
|
@ -22,6 +22,9 @@
|
|||
/**
|
||||
* @file
|
||||
* misc image utilities
|
||||
*
|
||||
* @addtogroup lavu_picture
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include "avutil.h"
|
||||
|
@ -127,4 +130,9 @@ int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *lo
|
|||
|
||||
int ff_set_systematic_pal2(uint32_t pal[256], enum PixelFormat pix_fmt);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
#endif /* AVUTIL_IMGUTILS_H */
|
||||
|
|
|
@ -25,6 +25,11 @@
|
|||
#include "config.h"
|
||||
#include "attributes.h"
|
||||
|
||||
/**
|
||||
* @addtogroup lavu_internal
|
||||
* @{
|
||||
*/
|
||||
|
||||
extern const uint32_t ff_inverse[257];
|
||||
|
||||
#if ARCH_ARM
|
||||
|
@ -76,4 +81,7 @@ static inline av_const unsigned int ff_sqrt(unsigned int a)
|
|||
return b - (a < b * b);
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif /* AVUTIL_INTMATH_H */
|
||||
|
|
|
@ -22,6 +22,13 @@
|
|||
#ifndef AVUTIL_LZO_H
|
||||
#define AVUTIL_LZO_H
|
||||
|
||||
/**
|
||||
* @defgroup lavu_lzo LZO
|
||||
* @ingroup lavu_crypto
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
/** @name Error flags returned by av_lzo1x_decode
|
||||
|
@ -63,4 +70,8 @@ int av_lzo1x_decode(void *out, int *outlen, const void *in, int *inlen);
|
|||
*/
|
||||
void av_memcpy_backptr(uint8_t *dst, int back, int cnt);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* AVUTIL_LZO_H */
|
||||
|
|
|
@ -57,6 +57,12 @@
|
|||
#define INFINITY (1.0/0.0)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @addtogroup lavu_math
|
||||
* @{
|
||||
*/
|
||||
|
||||
|
||||
enum AVRounding {
|
||||
AV_ROUND_ZERO = 0, ///< Round toward zero.
|
||||
AV_ROUND_INF = 1, ///< Round away from zero.
|
||||
|
@ -109,4 +115,8 @@ int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b);
|
|||
*/
|
||||
int64_t av_compare_mod(uint64_t a, uint64_t b, uint64_t mod);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* AVUTIL_MATHEMATICS_H */
|
||||
|
|
|
@ -23,6 +23,12 @@
|
|||
|
||||
#include <stdint.h>
|
||||
|
||||
/**
|
||||
* @defgroup lavu_md5 MD5
|
||||
* @ingroup lavu_crypto
|
||||
* @{
|
||||
*/
|
||||
|
||||
extern const int av_md5_size;
|
||||
|
||||
struct AVMD5;
|
||||
|
@ -32,5 +38,9 @@ void av_md5_update(struct AVMD5 *ctx, const uint8_t *src, const int len);
|
|||
void av_md5_final(struct AVMD5 *ctx, uint8_t *dst);
|
||||
void av_md5_sum(uint8_t *dst, const uint8_t *src, const int len);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* AVUTIL_MD5_H */
|
||||
|
||||
|
|
|
@ -30,6 +30,12 @@
|
|||
#include "error.h"
|
||||
#include "avutil.h"
|
||||
|
||||
/**
|
||||
* @addtogroup lavu_mem
|
||||
* @{
|
||||
*/
|
||||
|
||||
|
||||
#if defined(__INTEL_COMPILER) && __INTEL_COMPILER < 1110 || defined(__SUNPRO_C)
|
||||
#define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v
|
||||
#define DECLARE_ASM_CONST(n,t,v) const t __attribute__ ((aligned (n))) v
|
||||
|
@ -170,4 +176,8 @@ static inline int av_size_mult(size_t a, size_t b, size_t *r)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* AVUTIL_MEM_H */
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
|
||||
/**
|
||||
* @defgroup avoptions AVOptions
|
||||
* @ingroup lavu_data
|
||||
* @{
|
||||
* AVOptions provide a generic system to declare options on arbitrary structs
|
||||
* ("objects"). An option can have a help text, a type and a range of possible
|
||||
|
@ -212,7 +213,6 @@
|
|||
* filled with option as a parameter. This allows to set some options
|
||||
* that cannot be set otherwise, since e.g. the input file format is not known
|
||||
* before the file is actually opened.
|
||||
* @}
|
||||
*/
|
||||
|
||||
enum AVOptionType{
|
||||
|
@ -585,6 +585,7 @@ int av_opt_get_int (void *obj, const char *name, int search_flags, int64_t
|
|||
int av_opt_get_double(void *obj, const char *name, int search_flags, double *out_val);
|
||||
int av_opt_get_q (void *obj, const char *name, int search_flags, AVRational *out_val);
|
||||
/**
|
||||
* @}
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
|
|
@ -25,21 +25,21 @@
|
|||
* @file
|
||||
* pixel format definitions
|
||||
*
|
||||
* @warning This file has to be considered an internal but installed
|
||||
* header, so it should not be directly included in your projects.
|
||||
*/
|
||||
|
||||
#include "libavutil/avconfig.h"
|
||||
|
||||
/**
|
||||
* Pixel format. Notes:
|
||||
* Pixel format.
|
||||
*
|
||||
* @note
|
||||
* PIX_FMT_RGB32 is handled in an endian-specific manner. An RGBA
|
||||
* color is put together as:
|
||||
* (A << 24) | (R << 16) | (G << 8) | B
|
||||
* This is stored as BGRA on little-endian CPU architectures and ARGB on
|
||||
* big-endian CPUs.
|
||||
*
|
||||
* @par
|
||||
* When the pixel format is palettized RGB (PIX_FMT_PAL8), the palettized
|
||||
* image data is stored in AVFrame.data[0]. The palette is transported in
|
||||
* AVFrame.data[1], is 1024 bytes long (256 4-byte entries) and is
|
||||
|
@ -49,13 +49,15 @@
|
|||
* This is important as many custom PAL8 video codecs that were designed
|
||||
* to run on the IBM VGA graphics adapter use 6-bit palette components.
|
||||
*
|
||||
* @par
|
||||
* For all the 8bit per pixel formats, an RGB32 palette is in data[1] like
|
||||
* for pal8. This palette is filled in automatically by the function
|
||||
* allocating the picture.
|
||||
*
|
||||
* Note, make sure that all newly added big endian formats have pix_fmt&1==1
|
||||
* and that all newly added little endian formats have pix_fmt&1==0
|
||||
* this allows simpler detection of big vs little endian.
|
||||
* @note
|
||||
* make sure that all newly added big endian formats have pix_fmt&1==1
|
||||
* and that all newly added little endian formats have pix_fmt&1==0
|
||||
* this allows simpler detection of big vs little endian.
|
||||
*/
|
||||
enum PixelFormat {
|
||||
PIX_FMT_NONE= -1,
|
||||
|
|
|
@ -22,6 +22,10 @@
|
|||
#define AVUTIL_RANDOM_SEED_H
|
||||
|
||||
#include <stdint.h>
|
||||
/**
|
||||
* @addtogroup lavu_crypto
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* Get a seed to use in conjunction with random functions.
|
||||
|
@ -32,4 +36,8 @@
|
|||
*/
|
||||
uint32_t av_get_random_seed(void);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* AVUTIL_RANDOM_SEED_H */
|
||||
|
|
|
@ -32,6 +32,11 @@
|
|||
#include <limits.h>
|
||||
#include "attributes.h"
|
||||
|
||||
/**
|
||||
* @addtogroup lavu_math
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* rational number numerator/denominator
|
||||
*/
|
||||
|
@ -132,4 +137,8 @@ int av_nearer_q(AVRational q, AVRational q1, AVRational q2);
|
|||
*/
|
||||
int av_find_nearest_q_idx(AVRational q, const AVRational* q_list);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* AVUTIL_RATIONAL_H */
|
||||
|
|
|
@ -23,6 +23,12 @@
|
|||
|
||||
#include <stdint.h>
|
||||
|
||||
/**
|
||||
* @defgroup lavu_sha SHA
|
||||
* @ingroup lavu_crypto
|
||||
* @{
|
||||
*/
|
||||
|
||||
extern const int av_sha_size;
|
||||
|
||||
struct AVSHA;
|
||||
|
@ -53,4 +59,8 @@ void av_sha_update(struct AVSHA* context, const uint8_t* data, unsigned int len)
|
|||
*/
|
||||
void av_sha_final(struct AVSHA* context, uint8_t *digest);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* AVUTIL_SHA_H */
|
||||
|
|
|
@ -21,14 +21,24 @@
|
|||
/**
|
||||
* @file
|
||||
* A tree container.
|
||||
* Insertion, removal, finding equal, largest which is smaller than and
|
||||
* smallest which is larger than, all have O(log n) worst case complexity.
|
||||
* @author Michael Niedermayer <michaelni@gmx.at>
|
||||
*/
|
||||
|
||||
#ifndef AVUTIL_TREE_H
|
||||
#define AVUTIL_TREE_H
|
||||
|
||||
/**
|
||||
* @addtogroup lavu_tree AVTree
|
||||
* @ingroup lavu_data
|
||||
*
|
||||
* Low complexity tree container
|
||||
*
|
||||
* Insertion, removal, finding equal, largest which is smaller than and
|
||||
* smallest which is larger than, all have O(log n) worst case complexity.
|
||||
* @{
|
||||
*/
|
||||
|
||||
|
||||
struct AVTreeNode;
|
||||
extern const int av_tree_node_size;
|
||||
|
||||
|
@ -91,5 +101,8 @@ void av_tree_destroy(struct AVTreeNode *t);
|
|||
*/
|
||||
void av_tree_enumerate(struct AVTreeNode *t, void *opaque, int (*cmp)(void *opaque, void *elem), int (*enu)(void *opaque, void *elem));
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* AVUTIL_TREE_H */
|
||||
|
|
|
@ -29,19 +29,27 @@ if [ -n "$do_mpeg2" ] ; then
|
|||
# mpeg2
|
||||
do_video_encoding mpeg2.mpg "-qscale 10 -vcodec mpeg2video -f mpeg1video"
|
||||
do_video_decoding
|
||||
fi
|
||||
|
||||
if [ -n "$do_mpeg2_ivlc_qprd" ]; then
|
||||
# mpeg2 encoding intra vlc qprd
|
||||
do_video_encoding mpeg2ivlc-qprd.mpg "-vb 500k -bf 2 -trellis 1 -flags +qprd+mv0 -flags2 +ivlc -cmp 2 -subcmp 2 -mbd rd -vcodec mpeg2video -f mpeg2video"
|
||||
do_video_decoding
|
||||
fi
|
||||
|
||||
if [ -n "$do_mpeg2_422" ]; then
|
||||
#mpeg2 4:2:2 encoding
|
||||
do_video_encoding mpeg2_422.mpg "-vb 1000k -bf 2 -trellis 1 -flags +qprd+mv0+ildct+ilme -flags2 +ivlc -mbd rd -vcodec mpeg2video -pix_fmt yuv422p -f mpeg2video"
|
||||
do_video_decoding
|
||||
fi
|
||||
|
||||
if [ -n "$do_mpeg2_idct_int" ]; then
|
||||
# mpeg2
|
||||
do_video_encoding mpeg2.mpg "-qscale 10 -vcodec mpeg2video -idct int -dct int -f mpeg1video"
|
||||
do_video_encoding mpeg2_idct_int.mpg "-qscale 10 -vcodec mpeg2video -idct int -dct int -f mpeg1video"
|
||||
do_video_decoding "-idct int"
|
||||
fi
|
||||
|
||||
if [ -n "$do_mpeg2_ilace" ]; then
|
||||
# mpeg2 encoding interlaced
|
||||
do_video_encoding mpeg2i.mpg "-qscale 10 -vcodec mpeg2video -f mpeg1video -flags +ildct+ilme"
|
||||
do_video_decoding
|
||||
|
@ -51,7 +59,9 @@ if [ -n "$do_mpeg2thread" ] ; then
|
|||
# mpeg2 encoding interlaced
|
||||
do_video_encoding mpeg2thread.mpg "-qscale 10 -vcodec mpeg2video -f mpeg1video -bf 2 -flags +ildct+ilme -threads 2"
|
||||
do_video_decoding
|
||||
fi
|
||||
|
||||
if [ -n "$do_mpeg2thread_ilace" ]; then
|
||||
# mpeg2 encoding interlaced using intra vlc
|
||||
do_video_encoding mpeg2threadivlc.mpg "-qscale 10 -vcodec mpeg2video -f mpeg1video -bf 2 -flags +ildct+ilme -flags2 +ivlc -threads 2"
|
||||
do_video_decoding
|
||||
|
@ -125,13 +135,19 @@ fi
|
|||
if [ -n "$do_mpeg4adv" ] ; then
|
||||
do_video_encoding mpeg4-adv.avi "-qscale 9 -flags +mv4+part+aic -trellis 1 -mbd bits -ps 200 -an -vcodec mpeg4"
|
||||
do_video_decoding
|
||||
fi
|
||||
|
||||
if [ -n "$do_mpeg4_qprd" ]; then
|
||||
do_video_encoding mpeg4-qprd.avi "-b 450k -bf 2 -trellis 1 -flags +mv4+qprd+mv0 -cmp 2 -subcmp 2 -mbd rd -an -vcodec mpeg4"
|
||||
do_video_decoding
|
||||
fi
|
||||
|
||||
if [ -n "$do_mpeg4_adap" ]; then
|
||||
do_video_encoding mpeg4-adap.avi "-b 550k -bf 2 -flags +mv4+mv0 -trellis 1 -cmp 1 -subcmp 2 -mbd rd -scplx_mask 0.3 -an -vcodec mpeg4"
|
||||
do_video_decoding
|
||||
fi
|
||||
|
||||
if [ -n "$do_mpeg4_qpel" ]; then
|
||||
do_video_encoding mpeg4-Q.avi "-qscale 7 -flags +mv4+qpel -mbd 2 -bf 2 -cmp 1 -subcmp 2 -an -vcodec mpeg4"
|
||||
do_video_decoding
|
||||
fi
|
||||
|
@ -219,7 +235,9 @@ fi
|
|||
if [ -n "$do_dv" ] ; then
|
||||
do_video_encoding dv.dv "-dct int -s pal -an"
|
||||
do_video_decoding "" "-s cif"
|
||||
fi
|
||||
|
||||
if [ -n "$do_dv_411" ]; then
|
||||
do_video_encoding dv411.dv "-dct int -s pal -an -pix_fmt yuv411p -sws_flags area+accurate_rnd+bitexact"
|
||||
do_video_decoding "" "-s cif -sws_flags area+accurate_rnd+bitexact"
|
||||
fi
|
||||
|
|
|
@ -1,8 +1,4 @@
|
|||
4d572f758b55a1756adf9f54132f3b9e *./tests/data/vsynth1/dv.dv
|
||||
7200000 ./tests/data/vsynth1/dv.dv
|
||||
02ac7cdeab91d4d5621e7ce96dddc498 *./tests/data/dv.vsynth1.out.yuv
|
||||
stddev: 6.90 PSNR: 31.34 MAXDIFF: 76 bytes: 7603200/ 7603200
|
||||
f179899efba432c6f01149c36c709092 *./tests/data/vsynth1/dv411.dv
|
||||
7200000 ./tests/data/vsynth1/dv411.dv
|
||||
b6640a3a572353f51284acb746eb00c4 *./tests/data/dv.vsynth1.out.yuv
|
||||
stddev: 30.76 PSNR: 18.37 MAXDIFF: 205 bytes: 7603200/ 7603200
|
||||
stddev: 6.90 PSNR: 31.34 MAXDIFF: 76 bytes: 7603200/ 7603200
|
4
tests/ref/vsynth1/dv_411
Normal file
4
tests/ref/vsynth1/dv_411
Normal file
|
@ -0,0 +1,4 @@
|
|||
f179899efba432c6f01149c36c709092 *./tests/data/vsynth1/dv411.dv
|
||||
7200000 ./tests/data/vsynth1/dv411.dv
|
||||
b6640a3a572353f51284acb746eb00c4 *./tests/data/dv_411.vsynth1.out.yuv
|
||||
stddev: 30.76 PSNR: 18.37 MAXDIFF: 205 bytes: 7603200/ 7603200
|
|
@ -2,19 +2,3 @@ fbddea2368cd2028fc8db4dfd4682e94 *./tests/data/vsynth1/mpeg2.mpg
|
|||
728044 ./tests/data/vsynth1/mpeg2.mpg
|
||||
b41ca49c1a02e66ce64d262e2cdaec15 *./tests/data/mpeg2.vsynth1.out.yuv
|
||||
stddev: 7.65 PSNR: 30.45 MAXDIFF: 84 bytes: 7603200/ 7603200
|
||||
8f6b20714918e6443e0c03716ed06f0d *./tests/data/vsynth1/mpeg2ivlc-qprd.mpg
|
||||
783552 ./tests/data/vsynth1/mpeg2ivlc-qprd.mpg
|
||||
98eb9da15f880978e7f2ee1e7ce476ef *./tests/data/mpeg2.vsynth1.out.yuv
|
||||
stddev: 10.07 PSNR: 28.06 MAXDIFF: 165 bytes: 7603200/ 7603200
|
||||
af0cb75451aaa807beb5102707a98823 *./tests/data/vsynth1/mpeg2_422.mpg
|
||||
728200 ./tests/data/vsynth1/mpeg2_422.mpg
|
||||
29b518282493203e83b27a939795dc3a *./tests/data/mpeg2.vsynth1.out.yuv
|
||||
stddev: 63.33 PSNR: 12.10 MAXDIFF: 242 bytes: 10137600/ 7603200
|
||||
4c067397b504d65532d7779cd36f3f88 *./tests/data/vsynth1/mpeg2.mpg
|
||||
725668 ./tests/data/vsynth1/mpeg2.mpg
|
||||
9f7b065f98d57cdecf90e6f7a2524eb5 *./tests/data/mpeg2.vsynth1.out.yuv
|
||||
stddev: 7.65 PSNR: 30.45 MAXDIFF: 81 bytes: 7603200/ 7603200
|
||||
ec3f6713c88a2b41f6c369fd64341077 *./tests/data/vsynth1/mpeg2i.mpg
|
||||
737473 ./tests/data/vsynth1/mpeg2i.mpg
|
||||
97615390fdd69abfcbc7e02df863a7d2 *./tests/data/mpeg2.vsynth1.out.yuv
|
||||
stddev: 7.67 PSNR: 30.43 MAXDIFF: 84 bytes: 7603200/ 7603200
|
||||
|
|
4
tests/ref/vsynth1/mpeg2_422
Normal file
4
tests/ref/vsynth1/mpeg2_422
Normal file
|
@ -0,0 +1,4 @@
|
|||
af0cb75451aaa807beb5102707a98823 *./tests/data/vsynth1/mpeg2_422.mpg
|
||||
728200 ./tests/data/vsynth1/mpeg2_422.mpg
|
||||
29b518282493203e83b27a939795dc3a *./tests/data/mpeg2_422.vsynth1.out.yuv
|
||||
stddev: 63.33 PSNR: 12.10 MAXDIFF: 242 bytes: 10137600/ 7603200
|
4
tests/ref/vsynth1/mpeg2_idct_int
Normal file
4
tests/ref/vsynth1/mpeg2_idct_int
Normal file
|
@ -0,0 +1,4 @@
|
|||
4c067397b504d65532d7779cd36f3f88 *./tests/data/vsynth1/mpeg2_idct_int.mpg
|
||||
725668 ./tests/data/vsynth1/mpeg2_idct_int.mpg
|
||||
9f7b065f98d57cdecf90e6f7a2524eb5 *./tests/data/mpeg2_idct_int.vsynth1.out.yuv
|
||||
stddev: 7.65 PSNR: 30.45 MAXDIFF: 81 bytes: 7603200/ 7603200
|
4
tests/ref/vsynth1/mpeg2_ilace
Normal file
4
tests/ref/vsynth1/mpeg2_ilace
Normal file
|
@ -0,0 +1,4 @@
|
|||
ec3f6713c88a2b41f6c369fd64341077 *./tests/data/vsynth1/mpeg2i.mpg
|
||||
737473 ./tests/data/vsynth1/mpeg2i.mpg
|
||||
97615390fdd69abfcbc7e02df863a7d2 *./tests/data/mpeg2_ilace.vsynth1.out.yuv
|
||||
stddev: 7.67 PSNR: 30.43 MAXDIFF: 84 bytes: 7603200/ 7603200
|
4
tests/ref/vsynth1/mpeg2_ivlc_qprd
Normal file
4
tests/ref/vsynth1/mpeg2_ivlc_qprd
Normal file
|
@ -0,0 +1,4 @@
|
|||
8f6b20714918e6443e0c03716ed06f0d *./tests/data/vsynth1/mpeg2ivlc-qprd.mpg
|
||||
783552 ./tests/data/vsynth1/mpeg2ivlc-qprd.mpg
|
||||
98eb9da15f880978e7f2ee1e7ce476ef *./tests/data/mpeg2_ivlc_qprd.vsynth1.out.yuv
|
||||
stddev: 10.07 PSNR: 28.06 MAXDIFF: 165 bytes: 7603200/ 7603200
|
|
@ -1,12 +1,4 @@
|
|||
ecd183706688bd977c9994c3d1b23d61 *./tests/data/vsynth1/mpeg2thread.mpg
|
||||
801313 ./tests/data/vsynth1/mpeg2thread.mpg
|
||||
d1658911ca83f5616c1d32abc40750de *./tests/data/mpeg2thread.vsynth1.out.yuv
|
||||
stddev: 7.63 PSNR: 30.48 MAXDIFF: 110 bytes: 7603200/ 7603200
|
||||
23d600b026222253c2340e23300a4c02 *./tests/data/vsynth1/mpeg2threadivlc.mpg
|
||||
791773 ./tests/data/vsynth1/mpeg2threadivlc.mpg
|
||||
d1658911ca83f5616c1d32abc40750de *./tests/data/mpeg2thread.vsynth1.out.yuv
|
||||
stddev: 7.63 PSNR: 30.48 MAXDIFF: 110 bytes: 7603200/ 7603200
|
||||
d119fe917dd81d1ff758b4ce684a8d9d *./tests/data/vsynth1/mpeg2reuse.mpg
|
||||
2074636 ./tests/data/vsynth1/mpeg2reuse.mpg
|
||||
92ced6afe8c02304943c400cce51a5f4 *./tests/data/mpeg2thread.vsynth1.out.yuv
|
||||
stddev: 7.66 PSNR: 30.44 MAXDIFF: 111 bytes: 7603200/ 7603200
|
||||
stddev: 7.63 PSNR: 30.48 MAXDIFF: 110 bytes: 7603200/ 7603200
|
8
tests/ref/vsynth1/mpeg2thread_ilace
Normal file
8
tests/ref/vsynth1/mpeg2thread_ilace
Normal file
|
@ -0,0 +1,8 @@
|
|||
23d600b026222253c2340e23300a4c02 *./tests/data/vsynth1/mpeg2threadivlc.mpg
|
||||
791773 ./tests/data/vsynth1/mpeg2threadivlc.mpg
|
||||
d1658911ca83f5616c1d32abc40750de *./tests/data/mpeg2thread_ilace.vsynth1.out.yuv
|
||||
stddev: 7.63 PSNR: 30.48 MAXDIFF: 110 bytes: 7603200/ 7603200
|
||||
d119fe917dd81d1ff758b4ce684a8d9d *./tests/data/vsynth1/mpeg2reuse.mpg
|
||||
2074636 ./tests/data/vsynth1/mpeg2reuse.mpg
|
||||
92ced6afe8c02304943c400cce51a5f4 *./tests/data/mpeg2thread_ilace.vsynth1.out.yuv
|
||||
stddev: 7.66 PSNR: 30.44 MAXDIFF: 111 bytes: 7603200/ 7603200
|
4
tests/ref/vsynth1/mpeg4_adap
Normal file
4
tests/ref/vsynth1/mpeg4_adap
Normal file
|
@ -0,0 +1,4 @@
|
|||
2d870c0da9ab2231ab5fc06981e70399 *./tests/data/vsynth1/mpeg4-adap.avi
|
||||
403456 ./tests/data/vsynth1/mpeg4-adap.avi
|
||||
fa2049396479b5f170aa764fed5b2a31 *./tests/data/mpeg4_adap.vsynth1.out.yuv
|
||||
stddev: 14.05 PSNR: 25.17 MAXDIFF: 184 bytes: 7603200/ 7603200
|
4
tests/ref/vsynth1/mpeg4_qpel
Normal file
4
tests/ref/vsynth1/mpeg4_qpel
Normal file
|
@ -0,0 +1,4 @@
|
|||
3bf17c3d04f52988386ce106a2a58976 *./tests/data/vsynth1/mpeg4-Q.avi
|
||||
860678 ./tests/data/vsynth1/mpeg4-Q.avi
|
||||
756928496245ecc701f79eebeec8e5e6 *./tests/data/mpeg4_qpel.vsynth1.out.yuv
|
||||
stddev: 5.63 PSNR: 33.12 MAXDIFF: 70 bytes: 7603200/ 7603200
|
4
tests/ref/vsynth1/mpeg4_qprd
Normal file
4
tests/ref/vsynth1/mpeg4_qprd
Normal file
|
@ -0,0 +1,4 @@
|
|||
d6b7e724a6ad66ab5e4c5a499218b40d *./tests/data/vsynth1/mpeg4-qprd.avi
|
||||
710944 ./tests/data/vsynth1/mpeg4-qprd.avi
|
||||
e65f4c7f343fe2bad1cac44b7da5f7c4 *./tests/data/mpeg4_qprd.vsynth1.out.yuv
|
||||
stddev: 9.79 PSNR: 28.31 MAXDIFF: 176 bytes: 7603200/ 7603200
|
|
@ -2,15 +2,3 @@
|
|||
589716 ./tests/data/vsynth1/mpeg4-adv.avi
|
||||
f8b226876b1b2c0b98fd6928fd9adbd8 *./tests/data/mpeg4adv.vsynth1.out.yuv
|
||||
stddev: 6.98 PSNR: 31.25 MAXDIFF: 84 bytes: 7603200/ 7603200
|
||||
d6b7e724a6ad66ab5e4c5a499218b40d *./tests/data/vsynth1/mpeg4-qprd.avi
|
||||
710944 ./tests/data/vsynth1/mpeg4-qprd.avi
|
||||
e65f4c7f343fe2bad1cac44b7da5f7c4 *./tests/data/mpeg4adv.vsynth1.out.yuv
|
||||
stddev: 9.79 PSNR: 28.31 MAXDIFF: 176 bytes: 7603200/ 7603200
|
||||
2d870c0da9ab2231ab5fc06981e70399 *./tests/data/vsynth1/mpeg4-adap.avi
|
||||
403456 ./tests/data/vsynth1/mpeg4-adap.avi
|
||||
fa2049396479b5f170aa764fed5b2a31 *./tests/data/mpeg4adv.vsynth1.out.yuv
|
||||
stddev: 14.05 PSNR: 25.17 MAXDIFF: 184 bytes: 7603200/ 7603200
|
||||
3bf17c3d04f52988386ce106a2a58976 *./tests/data/vsynth1/mpeg4-Q.avi
|
||||
860678 ./tests/data/vsynth1/mpeg4-Q.avi
|
||||
756928496245ecc701f79eebeec8e5e6 *./tests/data/mpeg4adv.vsynth1.out.yuv
|
||||
stddev: 5.63 PSNR: 33.12 MAXDIFF: 70 bytes: 7603200/ 7603200
|
||||
|
|
|
@ -1,8 +1,4 @@
|
|||
85b8d55b0b68bb3fc2e90babb580f9b7 *./tests/data/vsynth2/dv.dv
|
||||
7200000 ./tests/data/vsynth2/dv.dv
|
||||
7ec62bd3350a6848364669e6e1e4b9cc *./tests/data/dv.vsynth2.out.yuv
|
||||
stddev: 1.71 PSNR: 43.47 MAXDIFF: 33 bytes: 7603200/ 7603200
|
||||
e428508f400327aeb96969c08fb9e1b5 *./tests/data/vsynth2/dv411.dv
|
||||
7200000 ./tests/data/vsynth2/dv411.dv
|
||||
7f9fa421028aabb11eaf4c6513a5a843 *./tests/data/dv.vsynth2.out.yuv
|
||||
stddev: 10.09 PSNR: 28.05 MAXDIFF: 60 bytes: 7603200/ 7603200
|
||||
stddev: 1.71 PSNR: 43.47 MAXDIFF: 33 bytes: 7603200/ 7603200
|
4
tests/ref/vsynth2/dv_411
Normal file
4
tests/ref/vsynth2/dv_411
Normal file
|
@ -0,0 +1,4 @@
|
|||
e428508f400327aeb96969c08fb9e1b5 *./tests/data/vsynth2/dv411.dv
|
||||
7200000 ./tests/data/vsynth2/dv411.dv
|
||||
7f9fa421028aabb11eaf4c6513a5a843 *./tests/data/dv_411.vsynth2.out.yuv
|
||||
stddev: 10.09 PSNR: 28.05 MAXDIFF: 60 bytes: 7603200/ 7603200
|
|
@ -2,19 +2,3 @@
|
|||
198667 ./tests/data/vsynth2/mpeg2.mpg
|
||||
b7cae8a1f751b821cddcbe4d5dbc518c *./tests/data/mpeg2.vsynth2.out.yuv
|
||||
stddev: 4.96 PSNR: 34.20 MAXDIFF: 59 bytes: 7603200/ 7603200
|
||||
1ba5efeb53fab7b4b71edc96d86f6c91 *./tests/data/vsynth2/mpeg2ivlc-qprd.mpg
|
||||
244694 ./tests/data/vsynth2/mpeg2ivlc-qprd.mpg
|
||||
b26e21599dee48a174bdbc40b2817e55 *./tests/data/mpeg2.vsynth2.out.yuv
|
||||
stddev: 4.15 PSNR: 35.76 MAXDIFF: 74 bytes: 7603200/ 7603200
|
||||
2c8e33c2d2efab86fc16a195f6877682 *./tests/data/vsynth2/mpeg2_422.mpg
|
||||
356124 ./tests/data/vsynth2/mpeg2_422.mpg
|
||||
de44597c6c470f3e7019b31245a3ff69 *./tests/data/mpeg2.vsynth2.out.yuv
|
||||
stddev: 54.55 PSNR: 13.39 MAXDIFF: 201 bytes: 10137600/ 7603200
|
||||
f979bcca866e6e4cad5dc6cb06e56cfb *./tests/data/vsynth2/mpeg2.mpg
|
||||
198041 ./tests/data/vsynth2/mpeg2.mpg
|
||||
f6d9bf24ff8676a7f6076c05cd2c81a3 *./tests/data/mpeg2.vsynth2.out.yuv
|
||||
stddev: 4.97 PSNR: 34.19 MAXDIFF: 58 bytes: 7603200/ 7603200
|
||||
f90197a8b6e62ae25f82625337f27240 *./tests/data/vsynth2/mpeg2i.mpg
|
||||
204579 ./tests/data/vsynth2/mpeg2i.mpg
|
||||
ea5057b60146c06d40449cdfc686bf13 *./tests/data/mpeg2.vsynth2.out.yuv
|
||||
stddev: 4.98 PSNR: 34.18 MAXDIFF: 65 bytes: 7603200/ 7603200
|
||||
|
|
4
tests/ref/vsynth2/mpeg2_422
Normal file
4
tests/ref/vsynth2/mpeg2_422
Normal file
|
@ -0,0 +1,4 @@
|
|||
2c8e33c2d2efab86fc16a195f6877682 *./tests/data/vsynth2/mpeg2_422.mpg
|
||||
356124 ./tests/data/vsynth2/mpeg2_422.mpg
|
||||
de44597c6c470f3e7019b31245a3ff69 *./tests/data/mpeg2_422.vsynth2.out.yuv
|
||||
stddev: 54.55 PSNR: 13.39 MAXDIFF: 201 bytes: 10137600/ 7603200
|
4
tests/ref/vsynth2/mpeg2_idct_int
Normal file
4
tests/ref/vsynth2/mpeg2_idct_int
Normal file
|
@ -0,0 +1,4 @@
|
|||
f979bcca866e6e4cad5dc6cb06e56cfb *./tests/data/vsynth2/mpeg2_idct_int.mpg
|
||||
198041 ./tests/data/vsynth2/mpeg2_idct_int.mpg
|
||||
f6d9bf24ff8676a7f6076c05cd2c81a3 *./tests/data/mpeg2_idct_int.vsynth2.out.yuv
|
||||
stddev: 4.97 PSNR: 34.19 MAXDIFF: 58 bytes: 7603200/ 7603200
|
4
tests/ref/vsynth2/mpeg2_ilace
Normal file
4
tests/ref/vsynth2/mpeg2_ilace
Normal file
|
@ -0,0 +1,4 @@
|
|||
f90197a8b6e62ae25f82625337f27240 *./tests/data/vsynth2/mpeg2i.mpg
|
||||
204579 ./tests/data/vsynth2/mpeg2i.mpg
|
||||
ea5057b60146c06d40449cdfc686bf13 *./tests/data/mpeg2_ilace.vsynth2.out.yuv
|
||||
stddev: 4.98 PSNR: 34.18 MAXDIFF: 65 bytes: 7603200/ 7603200
|
4
tests/ref/vsynth2/mpeg2_ivlc_qprd
Normal file
4
tests/ref/vsynth2/mpeg2_ivlc_qprd
Normal file
|
@ -0,0 +1,4 @@
|
|||
1ba5efeb53fab7b4b71edc96d86f6c91 *./tests/data/vsynth2/mpeg2ivlc-qprd.mpg
|
||||
244694 ./tests/data/vsynth2/mpeg2ivlc-qprd.mpg
|
||||
b26e21599dee48a174bdbc40b2817e55 *./tests/data/mpeg2_ivlc_qprd.vsynth2.out.yuv
|
||||
stddev: 4.15 PSNR: 35.76 MAXDIFF: 74 bytes: 7603200/ 7603200
|
|
@ -1,12 +1,4 @@
|
|||
889c754a42d7689b228853e1ece6d345 *./tests/data/vsynth2/mpeg2thread.mpg
|
||||
179650 ./tests/data/vsynth2/mpeg2thread.mpg
|
||||
8c6a7ed2eb73bd18fd2bb9829464100d *./tests/data/mpeg2thread.vsynth2.out.yuv
|
||||
stddev: 4.72 PSNR: 34.65 MAXDIFF: 72 bytes: 7603200/ 7603200
|
||||
10b900e32809758857c596d56746e00e *./tests/data/vsynth2/mpeg2threadivlc.mpg
|
||||
178801 ./tests/data/vsynth2/mpeg2threadivlc.mpg
|
||||
8c6a7ed2eb73bd18fd2bb9829464100d *./tests/data/mpeg2thread.vsynth2.out.yuv
|
||||
stddev: 4.72 PSNR: 34.65 MAXDIFF: 72 bytes: 7603200/ 7603200
|
||||
864d6bf2982a61e510003a518be65a2d *./tests/data/vsynth2/mpeg2reuse.mpg
|
||||
383419 ./tests/data/vsynth2/mpeg2reuse.mpg
|
||||
bb20fa080cfd2b0a687ea7376ff4f902 *./tests/data/mpeg2thread.vsynth2.out.yuv
|
||||
stddev: 4.73 PSNR: 34.63 MAXDIFF: 72 bytes: 7603200/ 7603200
|
||||
stddev: 4.72 PSNR: 34.65 MAXDIFF: 72 bytes: 7603200/ 7603200
|
8
tests/ref/vsynth2/mpeg2thread_ilace
Normal file
8
tests/ref/vsynth2/mpeg2thread_ilace
Normal file
|
@ -0,0 +1,8 @@
|
|||
10b900e32809758857c596d56746e00e *./tests/data/vsynth2/mpeg2threadivlc.mpg
|
||||
178801 ./tests/data/vsynth2/mpeg2threadivlc.mpg
|
||||
8c6a7ed2eb73bd18fd2bb9829464100d *./tests/data/mpeg2thread_ilace.vsynth2.out.yuv
|
||||
stddev: 4.72 PSNR: 34.65 MAXDIFF: 72 bytes: 7603200/ 7603200
|
||||
864d6bf2982a61e510003a518be65a2d *./tests/data/vsynth2/mpeg2reuse.mpg
|
||||
383419 ./tests/data/vsynth2/mpeg2reuse.mpg
|
||||
bb20fa080cfd2b0a687ea7376ff4f902 *./tests/data/mpeg2thread_ilace.vsynth2.out.yuv
|
||||
stddev: 4.73 PSNR: 34.63 MAXDIFF: 72 bytes: 7603200/ 7603200
|
4
tests/ref/vsynth2/mpeg4_adap
Normal file
4
tests/ref/vsynth2/mpeg4_adap
Normal file
|
@ -0,0 +1,4 @@
|
|||
547e1849dcf910935ff6383ca49e5706 *./tests/data/vsynth2/mpeg4-adap.avi
|
||||
198510 ./tests/data/vsynth2/mpeg4-adap.avi
|
||||
4affb83f6adc94f31024b4f9e0168945 *./tests/data/mpeg4_adap.vsynth2.out.yuv
|
||||
stddev: 3.75 PSNR: 36.65 MAXDIFF: 71 bytes: 7603200/ 7603200
|
4
tests/ref/vsynth2/mpeg4_qpel
Normal file
4
tests/ref/vsynth2/mpeg4_qpel
Normal file
|
@ -0,0 +1,4 @@
|
|||
7680d2e7d34399dfdfb8a49cf1e10239 *./tests/data/vsynth2/mpeg4-Q.avi
|
||||
163688 ./tests/data/vsynth2/mpeg4-Q.avi
|
||||
26dc7c78955fa678fbf150e236eb5627 *./tests/data/mpeg4_qpel.vsynth2.out.yuv
|
||||
stddev: 3.97 PSNR: 36.14 MAXDIFF: 54 bytes: 7603200/ 7603200
|
4
tests/ref/vsynth2/mpeg4_qprd
Normal file
4
tests/ref/vsynth2/mpeg4_qprd
Normal file
|
@ -0,0 +1,4 @@
|
|||
fd5ab0f55dbc959316e32923e86290df *./tests/data/vsynth2/mpeg4-qprd.avi
|
||||
231458 ./tests/data/vsynth2/mpeg4-qprd.avi
|
||||
de8a883865e2dff7a51f66da6c48df48 *./tests/data/mpeg4_qprd.vsynth2.out.yuv
|
||||
stddev: 3.71 PSNR: 36.72 MAXDIFF: 61 bytes: 7603200/ 7603200
|
|
@ -2,15 +2,3 @@ dee7be19486a76d96c88d18eefba8f86 *./tests/data/vsynth2/mpeg4-adv.avi
|
|||
141546 ./tests/data/vsynth2/mpeg4-adv.avi
|
||||
3f3a21e9db85a9c0f7022f557a5374c1 *./tests/data/mpeg4adv.vsynth2.out.yuv
|
||||
stddev: 4.94 PSNR: 34.25 MAXDIFF: 69 bytes: 7603200/ 7603200
|
||||
fd5ab0f55dbc959316e32923e86290df *./tests/data/vsynth2/mpeg4-qprd.avi
|
||||
231458 ./tests/data/vsynth2/mpeg4-qprd.avi
|
||||
de8a883865e2dff7a51f66da6c48df48 *./tests/data/mpeg4adv.vsynth2.out.yuv
|
||||
stddev: 3.71 PSNR: 36.72 MAXDIFF: 61 bytes: 7603200/ 7603200
|
||||
547e1849dcf910935ff6383ca49e5706 *./tests/data/vsynth2/mpeg4-adap.avi
|
||||
198510 ./tests/data/vsynth2/mpeg4-adap.avi
|
||||
4affb83f6adc94f31024b4f9e0168945 *./tests/data/mpeg4adv.vsynth2.out.yuv
|
||||
stddev: 3.75 PSNR: 36.65 MAXDIFF: 71 bytes: 7603200/ 7603200
|
||||
7680d2e7d34399dfdfb8a49cf1e10239 *./tests/data/vsynth2/mpeg4-Q.avi
|
||||
163688 ./tests/data/vsynth2/mpeg4-Q.avi
|
||||
26dc7c78955fa678fbf150e236eb5627 *./tests/data/mpeg4adv.vsynth2.out.yuv
|
||||
stddev: 3.97 PSNR: 36.14 MAXDIFF: 54 bytes: 7603200/ 7603200
|
||||
|
|
Loading…
Add table
Reference in a new issue