mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
Merge remote-tracking branch 'qatar/master'
* qatar/master: (29 commits) cabac: Move code only used within the CABAC test program into the test program. vp56: Drop unnecessary cabac.h #include. h264-test: Initialize AVCodecContext.av_class. build: Skip compiling network.h and rtsp.h if networking is not enabled. cosmetics: drop some pointless parentheses Disable annoying warning without changing behavior faq: Solutions for common problems with sample paths when running FATE. avcodec: attempt to clarify the CODEC_CAP_DELAY documentation avcodec: fix avcodec_encode_audio() documentation. FATE: xmv-demux test; exercise the XMV demuxer without decoding the perceptual codecs inside. vqf: recognize more metadata chunks FATE test: BMV demuxer and associated video and audio decoders. FATE: indeo4 video decoder test. FATE: update xxan-wc4 test to a sample with more code coverage. Change the recent h264_mp4toannexb bitstream filter test to output to an elementary stream rather than a program stream. g722enc: validate AVCodecContext.trellis g722enc: set frame_size, and also handle an odd number of input samples g722enc: split encoding into separate functions for trellis vs. no trellis mpegaudiodec: Use clearer pointer math tta: Fix returned error code at EOF ... Conflicts: libavcodec/h264.c libavcodec/indeo3.c libavcodec/interplayvideo.c libavcodec/ivi_common.c libavcodec/libxvidff.c libavcodec/mpegvideo.c libavcodec/ppc/mpegvideo_altivec.c libavcodec/tta.c libavcodec/utils.c libavfilter/vsrc_buffer.c libavformat/Makefile tests/fate/indeo.mak tests/ref/acodec/g722 Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
757473831c
12
doc/faq.texi
12
doc/faq.texi
@ -397,4 +397,16 @@ wrong if it is larger than the average!
|
|||||||
For example, if you have mixed 25 and 30 fps content, then r_frame_rate
|
For example, if you have mixed 25 and 30 fps content, then r_frame_rate
|
||||||
will be 150.
|
will be 150.
|
||||||
|
|
||||||
|
@section Why is @code{make fate} not running all tests?
|
||||||
|
|
||||||
|
Make sure you have the fate-suite samples and the @code{SAMPLES} Make variable
|
||||||
|
or @code{FATE_SAMPLES} environment variable or the @code{--samples}
|
||||||
|
@command{configure} option is set to the right path.
|
||||||
|
|
||||||
|
@section Why is @code{make fate} not finding the samples?
|
||||||
|
|
||||||
|
Do you happen to have a @code{~} character in the samples path to indicate a
|
||||||
|
home directory? The value is used in ways where the shell cannot expand it,
|
||||||
|
causing FATE to not find files. Just replace @code{~} by the full path.
|
||||||
|
|
||||||
@bye
|
@bye
|
||||||
|
@ -223,7 +223,7 @@ static int ac3_parse_header(AC3DecodeContext *s)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* read the rest of the bsi. read twice for dual mono mode. */
|
/* read the rest of the bsi. read twice for dual mono mode. */
|
||||||
i = !(s->channel_mode);
|
i = !s->channel_mode;
|
||||||
do {
|
do {
|
||||||
skip_bits(gbc, 5); // skip dialog normalization
|
skip_bits(gbc, 5); // skip dialog normalization
|
||||||
if (get_bits1(gbc))
|
if (get_bits1(gbc))
|
||||||
@ -792,7 +792,7 @@ static int decode_audio_block(AC3DecodeContext *s, int blk)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* dynamic range */
|
/* dynamic range */
|
||||||
i = !(s->channel_mode);
|
i = !s->channel_mode;
|
||||||
do {
|
do {
|
||||||
if (get_bits1(gbc)) {
|
if (get_bits1(gbc)) {
|
||||||
s->dynamic_range[i] = ((dynamic_range_tab[get_bits(gbc, 8)] - 1.0) *
|
s->dynamic_range[i] = ((dynamic_range_tab[get_bits(gbc, 8)] - 1.0) *
|
||||||
|
@ -745,10 +745,22 @@ typedef struct RcOverride{
|
|||||||
/* Codec can export data for HW decoding (XvMC). */
|
/* Codec can export data for HW decoding (XvMC). */
|
||||||
#define CODEC_CAP_HWACCEL 0x0010
|
#define CODEC_CAP_HWACCEL 0x0010
|
||||||
/**
|
/**
|
||||||
* Codec has a nonzero delay and needs to be fed with avpkt->data=NULL,
|
* Encoder or decoder requires flushing with NULL input at the end in order to
|
||||||
|
* give the complete and correct output.
|
||||||
|
*
|
||||||
|
* NOTE: If this flag is not set, the codec is guaranteed to never be fed with
|
||||||
|
* with NULL data. The user can still send NULL data to the public encode
|
||||||
|
* or decode function, but libavcodec will not pass it along to the codec
|
||||||
|
* unless this flag is set.
|
||||||
|
*
|
||||||
|
* Decoders:
|
||||||
|
* The decoder has a non-zero delay and needs to be fed with avpkt->data=NULL,
|
||||||
* avpkt->size=0 at the end to get the delayed data until the decoder no longer
|
* avpkt->size=0 at the end to get the delayed data until the decoder no longer
|
||||||
* returns frames. If this is not set, the codec is guaranteed to never be fed
|
* returns frames.
|
||||||
* with NULL data.
|
*
|
||||||
|
* Encoders:
|
||||||
|
* The encoder needs to be fed with NULL data at the end of encoding until the
|
||||||
|
* encoder no longer returns data.
|
||||||
*/
|
*/
|
||||||
#define CODEC_CAP_DELAY 0x0020
|
#define CODEC_CAP_DELAY 0x0020
|
||||||
/**
|
/**
|
||||||
@ -4318,9 +4330,9 @@ void avsubtitle_free(AVSubtitle *sub);
|
|||||||
* Encode an audio frame from samples into buf.
|
* Encode an audio frame from samples into buf.
|
||||||
*
|
*
|
||||||
* @note The output buffer should be at least FF_MIN_BUFFER_SIZE bytes large.
|
* @note The output buffer should be at least FF_MIN_BUFFER_SIZE bytes large.
|
||||||
* However, for PCM audio the user will know how much space is needed
|
* However, for codecs with avctx->frame_size equal to 0 (e.g. PCM) the user
|
||||||
* because it depends on the value passed in buf_size as described
|
* will know how much space is needed because it depends on the value passed
|
||||||
* below. In that case a lower value can be used.
|
* in buf_size as described below. In that case a lower value can be used.
|
||||||
*
|
*
|
||||||
* @param avctx the codec context
|
* @param avctx the codec context
|
||||||
* @param[out] buf the output buffer
|
* @param[out] buf the output buffer
|
||||||
@ -4328,8 +4340,11 @@ void avsubtitle_free(AVSubtitle *sub);
|
|||||||
* @param[in] samples the input buffer containing the samples
|
* @param[in] samples the input buffer containing the samples
|
||||||
* The number of samples read from this buffer is frame_size*channels,
|
* The number of samples read from this buffer is frame_size*channels,
|
||||||
* both of which are defined in avctx.
|
* both of which are defined in avctx.
|
||||||
* For PCM audio the number of samples read from samples is equal to
|
* For codecs which have avctx->frame_size equal to 0 (e.g. PCM) the number of
|
||||||
* buf_size * input_sample_size / output_sample_size.
|
* samples read from samples is equal to:
|
||||||
|
* buf_size * 8 / (avctx->channels * av_get_bits_per_sample(avctx->codec_id))
|
||||||
|
* This also implies that av_get_bits_per_sample() must not return 0 for these
|
||||||
|
* codecs.
|
||||||
* @return On error a negative value is returned, on success zero or the number
|
* @return On error a negative value is returned, on success zero or the number
|
||||||
* of bytes used to encode the data read from the input buffer.
|
* of bytes used to encode the data read from the input buffer.
|
||||||
*/
|
*/
|
||||||
|
@ -166,6 +166,31 @@ void ff_init_cabac_states(CABACContext *c){
|
|||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "cabac.h"
|
#include "cabac.h"
|
||||||
|
|
||||||
|
static inline void put_cabac_bit(CABACContext *c, int b){
|
||||||
|
put_bits(&c->pb, 1, b);
|
||||||
|
for(;c->outstanding_count; c->outstanding_count--){
|
||||||
|
put_bits(&c->pb, 1, 1-b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void renorm_cabac_encoder(CABACContext *c){
|
||||||
|
while(c->range < 0x100){
|
||||||
|
//FIXME optimize
|
||||||
|
if(c->low<0x100){
|
||||||
|
put_cabac_bit(c, 0);
|
||||||
|
}else if(c->low<0x200){
|
||||||
|
c->outstanding_count++;
|
||||||
|
c->low -= 0x100;
|
||||||
|
}else{
|
||||||
|
put_cabac_bit(c, 1);
|
||||||
|
c->low -= 0x200;
|
||||||
|
}
|
||||||
|
|
||||||
|
c->range+= c->range;
|
||||||
|
c->low += c->low;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void put_cabac(CABACContext *c, uint8_t * const state, int bit){
|
static void put_cabac(CABACContext *c, uint8_t * const state, int bit){
|
||||||
int RangeLPS= ff_h264_lps_range[2*(c->range&0xC0) + *state];
|
int RangeLPS= ff_h264_lps_range[2*(c->range&0xC0) + *state];
|
||||||
|
|
||||||
|
@ -62,31 +62,6 @@ void ff_init_cabac_decoder(CABACContext *c, const uint8_t *buf, int buf_size);
|
|||||||
void ff_init_cabac_states(CABACContext *c);
|
void ff_init_cabac_states(CABACContext *c);
|
||||||
|
|
||||||
|
|
||||||
static inline void put_cabac_bit(CABACContext *c, int b){
|
|
||||||
put_bits(&c->pb, 1, b);
|
|
||||||
for(;c->outstanding_count; c->outstanding_count--){
|
|
||||||
put_bits(&c->pb, 1, 1-b);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void renorm_cabac_encoder(CABACContext *c){
|
|
||||||
while(c->range < 0x100){
|
|
||||||
//FIXME optimize
|
|
||||||
if(c->low<0x100){
|
|
||||||
put_cabac_bit(c, 0);
|
|
||||||
}else if(c->low<0x200){
|
|
||||||
c->outstanding_count++;
|
|
||||||
c->low -= 0x100;
|
|
||||||
}else{
|
|
||||||
put_cabac_bit(c, 1);
|
|
||||||
c->low -= 0x200;
|
|
||||||
}
|
|
||||||
|
|
||||||
c->range+= c->range;
|
|
||||||
c->low += c->low;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void refill(CABACContext *c){
|
static void refill(CABACContext *c){
|
||||||
#if CABAC_BITS == 16
|
#if CABAC_BITS == 16
|
||||||
c->low+= (c->bytestream[0]<<9) + (c->bytestream[1]<<1);
|
c->low+= (c->bytestream[0]<<9) + (c->bytestream[1]<<1);
|
||||||
|
@ -658,8 +658,8 @@ void ff_cavs_init_top_lines(AVSContext *h) {
|
|||||||
h->top_mv[1] = av_malloc((h->mb_width*2+1)*sizeof(cavs_vector));
|
h->top_mv[1] = av_malloc((h->mb_width*2+1)*sizeof(cavs_vector));
|
||||||
h->top_pred_Y = av_malloc( h->mb_width*2*sizeof(*h->top_pred_Y));
|
h->top_pred_Y = av_malloc( h->mb_width*2*sizeof(*h->top_pred_Y));
|
||||||
h->top_border_y = av_malloc((h->mb_width+1)*16);
|
h->top_border_y = av_malloc((h->mb_width+1)*16);
|
||||||
h->top_border_u = av_malloc((h->mb_width)*10);
|
h->top_border_u = av_malloc( h->mb_width * 10);
|
||||||
h->top_border_v = av_malloc((h->mb_width)*10);
|
h->top_border_v = av_malloc( h->mb_width * 10);
|
||||||
|
|
||||||
/* alloc space for co-located MVs and types */
|
/* alloc space for co-located MVs and types */
|
||||||
h->col_mv = av_malloc( h->mb_width*h->mb_height*4*sizeof(cavs_vector));
|
h->col_mv = av_malloc( h->mb_width*h->mb_height*4*sizeof(cavs_vector));
|
||||||
|
@ -491,7 +491,7 @@ static int decode_pic(AVSContext *h) {
|
|||||||
skip_bits(&s->gb,24);//time_code
|
skip_bits(&s->gb,24);//time_code
|
||||||
/* old sample clips were all progressive and no low_delay,
|
/* old sample clips were all progressive and no low_delay,
|
||||||
bump stream revision if detected otherwise */
|
bump stream revision if detected otherwise */
|
||||||
if((s->low_delay) || !(show_bits(&s->gb,9) & 1))
|
if (s->low_delay || !(show_bits(&s->gb,9) & 1))
|
||||||
h->stream_revision = 1;
|
h->stream_revision = 1;
|
||||||
/* similarly test top_field_first and repeat_first_field */
|
/* similarly test top_field_first and repeat_first_field */
|
||||||
else if(show_bits(&s->gb,11) & 3)
|
else if(show_bits(&s->gb,11) & 3)
|
||||||
|
@ -109,8 +109,8 @@ static void put_dc(MpegEncContext *s, uint8_t *dest_y, uint8_t *dest_cb, uint8_t
|
|||||||
for(y=0; y<8; y++){
|
for(y=0; y<8; y++){
|
||||||
int x;
|
int x;
|
||||||
for(x=0; x<8; x++){
|
for(x=0; x<8; x++){
|
||||||
dest_cb[x + y*(s->uvlinesize)]= dcu/8;
|
dest_cb[x + y * s->uvlinesize] = dcu / 8;
|
||||||
dest_cr[x + y*(s->uvlinesize)]= dcv/8;
|
dest_cr[x + y * s->uvlinesize] = dcv / 8;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1120,8 +1120,8 @@ void ff_er_frame_end(MpegEncContext *s){
|
|||||||
for(y=0; y<8; y++){
|
for(y=0; y<8; y++){
|
||||||
int x;
|
int x;
|
||||||
for(x=0; x<8; x++){
|
for(x=0; x<8; x++){
|
||||||
dcu+=dest_cb[x + y*(s->uvlinesize)];
|
dcu += dest_cb[x + y * s->uvlinesize];
|
||||||
dcv+=dest_cr[x + y*(s->uvlinesize)];
|
dcv += dest_cr[x + y * s->uvlinesize];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
s->dc_val[1][mb_x + mb_y*s->mb_stride]= (dcu+4)>>3;
|
s->dc_val[1][mb_x + mb_y*s->mb_stride]= (dcu+4)>>3;
|
||||||
|
@ -32,6 +32,15 @@
|
|||||||
|
|
||||||
#define FREEZE_INTERVAL 128
|
#define FREEZE_INTERVAL 128
|
||||||
|
|
||||||
|
/* This is an arbitrary value. Allowing insanely large values leads to strange
|
||||||
|
problems, so we limit it to a reasonable value */
|
||||||
|
#define MAX_FRAME_SIZE 32768
|
||||||
|
|
||||||
|
/* We clip the value of avctx->trellis to prevent data type overflows and
|
||||||
|
undefined behavior. Using larger values is insanely slow anyway. */
|
||||||
|
#define MIN_TRELLIS 0
|
||||||
|
#define MAX_TRELLIS 16
|
||||||
|
|
||||||
static av_cold int g722_encode_init(AVCodecContext * avctx)
|
static av_cold int g722_encode_init(AVCodecContext * avctx)
|
||||||
{
|
{
|
||||||
G722Context *c = avctx->priv_data;
|
G722Context *c = avctx->priv_data;
|
||||||
@ -56,6 +65,40 @@ static av_cold int g722_encode_init(AVCodecContext * avctx)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (avctx->frame_size) {
|
||||||
|
/* validate frame size */
|
||||||
|
if (avctx->frame_size & 1 || avctx->frame_size > MAX_FRAME_SIZE) {
|
||||||
|
int new_frame_size;
|
||||||
|
|
||||||
|
if (avctx->frame_size == 1)
|
||||||
|
new_frame_size = 2;
|
||||||
|
else if (avctx->frame_size > MAX_FRAME_SIZE)
|
||||||
|
new_frame_size = MAX_FRAME_SIZE;
|
||||||
|
else
|
||||||
|
new_frame_size = avctx->frame_size - 1;
|
||||||
|
|
||||||
|
av_log(avctx, AV_LOG_WARNING, "Requested frame size is not "
|
||||||
|
"allowed. Using %d instead of %d\n", new_frame_size,
|
||||||
|
avctx->frame_size);
|
||||||
|
avctx->frame_size = new_frame_size;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* This is arbitrary. We use 320 because it's 20ms @ 16kHz, which is
|
||||||
|
a common packet size for VoIP applications */
|
||||||
|
avctx->frame_size = 320;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (avctx->trellis) {
|
||||||
|
/* validate trellis */
|
||||||
|
if (avctx->trellis < MIN_TRELLIS || avctx->trellis > MAX_TRELLIS) {
|
||||||
|
int new_trellis = av_clip(avctx->trellis, MIN_TRELLIS, MAX_TRELLIS);
|
||||||
|
av_log(avctx, AV_LOG_WARNING, "Requested trellis value is not "
|
||||||
|
"allowed. Using %d instead of %d\n", new_trellis,
|
||||||
|
avctx->trellis);
|
||||||
|
avctx->trellis = new_trellis;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,13 +160,12 @@ static inline int encode_low(const struct G722Band* state, int xlow)
|
|||||||
return (diff < 0 ? (i < 2 ? 63 : 33) : 61) - i;
|
return (diff < 0 ? (i < 2 ? 63 : 33) : 61) - i;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int g722_encode_trellis(AVCodecContext *avctx,
|
static void g722_encode_trellis(G722Context *c, int trellis,
|
||||||
uint8_t *dst, int buf_size, void *data)
|
uint8_t *dst, int nb_samples,
|
||||||
|
const int16_t *samples)
|
||||||
{
|
{
|
||||||
G722Context *c = avctx->priv_data;
|
|
||||||
const int16_t *samples = data;
|
|
||||||
int i, j, k;
|
int i, j, k;
|
||||||
int frontier = 1 << avctx->trellis;
|
int frontier = 1 << trellis;
|
||||||
struct TrellisNode **nodes[2];
|
struct TrellisNode **nodes[2];
|
||||||
struct TrellisNode **nodes_next[2];
|
struct TrellisNode **nodes_next[2];
|
||||||
int pathn[2] = {0, 0}, froze = -1;
|
int pathn[2] = {0, 0}, froze = -1;
|
||||||
@ -139,7 +181,7 @@ static int g722_encode_trellis(AVCodecContext *avctx,
|
|||||||
nodes[i][0]->state = c->band[i];
|
nodes[i][0]->state = c->band[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < buf_size; i++) {
|
for (i = 0; i < nb_samples >> 1; i++) {
|
||||||
int xlow, xhigh;
|
int xlow, xhigh;
|
||||||
struct TrellisNode *next[2];
|
struct TrellisNode *next[2];
|
||||||
int heap_pos[2] = {0, 0};
|
int heap_pos[2] = {0, 0};
|
||||||
@ -271,8 +313,28 @@ static int g722_encode_trellis(AVCodecContext *avctx,
|
|||||||
}
|
}
|
||||||
c->band[0] = nodes[0][0]->state;
|
c->band[0] = nodes[0][0]->state;
|
||||||
c->band[1] = nodes[1][0]->state;
|
c->band[1] = nodes[1][0]->state;
|
||||||
|
}
|
||||||
|
|
||||||
return i;
|
static av_always_inline void encode_byte(G722Context *c, uint8_t *dst,
|
||||||
|
const int16_t *samples)
|
||||||
|
{
|
||||||
|
int xlow, xhigh, ilow, ihigh;
|
||||||
|
filter_samples(c, samples, &xlow, &xhigh);
|
||||||
|
ihigh = encode_high(&c->band[1], xhigh);
|
||||||
|
ilow = encode_low (&c->band[0], xlow);
|
||||||
|
ff_g722_update_high_predictor(&c->band[1], c->band[1].scale_factor *
|
||||||
|
ff_g722_high_inv_quant[ihigh] >> 10, ihigh);
|
||||||
|
ff_g722_update_low_predictor(&c->band[0], ilow >> 2);
|
||||||
|
*dst = ihigh << 6 | ilow;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void g722_encode_no_trellis(G722Context *c,
|
||||||
|
uint8_t *dst, int nb_samples,
|
||||||
|
const int16_t *samples)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < nb_samples; i += 2)
|
||||||
|
encode_byte(c, dst++, &samples[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int g722_encode_frame(AVCodecContext *avctx,
|
static int g722_encode_frame(AVCodecContext *avctx,
|
||||||
@ -280,22 +342,22 @@ static int g722_encode_frame(AVCodecContext *avctx,
|
|||||||
{
|
{
|
||||||
G722Context *c = avctx->priv_data;
|
G722Context *c = avctx->priv_data;
|
||||||
const int16_t *samples = data;
|
const int16_t *samples = data;
|
||||||
int i;
|
int nb_samples;
|
||||||
|
|
||||||
|
nb_samples = avctx->frame_size - (avctx->frame_size & 1);
|
||||||
|
|
||||||
if (avctx->trellis)
|
if (avctx->trellis)
|
||||||
return g722_encode_trellis(avctx, dst, buf_size, data);
|
g722_encode_trellis(c, avctx->trellis, dst, nb_samples, samples);
|
||||||
|
else
|
||||||
|
g722_encode_no_trellis(c, dst, nb_samples, samples);
|
||||||
|
|
||||||
for (i = 0; i < buf_size; i++) {
|
/* handle last frame with odd frame_size */
|
||||||
int xlow, xhigh, ihigh, ilow;
|
if (nb_samples < avctx->frame_size) {
|
||||||
filter_samples(c, &samples[2*i], &xlow, &xhigh);
|
int16_t last_samples[2] = { samples[nb_samples], samples[nb_samples] };
|
||||||
ihigh = encode_high(&c->band[1], xhigh);
|
encode_byte(c, &dst[nb_samples >> 1], last_samples);
|
||||||
ilow = encode_low(&c->band[0], xlow);
|
|
||||||
ff_g722_update_high_predictor(&c->band[1], c->band[1].scale_factor *
|
|
||||||
ff_g722_high_inv_quant[ihigh] >> 10, ihigh);
|
|
||||||
ff_g722_update_low_predictor(&c->band[0], ilow >> 2);
|
|
||||||
*dst++ = ihigh << 6 | ilow;
|
|
||||||
}
|
}
|
||||||
return i;
|
|
||||||
|
return (avctx->frame_size + 1) >> 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
AVCodec ff_adpcm_g722_encoder = {
|
AVCodec ff_adpcm_g722_encoder = {
|
||||||
@ -306,6 +368,7 @@ AVCodec ff_adpcm_g722_encoder = {
|
|||||||
.init = g722_encode_init,
|
.init = g722_encode_init,
|
||||||
.close = g722_encode_close,
|
.close = g722_encode_close,
|
||||||
.encode = g722_encode_frame,
|
.encode = g722_encode_frame,
|
||||||
|
.capabilities = CODEC_CAP_SMALL_LAST_FRAME,
|
||||||
.long_name = NULL_IF_CONFIG_SMALL("G.722 ADPCM"),
|
.long_name = NULL_IF_CONFIG_SMALL("G.722 ADPCM"),
|
||||||
.sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
|
.sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
|
||||||
};
|
};
|
||||||
|
@ -4170,7 +4170,6 @@ int main(void){
|
|||||||
uint8_t temp[SIZE];
|
uint8_t temp[SIZE];
|
||||||
PutBitContext pb;
|
PutBitContext pb;
|
||||||
GetBitContext gb;
|
GetBitContext gb;
|
||||||
// int int_temp[10000];
|
|
||||||
DSPContext dsp;
|
DSPContext dsp;
|
||||||
AVCodecContext avctx;
|
AVCodecContext avctx;
|
||||||
|
|
||||||
|
@ -89,6 +89,7 @@ typedef struct Indeo3DecodeContext {
|
|||||||
const uint8_t *next_cell_data;
|
const uint8_t *next_cell_data;
|
||||||
const uint8_t *last_byte;
|
const uint8_t *last_byte;
|
||||||
const int8_t *mc_vectors;
|
const int8_t *mc_vectors;
|
||||||
|
unsigned num_vectors; ///< number of motion vectors in mc_vectors
|
||||||
|
|
||||||
int16_t width, height;
|
int16_t width, height;
|
||||||
uint32_t frame_num; ///< current frame number (zero-based)
|
uint32_t frame_num; ///< current frame number (zero-based)
|
||||||
@ -767,11 +768,17 @@ static int parse_bintree(Indeo3DecodeContext *ctx, AVCodecContext *avctx,
|
|||||||
break;
|
break;
|
||||||
case INTER_DATA:
|
case INTER_DATA:
|
||||||
if (!curr_cell.tree) { /* MC tree INTER code */
|
if (!curr_cell.tree) { /* MC tree INTER code */
|
||||||
|
unsigned mv_idx;
|
||||||
/* get motion vector index and setup the pointer to the mv set */
|
/* get motion vector index and setup the pointer to the mv set */
|
||||||
if (!ctx->need_resync)
|
if (!ctx->need_resync)
|
||||||
ctx->next_cell_data = &ctx->gb.buffer[(get_bits_count(&ctx->gb) + 7) >> 3];
|
ctx->next_cell_data = &ctx->gb.buffer[(get_bits_count(&ctx->gb) + 7) >> 3];
|
||||||
if(ctx->mc_vectors)
|
if(ctx->mc_vectors)
|
||||||
curr_cell.mv_ptr = &ctx->mc_vectors[*(ctx->next_cell_data++) << 1];
|
mv_idx = *(ctx->next_cell_data++) << 1;
|
||||||
|
if (mv_idx >= ctx->num_vectors) {
|
||||||
|
av_log(avctx, AV_LOG_ERROR, "motion vector index out of range\n");
|
||||||
|
return AVERROR_INVALIDDATA;
|
||||||
|
}
|
||||||
|
curr_cell.mv_ptr = &ctx->mc_vectors[mv_idx];
|
||||||
curr_cell.tree = 1; /* enter the VQ tree */
|
curr_cell.tree = 1; /* enter the VQ tree */
|
||||||
UPDATE_BITPOS(8);
|
UPDATE_BITPOS(8);
|
||||||
} else { /* VQ tree DATA code */
|
} else { /* VQ tree DATA code */
|
||||||
@ -801,19 +808,24 @@ static int decode_plane(Indeo3DecodeContext *ctx, AVCodecContext *avctx,
|
|||||||
int32_t strip_width)
|
int32_t strip_width)
|
||||||
{
|
{
|
||||||
Cell curr_cell;
|
Cell curr_cell;
|
||||||
uint32_t num_vectors;
|
unsigned num_vectors;
|
||||||
|
|
||||||
/* each plane data starts with mc_vector_count field, */
|
/* each plane data starts with mc_vector_count field, */
|
||||||
/* an optional array of motion vectors followed by the vq data */
|
/* an optional array of motion vectors followed by the vq data */
|
||||||
num_vectors = bytestream_get_le32(&data);
|
num_vectors = bytestream_get_le32(&data);
|
||||||
if(num_vectors >= data_size/2)
|
if (num_vectors > 256) {
|
||||||
|
av_log(ctx->avctx, AV_LOG_ERROR,
|
||||||
|
"Read invalid number of motion vectors %d\n", num_vectors);
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
|
}
|
||||||
|
if (num_vectors * 2 >= data_size)
|
||||||
|
return AVERROR_INVALIDDATA;
|
||||||
|
|
||||||
|
ctx->num_vectors = num_vectors;
|
||||||
ctx->mc_vectors = num_vectors ? data : 0;
|
ctx->mc_vectors = num_vectors ? data : 0;
|
||||||
data += num_vectors * 2;
|
|
||||||
data_size-= num_vectors * 2;
|
|
||||||
|
|
||||||
/* init the bitreader */
|
/* init the bitreader */
|
||||||
init_get_bits(&ctx->gb, data, data_size << 3);
|
init_get_bits(&ctx->gb, &data[num_vectors * 2], (data_size - num_vectors * 2) << 3);
|
||||||
ctx->skip_bits = 0;
|
ctx->skip_bits = 0;
|
||||||
ctx->need_resync = 0;
|
ctx->need_resync = 0;
|
||||||
|
|
||||||
|
@ -1019,12 +1019,10 @@ static av_cold int ipvideo_decode_init(AVCodecContext *avctx)
|
|||||||
|
|
||||||
dsputil_init(&s->dsp, avctx);
|
dsputil_init(&s->dsp, avctx);
|
||||||
|
|
||||||
/* decoding map contains 4 bits of information per 8x8 block */
|
|
||||||
s->decoding_map_size = avctx->width * avctx->height / (8 * 8 * 2);
|
|
||||||
|
|
||||||
avcodec_get_frame_defaults(&s->second_last_frame);
|
avcodec_get_frame_defaults(&s->second_last_frame);
|
||||||
avcodec_get_frame_defaults(&s->last_frame);
|
avcodec_get_frame_defaults(&s->last_frame);
|
||||||
avcodec_get_frame_defaults(&s->current_frame);
|
avcodec_get_frame_defaults(&s->current_frame);
|
||||||
|
|
||||||
s->current_frame.data[0] = s->last_frame.data[0] =
|
s->current_frame.data[0] = s->last_frame.data[0] =
|
||||||
s->second_last_frame.data[0] = NULL;
|
s->second_last_frame.data[0] = NULL;
|
||||||
|
|
||||||
@ -1039,6 +1037,9 @@ static int ipvideo_decode_frame(AVCodecContext *avctx,
|
|||||||
int buf_size = avpkt->size;
|
int buf_size = avpkt->size;
|
||||||
IpvideoContext *s = avctx->priv_data;
|
IpvideoContext *s = avctx->priv_data;
|
||||||
|
|
||||||
|
/* decoding map contains 4 bits of information per 8x8 block */
|
||||||
|
s->decoding_map_size = avctx->width * avctx->height / (8 * 8 * 2);
|
||||||
|
|
||||||
/* compressed buffer needs to be large enough to at least hold an entire
|
/* compressed buffer needs to be large enough to at least hold an entire
|
||||||
* decoding map */
|
* decoding map */
|
||||||
if (buf_size < s->decoding_map_size)
|
if (buf_size < s->decoding_map_size)
|
||||||
@ -1099,6 +1100,6 @@ AVCodec ff_interplay_video_decoder = {
|
|||||||
.init = ipvideo_decode_init,
|
.init = ipvideo_decode_init,
|
||||||
.close = ipvideo_decode_end,
|
.close = ipvideo_decode_end,
|
||||||
.decode = ipvideo_decode_frame,
|
.decode = ipvideo_decode_frame,
|
||||||
.capabilities = CODEC_CAP_DR1,
|
.capabilities = CODEC_CAP_DR1 | CODEC_CAP_PARAM_CHANGE,
|
||||||
.long_name = NULL_IF_CONFIG_SMALL("Interplay MVE video"),
|
.long_name = NULL_IF_CONFIG_SMALL("Interplay MVE video"),
|
||||||
};
|
};
|
||||||
|
@ -136,7 +136,7 @@ static av_cold int libdirac_encode_init(AVCodecContext *avccontext)
|
|||||||
preset = GetDiracVideoFormatPreset(avccontext);
|
preset = GetDiracVideoFormatPreset(avccontext);
|
||||||
|
|
||||||
/* initialize the encoder context */
|
/* initialize the encoder context */
|
||||||
dirac_encoder_context_init(&(p_dirac_params->enc_ctx), preset);
|
dirac_encoder_context_init(&p_dirac_params->enc_ctx, preset);
|
||||||
|
|
||||||
p_dirac_params->enc_ctx.src_params.chroma = GetDiracChromaFormat(avccontext->pix_fmt);
|
p_dirac_params->enc_ctx.src_params.chroma = GetDiracChromaFormat(avccontext->pix_fmt);
|
||||||
|
|
||||||
@ -199,7 +199,7 @@ static av_cold int libdirac_encode_init(AVCodecContext *avccontext)
|
|||||||
* irrespective of the type of source material */
|
* irrespective of the type of source material */
|
||||||
p_dirac_params->enc_ctx.enc_params.picture_coding_mode = 1;
|
p_dirac_params->enc_ctx.enc_params.picture_coding_mode = 1;
|
||||||
|
|
||||||
p_dirac_params->p_encoder = dirac_encoder_init(&(p_dirac_params->enc_ctx),
|
p_dirac_params->p_encoder = dirac_encoder_init(&p_dirac_params->enc_ctx,
|
||||||
verbose);
|
verbose);
|
||||||
|
|
||||||
if (!p_dirac_params->p_encoder) {
|
if (!p_dirac_params->p_encoder) {
|
||||||
@ -221,7 +221,7 @@ static void DiracFreeFrame(void *data)
|
|||||||
{
|
{
|
||||||
DiracSchroEncodedFrame *enc_frame = data;
|
DiracSchroEncodedFrame *enc_frame = data;
|
||||||
|
|
||||||
av_freep(&(enc_frame->p_encbuf));
|
av_freep(&enc_frame->p_encbuf);
|
||||||
av_free(enc_frame);
|
av_free(enc_frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -258,7 +258,7 @@ static void SchroedingerFreeFrame(void *data)
|
|||||||
{
|
{
|
||||||
DiracSchroEncodedFrame *enc_frame = data;
|
DiracSchroEncodedFrame *enc_frame = data;
|
||||||
|
|
||||||
av_freep(&(enc_frame->p_encbuf));
|
av_freep(&enc_frame->p_encbuf);
|
||||||
av_free(enc_frame);
|
av_free(enc_frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -232,7 +232,7 @@ static av_cold int xvid_encode_init(AVCodecContext *avctx) {
|
|||||||
rc2pass2.version = XVID_VERSION;
|
rc2pass2.version = XVID_VERSION;
|
||||||
rc2pass2.bitrate = avctx->bit_rate;
|
rc2pass2.bitrate = avctx->bit_rate;
|
||||||
|
|
||||||
fd = av_tempfile("xvidff.", &(x->twopassfile), 0, avctx);
|
fd = av_tempfile("xvidff.", &x->twopassfile, 0, avctx);
|
||||||
if( fd == -1 ) {
|
if( fd == -1 ) {
|
||||||
av_log(avctx, AV_LOG_ERROR,
|
av_log(avctx, AV_LOG_ERROR,
|
||||||
"Xvid: Cannot write 2-pass pipe\n");
|
"Xvid: Cannot write 2-pass pipe\n");
|
||||||
@ -376,7 +376,7 @@ static int xvid_encode_frame(AVCodecContext *avctx,
|
|||||||
char *tmp;
|
char *tmp;
|
||||||
struct xvid_context *x = avctx->priv_data;
|
struct xvid_context *x = avctx->priv_data;
|
||||||
AVFrame *picture = data;
|
AVFrame *picture = data;
|
||||||
AVFrame *p = &(x->encoded_picture);
|
AVFrame *p = &x->encoded_picture;
|
||||||
|
|
||||||
xvid_enc_frame_t xvid_enc_frame;
|
xvid_enc_frame_t xvid_enc_frame;
|
||||||
xvid_enc_stats_t xvid_enc_stats;
|
xvid_enc_stats_t xvid_enc_stats;
|
||||||
@ -538,7 +538,7 @@ int xvid_strip_vol_header(AVCodecContext *avctx,
|
|||||||
}
|
}
|
||||||
/* Less dangerous now, memmove properly copies the two
|
/* Less dangerous now, memmove properly copies the two
|
||||||
chunks of overlapping data */
|
chunks of overlapping data */
|
||||||
memmove(frame, &(frame[vo_len]), frame_len - vo_len);
|
memmove(frame, &frame[vo_len], frame_len - vo_len);
|
||||||
return frame_len - vo_len;
|
return frame_len - vo_len;
|
||||||
} else
|
} else
|
||||||
return frame_len;
|
return frame_len;
|
||||||
|
@ -1273,7 +1273,7 @@ static int mpeg_decode_postinit(AVCodecContext *avctx)
|
|||||||
|
|
||||||
/* low_delay may be forced, in this case we will have B-frames
|
/* low_delay may be forced, in this case we will have B-frames
|
||||||
* that behave like P-frames. */
|
* that behave like P-frames. */
|
||||||
avctx->has_b_frames = !(s->low_delay);
|
avctx->has_b_frames = !s->low_delay;
|
||||||
|
|
||||||
assert((avctx->sub_id == 1) == (avctx->codec_id == CODEC_ID_MPEG1VIDEO));
|
assert((avctx->sub_id == 1) == (avctx->codec_id == CODEC_ID_MPEG1VIDEO));
|
||||||
if (avctx->codec_id == CODEC_ID_MPEG1VIDEO) {
|
if (avctx->codec_id == CODEC_ID_MPEG1VIDEO) {
|
||||||
|
@ -705,8 +705,8 @@ av_cold int MPV_common_init(MpegEncContext *s)
|
|||||||
mv_table_size = (s->mb_height + 2) * s->mb_stride + 1;
|
mv_table_size = (s->mb_height + 2) * s->mb_stride + 1;
|
||||||
|
|
||||||
/* set chroma shifts */
|
/* set chroma shifts */
|
||||||
avcodec_get_chroma_sub_sample(s->avctx->pix_fmt,&(s->chroma_x_shift),
|
avcodec_get_chroma_sub_sample(s->avctx->pix_fmt, &s->chroma_x_shift,
|
||||||
&(s->chroma_y_shift) );
|
&s->chroma_y_shift);
|
||||||
|
|
||||||
/* set default edge pos, will be overriden in decode_header if needed */
|
/* set default edge pos, will be overriden in decode_header if needed */
|
||||||
s->h_edge_pos = s->mb_width * 16;
|
s->h_edge_pos = s->mb_width * 16;
|
||||||
@ -2318,7 +2318,7 @@ void MPV_decode_mb_internal(MpegEncContext *s, DCTELEM block[12][64],
|
|||||||
}
|
}
|
||||||
|
|
||||||
dct_linesize = linesize << s->interlaced_dct;
|
dct_linesize = linesize << s->interlaced_dct;
|
||||||
dct_offset =(s->interlaced_dct)? linesize : linesize*block_size;
|
dct_offset = s->interlaced_dct ? linesize : linesize * block_size;
|
||||||
|
|
||||||
if(readable){
|
if(readable){
|
||||||
dest_y= s->dest[0];
|
dest_y= s->dest[0];
|
||||||
@ -2414,7 +2414,7 @@ void MPV_decode_mb_internal(MpegEncContext *s, DCTELEM block[12][64],
|
|||||||
}else{
|
}else{
|
||||||
//chroma422
|
//chroma422
|
||||||
dct_linesize = uvlinesize << s->interlaced_dct;
|
dct_linesize = uvlinesize << s->interlaced_dct;
|
||||||
dct_offset =(s->interlaced_dct)? uvlinesize : uvlinesize*block_size;
|
dct_offset = s->interlaced_dct ? uvlinesize : uvlinesize*block_size;
|
||||||
|
|
||||||
add_dct(s, block[4], 4, dest_cb, dct_linesize);
|
add_dct(s, block[4], 4, dest_cb, dct_linesize);
|
||||||
add_dct(s, block[5], 5, dest_cr, dct_linesize);
|
add_dct(s, block[5], 5, dest_cr, dct_linesize);
|
||||||
@ -2466,7 +2466,7 @@ void MPV_decode_mb_internal(MpegEncContext *s, DCTELEM block[12][64],
|
|||||||
}else{
|
}else{
|
||||||
|
|
||||||
dct_linesize = uvlinesize << s->interlaced_dct;
|
dct_linesize = uvlinesize << s->interlaced_dct;
|
||||||
dct_offset =(s->interlaced_dct)? uvlinesize : uvlinesize*block_size;
|
dct_offset = s->interlaced_dct? uvlinesize : uvlinesize*block_size;
|
||||||
|
|
||||||
s->dsp.idct_put(dest_cb, dct_linesize, block[4]);
|
s->dsp.idct_put(dest_cb, dct_linesize, block[4]);
|
||||||
s->dsp.idct_put(dest_cr, dct_linesize, block[5]);
|
s->dsp.idct_put(dest_cr, dct_linesize, block[5]);
|
||||||
|
@ -269,14 +269,14 @@ static int dct_quantize_altivec(MpegEncContext* s,
|
|||||||
|
|
||||||
if(n<4){
|
if(n<4){
|
||||||
qmat = (vector signed int*)s->q_intra_matrix[qscale];
|
qmat = (vector signed int*)s->q_intra_matrix[qscale];
|
||||||
biasAddr = &(s->intra_quant_bias);
|
biasAddr = &s->intra_quant_bias;
|
||||||
}else{
|
}else{
|
||||||
qmat = (vector signed int*)s->q_chroma_intra_matrix[qscale];
|
qmat = (vector signed int*)s->q_chroma_intra_matrix[qscale];
|
||||||
biasAddr = &(s->intra_quant_bias);
|
biasAddr = &s->intra_quant_bias;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
qmat = (vector signed int*)s->q_inter_matrix[qscale];
|
qmat = (vector signed int*)s->q_inter_matrix[qscale];
|
||||||
biasAddr = &(s->inter_quant_bias);
|
biasAddr = &s->inter_quant_bias;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load the bias vector (We add 0.5 to the bias so that we're
|
// Load the bias vector (We add 0.5 to the bias so that we're
|
||||||
@ -366,8 +366,8 @@ static int dct_quantize_altivec(MpegEncContext* s,
|
|||||||
vector signed int max_q_int, min_q_int;
|
vector signed int max_q_int, min_q_int;
|
||||||
vector signed short max_q, min_q;
|
vector signed short max_q, min_q;
|
||||||
|
|
||||||
LOAD4(max_q_int, &(s->max_qcoeff));
|
LOAD4(max_q_int, &s->max_qcoeff);
|
||||||
LOAD4(min_q_int, &(s->min_qcoeff));
|
LOAD4(min_q_int, &s->min_qcoeff);
|
||||||
|
|
||||||
max_q = vec_pack(max_q_int, max_q_int);
|
max_q = vec_pack(max_q_int, max_q_int);
|
||||||
min_q = vec_pack(min_q_int, min_q_int);
|
min_q = vec_pack(min_q_int, min_q_int);
|
||||||
|
@ -845,7 +845,7 @@ static int frame_thread_init(AVCodecContext *avctx)
|
|||||||
err = AVERROR(ENOMEM);
|
err = AVERROR(ENOMEM);
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
*(copy->internal) = *(src->internal);
|
*copy->internal = *src->internal;
|
||||||
copy->internal->is_copy = 1;
|
copy->internal->is_copy = 1;
|
||||||
|
|
||||||
if (codec->init_thread_copy)
|
if (codec->init_thread_copy)
|
||||||
|
@ -88,7 +88,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPac
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
zret = inflateReset(&(c->zstream));
|
zret = inflateReset(&c->zstream);
|
||||||
if (zret != Z_OK) {
|
if (zret != Z_OK) {
|
||||||
av_log(avctx, AV_LOG_ERROR, "Inflate reset error: %d\n", zret);
|
av_log(avctx, AV_LOG_ERROR, "Inflate reset error: %d\n", zret);
|
||||||
return -1;
|
return -1;
|
||||||
@ -97,7 +97,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPac
|
|||||||
c->zstream.avail_in = len;
|
c->zstream.avail_in = len;
|
||||||
c->zstream.next_out = c->decomp_buf;
|
c->zstream.next_out = c->decomp_buf;
|
||||||
c->zstream.avail_out = c->decomp_size;
|
c->zstream.avail_out = c->decomp_size;
|
||||||
zret = inflate(&(c->zstream), Z_FINISH);
|
zret = inflate(&c->zstream, Z_FINISH);
|
||||||
// Z_DATA_ERROR means empty picture
|
// Z_DATA_ERROR means empty picture
|
||||||
if ((zret != Z_OK) && (zret != Z_STREAM_END) && (zret != Z_DATA_ERROR)) {
|
if ((zret != Z_OK) && (zret != Z_STREAM_END) && (zret != Z_DATA_ERROR)) {
|
||||||
av_log(avctx, AV_LOG_ERROR, "Inflate error: %d\n", zret);
|
av_log(avctx, AV_LOG_ERROR, "Inflate error: %d\n", zret);
|
||||||
@ -144,7 +144,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
|
|||||||
|
|
||||||
avcodec_get_frame_defaults(&c->pic);
|
avcodec_get_frame_defaults(&c->pic);
|
||||||
// Needed if zlib unused or init aborted before inflateInit
|
// Needed if zlib unused or init aborted before inflateInit
|
||||||
memset(&(c->zstream), 0, sizeof(z_stream));
|
memset(&c->zstream, 0, sizeof(z_stream));
|
||||||
switch(avctx->bits_per_coded_sample){
|
switch(avctx->bits_per_coded_sample){
|
||||||
case 8: avctx->pix_fmt = PIX_FMT_PAL8; break;
|
case 8: avctx->pix_fmt = PIX_FMT_PAL8; break;
|
||||||
case 16: avctx->pix_fmt = PIX_FMT_RGB555; break;
|
case 16: avctx->pix_fmt = PIX_FMT_RGB555; break;
|
||||||
@ -170,7 +170,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
|
|||||||
c->zstream.zalloc = Z_NULL;
|
c->zstream.zalloc = Z_NULL;
|
||||||
c->zstream.zfree = Z_NULL;
|
c->zstream.zfree = Z_NULL;
|
||||||
c->zstream.opaque = Z_NULL;
|
c->zstream.opaque = Z_NULL;
|
||||||
zret = inflateInit(&(c->zstream));
|
zret = inflateInit(&c->zstream);
|
||||||
if (zret != Z_OK) {
|
if (zret != Z_OK) {
|
||||||
av_log(avctx, AV_LOG_ERROR, "Inflate init error: %d\n", zret);
|
av_log(avctx, AV_LOG_ERROR, "Inflate init error: %d\n", zret);
|
||||||
return 1;
|
return 1;
|
||||||
@ -194,7 +194,7 @@ static av_cold int decode_end(AVCodecContext *avctx)
|
|||||||
|
|
||||||
if (c->pic.data[0])
|
if (c->pic.data[0])
|
||||||
avctx->release_buffer(avctx, &c->pic);
|
avctx->release_buffer(avctx, &c->pic);
|
||||||
inflateEnd(&(c->zstream));
|
inflateEnd(&c->zstream);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -324,6 +324,10 @@ static int tta_decode_frame(AVCodecContext *avctx, void *data,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// decode directly to output buffer for 24-bit sample format
|
||||||
|
if (s->bps == 3)
|
||||||
|
s->decode_buffer = s->frame.data[0];
|
||||||
|
|
||||||
// init per channel states
|
// init per channel states
|
||||||
for (i = 0; i < s->channels; i++) {
|
for (i = 0; i < s->channels; i++) {
|
||||||
s->ch_ctx[i].predictor = 0;
|
s->ch_ctx[i].predictor = 0;
|
||||||
@ -429,7 +433,7 @@ static int tta_decode_frame(AVCodecContext *avctx, void *data,
|
|||||||
// shift samples for 24-bit sample format
|
// shift samples for 24-bit sample format
|
||||||
int32_t *samples = (int32_t *)s->frame.data[0];
|
int32_t *samples = (int32_t *)s->frame.data[0];
|
||||||
for (p = s->decode_buffer; p < s->decode_buffer + (framelen * s->channels); p++)
|
for (p = s->decode_buffer; p < s->decode_buffer + (framelen * s->channels); p++)
|
||||||
*samples++ = *p<<8;
|
*samples++ <<= 8;
|
||||||
// reset decode buffer
|
// reset decode buffer
|
||||||
s->decode_buffer = NULL;
|
s->decode_buffer = NULL;
|
||||||
break;
|
break;
|
||||||
|
@ -935,6 +935,48 @@ static int64_t guess_correct_pts(AVCodecContext *ctx,
|
|||||||
return pts;
|
return pts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void apply_param_change(AVCodecContext *avctx, AVPacket *avpkt)
|
||||||
|
{
|
||||||
|
int size = 0;
|
||||||
|
const uint8_t *data;
|
||||||
|
uint32_t flags;
|
||||||
|
|
||||||
|
if (!(avctx->codec->capabilities & CODEC_CAP_PARAM_CHANGE))
|
||||||
|
return;
|
||||||
|
|
||||||
|
data = av_packet_get_side_data(avpkt, AV_PKT_DATA_PARAM_CHANGE, &size);
|
||||||
|
if (!data || size < 4)
|
||||||
|
return;
|
||||||
|
flags = bytestream_get_le32(&data);
|
||||||
|
size -= 4;
|
||||||
|
if (size < 4) /* Required for any of the changes */
|
||||||
|
return;
|
||||||
|
if (flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT) {
|
||||||
|
avctx->channels = bytestream_get_le32(&data);
|
||||||
|
size -= 4;
|
||||||
|
}
|
||||||
|
if (flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT) {
|
||||||
|
if (size < 8)
|
||||||
|
return;
|
||||||
|
avctx->channel_layout = bytestream_get_le64(&data);
|
||||||
|
size -= 8;
|
||||||
|
}
|
||||||
|
if (size < 4)
|
||||||
|
return;
|
||||||
|
if (flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE) {
|
||||||
|
avctx->sample_rate = bytestream_get_le32(&data);
|
||||||
|
size -= 4;
|
||||||
|
}
|
||||||
|
if (flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS) {
|
||||||
|
if (size < 8)
|
||||||
|
return;
|
||||||
|
avctx->width = bytestream_get_le32(&data);
|
||||||
|
avctx->height = bytestream_get_le32(&data);
|
||||||
|
avcodec_set_dimensions(avctx, avctx->width, avctx->height);
|
||||||
|
size -= 8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int attribute_align_arg avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture,
|
int attribute_align_arg avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture,
|
||||||
int *got_picture_ptr,
|
int *got_picture_ptr,
|
||||||
AVPacket *avpkt)
|
AVPacket *avpkt)
|
||||||
@ -947,6 +989,7 @@ int attribute_align_arg avcodec_decode_video2(AVCodecContext *avctx, AVFrame *pi
|
|||||||
|
|
||||||
if((avctx->codec->capabilities & CODEC_CAP_DELAY) || avpkt->size || (avctx->active_thread_type&FF_THREAD_FRAME)){
|
if((avctx->codec->capabilities & CODEC_CAP_DELAY) || avpkt->size || (avctx->active_thread_type&FF_THREAD_FRAME)){
|
||||||
av_packet_split_side_data(avpkt);
|
av_packet_split_side_data(avpkt);
|
||||||
|
apply_param_change(avctx, avpkt);
|
||||||
avctx->pkt = avpkt;
|
avctx->pkt = avpkt;
|
||||||
if (HAVE_THREADS && avctx->active_thread_type&FF_THREAD_FRAME)
|
if (HAVE_THREADS && avctx->active_thread_type&FF_THREAD_FRAME)
|
||||||
ret = ff_thread_decode_frame(avctx, picture, got_picture_ptr,
|
ret = ff_thread_decode_frame(avctx, picture, got_picture_ptr,
|
||||||
@ -1031,47 +1074,6 @@ int attribute_align_arg avcodec_decode_audio3(AVCodecContext *avctx, int16_t *sa
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void apply_param_change(AVCodecContext *avctx, AVPacket *avpkt)
|
|
||||||
{
|
|
||||||
int size = 0;
|
|
||||||
const uint8_t *data;
|
|
||||||
uint32_t flags;
|
|
||||||
|
|
||||||
if (!(avctx->codec->capabilities & CODEC_CAP_PARAM_CHANGE))
|
|
||||||
return;
|
|
||||||
|
|
||||||
data = av_packet_get_side_data(avpkt, AV_PKT_DATA_PARAM_CHANGE, &size);
|
|
||||||
if (!data || size < 4)
|
|
||||||
return;
|
|
||||||
flags = bytestream_get_le32(&data);
|
|
||||||
size -= 4;
|
|
||||||
if (size < 4) /* Required for any of the changes */
|
|
||||||
return;
|
|
||||||
if (flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT) {
|
|
||||||
avctx->channels = bytestream_get_le32(&data);
|
|
||||||
size -= 4;
|
|
||||||
}
|
|
||||||
if (flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT) {
|
|
||||||
if (size < 8)
|
|
||||||
return;
|
|
||||||
avctx->channel_layout = bytestream_get_le64(&data);
|
|
||||||
size -= 8;
|
|
||||||
}
|
|
||||||
if (size < 4)
|
|
||||||
return;
|
|
||||||
if (flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE) {
|
|
||||||
avctx->sample_rate = bytestream_get_le32(&data);
|
|
||||||
size -= 4;
|
|
||||||
}
|
|
||||||
if (flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS) {
|
|
||||||
if (size < 8)
|
|
||||||
return;
|
|
||||||
avctx->width = bytestream_get_le32(&data);
|
|
||||||
avctx->height = bytestream_get_le32(&data);
|
|
||||||
size -= 8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx,
|
int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx,
|
||||||
AVFrame *frame,
|
AVFrame *frame,
|
||||||
int *got_frame_ptr,
|
int *got_frame_ptr,
|
||||||
|
@ -5342,7 +5342,7 @@ static av_cold int vc1_decode_init(AVCodecContext *avctx)
|
|||||||
if (v->profile == PROFILE_ADVANCED)
|
if (v->profile == PROFILE_ADVANCED)
|
||||||
avctx->level = v->level;
|
avctx->level = v->level;
|
||||||
|
|
||||||
avctx->has_b_frames = !!(avctx->max_b_frames);
|
avctx->has_b_frames = !!avctx->max_b_frames;
|
||||||
|
|
||||||
s->mb_width = (avctx->coded_width + 15) >> 4;
|
s->mb_width = (avctx->coded_width + 15) >> 4;
|
||||||
s->mb_height = (avctx->coded_height + 15) >> 4;
|
s->mb_height = (avctx->coded_height + 15) >> 4;
|
||||||
|
@ -820,8 +820,7 @@ static void create_map(vorbis_context *vc, unsigned floor_number)
|
|||||||
|
|
||||||
for (idx = 0; idx < n; ++idx) {
|
for (idx = 0; idx < n; ++idx) {
|
||||||
map[idx] = floor(BARK((vf->rate * idx) / (2.0f * n)) *
|
map[idx] = floor(BARK((vf->rate * idx) / (2.0f * n)) *
|
||||||
((vf->bark_map_size) /
|
(vf->bark_map_size / BARK(vf->rate / 2.0f)));
|
||||||
BARK(vf->rate / 2.0f)));
|
|
||||||
if (vf->bark_map_size-1 < map[idx])
|
if (vf->bark_map_size-1 < map[idx])
|
||||||
map[idx] = vf->bark_map_size - 1;
|
map[idx] = vf->bark_map_size - 1;
|
||||||
}
|
}
|
||||||
@ -979,7 +978,7 @@ static av_cold int vorbis_decode_init(AVCodecContext *avccontext)
|
|||||||
int headers_len = avccontext->extradata_size;
|
int headers_len = avccontext->extradata_size;
|
||||||
uint8_t *header_start[3];
|
uint8_t *header_start[3];
|
||||||
int header_len[3];
|
int header_len[3];
|
||||||
GetBitContext *gb = &(vc->gb);
|
GetBitContext *gb = &vc->gb;
|
||||||
int hdr_type, ret;
|
int hdr_type, ret;
|
||||||
|
|
||||||
vc->avccontext = avccontext;
|
vc->avccontext = avccontext;
|
||||||
@ -1642,7 +1641,7 @@ static int vorbis_decode_frame(AVCodecContext *avccontext, void *data,
|
|||||||
const uint8_t *buf = avpkt->data;
|
const uint8_t *buf = avpkt->data;
|
||||||
int buf_size = avpkt->size;
|
int buf_size = avpkt->size;
|
||||||
vorbis_context *vc = avccontext->priv_data;
|
vorbis_context *vc = avccontext->priv_data;
|
||||||
GetBitContext *gb = &(vc->gb);
|
GetBitContext *gb = &vc->gb;
|
||||||
const float *channel_ptrs[255];
|
const float *channel_ptrs[255];
|
||||||
int i, len, ret;
|
int i, len, ret;
|
||||||
|
|
||||||
|
@ -30,7 +30,6 @@
|
|||||||
#include "dsputil.h"
|
#include "dsputil.h"
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
#include "bytestream.h"
|
#include "bytestream.h"
|
||||||
#include "cabac.h"
|
|
||||||
#include "vp56dsp.h"
|
#include "vp56dsp.h"
|
||||||
|
|
||||||
typedef struct vp56_context VP56Context;
|
typedef struct vp56_context VP56Context;
|
||||||
|
@ -618,7 +618,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
|
|||||||
c->bpp = avctx->bits_per_coded_sample;
|
c->bpp = avctx->bits_per_coded_sample;
|
||||||
|
|
||||||
// Needed if zlib unused or init aborted before inflateInit
|
// Needed if zlib unused or init aborted before inflateInit
|
||||||
memset(&(c->zstream), 0, sizeof(z_stream));
|
memset(&c->zstream, 0, sizeof(z_stream));
|
||||||
|
|
||||||
avctx->pix_fmt = PIX_FMT_RGB24;
|
avctx->pix_fmt = PIX_FMT_RGB24;
|
||||||
c->decomp_size = (avctx->width + 255) * 4 * (avctx->height + 64);
|
c->decomp_size = (avctx->width + 255) * 4 * (avctx->height + 64);
|
||||||
@ -635,7 +635,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
|
|||||||
c->zstream.zalloc = Z_NULL;
|
c->zstream.zalloc = Z_NULL;
|
||||||
c->zstream.zfree = Z_NULL;
|
c->zstream.zfree = Z_NULL;
|
||||||
c->zstream.opaque = Z_NULL;
|
c->zstream.opaque = Z_NULL;
|
||||||
zret = inflateInit(&(c->zstream));
|
zret = inflateInit(&c->zstream);
|
||||||
if (zret != Z_OK) {
|
if (zret != Z_OK) {
|
||||||
av_log(avctx, AV_LOG_ERROR, "Inflate init error: %d\n", zret);
|
av_log(avctx, AV_LOG_ERROR, "Inflate init error: %d\n", zret);
|
||||||
return 1;
|
return 1;
|
||||||
@ -659,7 +659,7 @@ static av_cold int decode_end(AVCodecContext *avctx)
|
|||||||
|
|
||||||
if (c->pic.data[0])
|
if (c->pic.data[0])
|
||||||
avctx->release_buffer(avctx, &c->pic);
|
avctx->release_buffer(avctx, &c->pic);
|
||||||
inflateEnd(&(c->zstream));
|
inflateEnd(&c->zstream);
|
||||||
av_freep(&c->cur);
|
av_freep(&c->cur);
|
||||||
av_freep(&c->prev);
|
av_freep(&c->prev);
|
||||||
|
|
||||||
|
@ -269,7 +269,7 @@ static av_cold int encode_init(AVCodecContext *avctx)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Needed if zlib unused or init aborted before deflateInit
|
// Needed if zlib unused or init aborted before deflateInit
|
||||||
memset(&(c->zstream), 0, sizeof(z_stream));
|
memset(&c->zstream, 0, sizeof(z_stream));
|
||||||
c->comp_size = avctx->width * avctx->height + 1024 +
|
c->comp_size = avctx->width * avctx->height + 1024 +
|
||||||
((avctx->width + ZMBV_BLOCK - 1) / ZMBV_BLOCK) * ((avctx->height + ZMBV_BLOCK - 1) / ZMBV_BLOCK) * 2 + 4;
|
((avctx->width + ZMBV_BLOCK - 1) / ZMBV_BLOCK) * ((avctx->height + ZMBV_BLOCK - 1) / ZMBV_BLOCK) * 2 + 4;
|
||||||
if ((c->work_buf = av_malloc(c->comp_size)) == NULL) {
|
if ((c->work_buf = av_malloc(c->comp_size)) == NULL) {
|
||||||
@ -294,7 +294,7 @@ static av_cold int encode_init(AVCodecContext *avctx)
|
|||||||
c->zstream.zalloc = Z_NULL;
|
c->zstream.zalloc = Z_NULL;
|
||||||
c->zstream.zfree = Z_NULL;
|
c->zstream.zfree = Z_NULL;
|
||||||
c->zstream.opaque = Z_NULL;
|
c->zstream.opaque = Z_NULL;
|
||||||
zret = deflateInit(&(c->zstream), lvl);
|
zret = deflateInit(&c->zstream, lvl);
|
||||||
if (zret != Z_OK) {
|
if (zret != Z_OK) {
|
||||||
av_log(avctx, AV_LOG_ERROR, "Inflate init error: %d\n", zret);
|
av_log(avctx, AV_LOG_ERROR, "Inflate init error: %d\n", zret);
|
||||||
return -1;
|
return -1;
|
||||||
@ -317,7 +317,7 @@ static av_cold int encode_end(AVCodecContext *avctx)
|
|||||||
av_freep(&c->comp_buf);
|
av_freep(&c->comp_buf);
|
||||||
av_freep(&c->work_buf);
|
av_freep(&c->work_buf);
|
||||||
|
|
||||||
deflateEnd(&(c->zstream));
|
deflateEnd(&c->zstream);
|
||||||
av_freep(&c->prev);
|
av_freep(&c->prev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -292,7 +292,7 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
|
|||||||
|
|
||||||
|
|
||||||
if (bktr_init(s1->filename, width, height, s->standard,
|
if (bktr_init(s1->filename, width, height, s->standard,
|
||||||
&(s->video_fd), &(s->tuner_fd), -1, 0.0) < 0) {
|
&s->video_fd, &s->tuner_fd, -1, 0.0) < 0) {
|
||||||
ret = AVERROR(EIO);
|
ret = AVERROR(EIO);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -69,7 +69,7 @@ double ff_timefilter_update(TimeFilter *self, double system_time, double period)
|
|||||||
loop_error = system_time - self->cycle_time;
|
loop_error = system_time - self->cycle_time;
|
||||||
|
|
||||||
/// update loop
|
/// update loop
|
||||||
self->cycle_time += FFMAX(self->feedback2_factor, 1.0/(self->count)) * loop_error;
|
self->cycle_time += FFMAX(self->feedback2_factor, 1.0 / self->count) * loop_error;
|
||||||
self->clock_period += self->feedback3_factor * loop_error / period;
|
self->clock_period += self->feedback3_factor * loop_error / period;
|
||||||
}
|
}
|
||||||
return self->cycle_time;
|
return self->cycle_time;
|
||||||
|
@ -217,7 +217,7 @@ static int request_frame(AVFilterLink *link)
|
|||||||
static int poll_frame(AVFilterLink *link)
|
static int poll_frame(AVFilterLink *link)
|
||||||
{
|
{
|
||||||
BufferSourceContext *c = link->src->priv;
|
BufferSourceContext *c = link->src->priv;
|
||||||
return !!(c->picref);
|
return !!c->picref;
|
||||||
}
|
}
|
||||||
|
|
||||||
AVFilter avfilter_vsrc_buffer = {
|
AVFilter avfilter_vsrc_buffer = {
|
||||||
|
@ -371,6 +371,6 @@ OBJS-$(CONFIG_TCP_PROTOCOL) += tcp.o
|
|||||||
OBJS-$(CONFIG_TLS_PROTOCOL) += tls.o
|
OBJS-$(CONFIG_TLS_PROTOCOL) += tls.o
|
||||||
OBJS-$(CONFIG_UDP_PROTOCOL) += udp.o
|
OBJS-$(CONFIG_UDP_PROTOCOL) += udp.o
|
||||||
|
|
||||||
|
SKIPHEADERS-$(CONFIG_NETWORK) += network.h rtsp.h
|
||||||
TESTPROGS = seek
|
TESTPROGS = seek
|
||||||
TOOLS = pktdumper probetest
|
TOOLS = pktdumper probetest
|
||||||
|
@ -168,7 +168,7 @@ static void flush_buffer(AVIOContext *s)
|
|||||||
|
|
||||||
void avio_w8(AVIOContext *s, int b)
|
void avio_w8(AVIOContext *s, int b)
|
||||||
{
|
{
|
||||||
*(s->buf_ptr)++ = b;
|
*s->buf_ptr++ = b;
|
||||||
if (s->buf_ptr >= s->buf_end)
|
if (s->buf_ptr >= s->buf_end)
|
||||||
flush_buffer(s);
|
flush_buffer(s);
|
||||||
}
|
}
|
||||||
|
@ -221,10 +221,6 @@ static int process_audio_header_eacs(AVFormatContext *s)
|
|||||||
|
|
||||||
ea->sample_rate = ea->big_endian ? avio_rb32(pb) : avio_rl32(pb);
|
ea->sample_rate = ea->big_endian ? avio_rb32(pb) : avio_rl32(pb);
|
||||||
ea->bytes = avio_r8(pb); /* 1=8-bit, 2=16-bit */
|
ea->bytes = avio_r8(pb); /* 1=8-bit, 2=16-bit */
|
||||||
if(ea->bytes == 0){
|
|
||||||
av_log(s,AV_LOG_ERROR,"the file is corrupted, ea->bytes = 0\n");
|
|
||||||
return AVERROR_INVALIDDATA;
|
|
||||||
}
|
|
||||||
ea->num_channels = avio_r8(pb);
|
ea->num_channels = avio_r8(pb);
|
||||||
compression_type = avio_r8(pb);
|
compression_type = avio_r8(pb);
|
||||||
avio_skip(pb, 13);
|
avio_skip(pb, 13);
|
||||||
@ -440,6 +436,11 @@ static int ea_read_header(AVFormatContext *s,
|
|||||||
ea->audio_codec = 0;
|
ea->audio_codec = 0;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
if (ea->bytes <= 0) {
|
||||||
|
av_log(s, AV_LOG_ERROR, "Invalid number of bytes per sample: %d\n", ea->bytes);
|
||||||
|
ea->audio_codec = CODEC_ID_NONE;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* initialize the audio decoder stream */
|
/* initialize the audio decoder stream */
|
||||||
st = avformat_new_stream(s, NULL);
|
st = avformat_new_stream(s, NULL);
|
||||||
|
@ -89,6 +89,7 @@ typedef struct IPMVEContext {
|
|||||||
int64_t video_pts;
|
int64_t video_pts;
|
||||||
uint32_t palette[256];
|
uint32_t palette[256];
|
||||||
int has_palette;
|
int has_palette;
|
||||||
|
int changed;
|
||||||
|
|
||||||
unsigned int audio_bits;
|
unsigned int audio_bits;
|
||||||
unsigned int audio_channels;
|
unsigned int audio_channels;
|
||||||
@ -168,6 +169,10 @@ static int load_ipmovie_packet(IPMVEContext *s, AVIOContext *pb,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (s->changed) {
|
||||||
|
ff_add_param_change(pkt, 0, 0, 0, s->video_width, s->video_height);
|
||||||
|
s->changed = 0;
|
||||||
|
}
|
||||||
pkt->pos= s->decode_map_chunk_offset;
|
pkt->pos= s->decode_map_chunk_offset;
|
||||||
avio_seek(pb, s->decode_map_chunk_offset, SEEK_SET);
|
avio_seek(pb, s->decode_map_chunk_offset, SEEK_SET);
|
||||||
s->decode_map_chunk_offset = 0;
|
s->decode_map_chunk_offset = 0;
|
||||||
@ -223,6 +228,7 @@ static int process_ipmovie_chunk(IPMVEContext *s, AVIOContext *pb,
|
|||||||
int first_color, last_color;
|
int first_color, last_color;
|
||||||
int audio_flags;
|
int audio_flags;
|
||||||
unsigned char r, g, b;
|
unsigned char r, g, b;
|
||||||
|
unsigned int width, height;
|
||||||
|
|
||||||
/* see if there are any pending packets */
|
/* see if there are any pending packets */
|
||||||
chunk_type = load_ipmovie_packet(s, pb, pkt);
|
chunk_type = load_ipmovie_packet(s, pb, pkt);
|
||||||
@ -379,8 +385,16 @@ static int process_ipmovie_chunk(IPMVEContext *s, AVIOContext *pb,
|
|||||||
chunk_type = CHUNK_BAD;
|
chunk_type = CHUNK_BAD;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
s->video_width = AV_RL16(&scratch[0]) * 8;
|
width = AV_RL16(&scratch[0]) * 8;
|
||||||
s->video_height = AV_RL16(&scratch[2]) * 8;
|
height = AV_RL16(&scratch[2]) * 8;
|
||||||
|
if (width != s->video_width) {
|
||||||
|
s->video_width = width;
|
||||||
|
s->changed++;
|
||||||
|
}
|
||||||
|
if (height != s->video_height) {
|
||||||
|
s->video_height = height;
|
||||||
|
s->changed++;
|
||||||
|
}
|
||||||
if (opcode_version < 2 || !AV_RL16(&scratch[6])) {
|
if (opcode_version < 2 || !AV_RL16(&scratch[6])) {
|
||||||
s->video_bpp = 8;
|
s->video_bpp = 8;
|
||||||
} else {
|
} else {
|
||||||
|
@ -53,7 +53,7 @@ typedef struct MTVDemuxContext {
|
|||||||
static int mtv_probe(AVProbeData *p)
|
static int mtv_probe(AVProbeData *p)
|
||||||
{
|
{
|
||||||
/* Magic is 'AMV' */
|
/* Magic is 'AMV' */
|
||||||
if(*(p->buf) != 'A' || *(p->buf+1) != 'M' || *(p->buf+2) != 'V')
|
if (*p->buf != 'A' || *(p->buf + 1) != 'M' || *(p->buf + 2) != 'V')
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Check for nonzero in bpp and (width|height) header fields */
|
/* Check for nonzero in bpp and (width|height) header fields */
|
||||||
|
@ -662,7 +662,7 @@ static int rm_assemble_video_frame(AVFormatContext *s, AVIOContext *pb,
|
|||||||
vst->videobufpos += len;
|
vst->videobufpos += len;
|
||||||
rm->remaining_len-= len;
|
rm->remaining_len-= len;
|
||||||
|
|
||||||
if(type == 2 || (vst->videobufpos) == vst->videobufsize){
|
if (type == 2 || vst->videobufpos == vst->videobufsize) {
|
||||||
vst->pkt.data[0] = vst->cur_slice-1;
|
vst->pkt.data[0] = vst->cur_slice-1;
|
||||||
*pkt= vst->pkt;
|
*pkt= vst->pkt;
|
||||||
vst->pkt.data= NULL;
|
vst->pkt.data= NULL;
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include "libavutil/intreadwrite.h"
|
#include "libavutil/intreadwrite.h"
|
||||||
#include "libavutil/dict.h"
|
#include "libavutil/dict.h"
|
||||||
#include "libavutil/mathematics.h"
|
#include "libavutil/mathematics.h"
|
||||||
|
#include "riff.h"
|
||||||
|
|
||||||
typedef struct VqfContext {
|
typedef struct VqfContext {
|
||||||
int frame_bit_len;
|
int frame_bit_len;
|
||||||
@ -45,11 +46,11 @@ static int vqf_probe(AVProbeData *probe_packet)
|
|||||||
return AVPROBE_SCORE_MAX/2;
|
return AVPROBE_SCORE_MAX/2;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void add_metadata(AVFormatContext *s, const char *tag,
|
static void add_metadata(AVFormatContext *s, uint32_t tag,
|
||||||
unsigned int tag_len, unsigned int remaining)
|
unsigned int tag_len, unsigned int remaining)
|
||||||
{
|
{
|
||||||
int len = FFMIN(tag_len, remaining);
|
int len = FFMIN(tag_len, remaining);
|
||||||
char *buf;
|
char *buf, key[5] = {0};
|
||||||
|
|
||||||
if (len == UINT_MAX)
|
if (len == UINT_MAX)
|
||||||
return;
|
return;
|
||||||
@ -59,9 +60,32 @@ static void add_metadata(AVFormatContext *s, const char *tag,
|
|||||||
return;
|
return;
|
||||||
avio_read(s->pb, buf, len);
|
avio_read(s->pb, buf, len);
|
||||||
buf[len] = 0;
|
buf[len] = 0;
|
||||||
av_dict_set(&s->metadata, tag, buf, AV_DICT_DONT_STRDUP_VAL);
|
AV_WL32(key, tag);
|
||||||
|
av_dict_set(&s->metadata, key, buf, AV_DICT_DONT_STRDUP_VAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const AVMetadataConv vqf_metadata_conv[] = {
|
||||||
|
{ "(c) ", "copyright" },
|
||||||
|
{ "ARNG", "arranger" },
|
||||||
|
{ "AUTH", "author" },
|
||||||
|
{ "BAND", "band" },
|
||||||
|
{ "CDCT", "conductor" },
|
||||||
|
{ "COMT", "comment" },
|
||||||
|
{ "FILE", "filename" },
|
||||||
|
{ "GENR", "genre" },
|
||||||
|
{ "LABL", "publisher" },
|
||||||
|
{ "MUSC", "composer" },
|
||||||
|
{ "NAME", "title" },
|
||||||
|
{ "NOTE", "note" },
|
||||||
|
{ "PROD", "producer" },
|
||||||
|
{ "PRSN", "personnel" },
|
||||||
|
{ "REMX", "remixer" },
|
||||||
|
{ "SING", "singer" },
|
||||||
|
{ "TRCK", "track" },
|
||||||
|
{ "WORD", "words" },
|
||||||
|
{ 0 },
|
||||||
|
};
|
||||||
|
|
||||||
static int vqf_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
static int vqf_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
||||||
{
|
{
|
||||||
VqfContext *c = s->priv_data;
|
VqfContext *c = s->priv_data;
|
||||||
@ -110,41 +134,25 @@ static int vqf_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
|||||||
|
|
||||||
st->codec->bit_rate = read_bitrate*1000;
|
st->codec->bit_rate = read_bitrate*1000;
|
||||||
break;
|
break;
|
||||||
case MKTAG('N','A','M','E'):
|
case MKTAG('D','S','I','Z'): // size of compressed data
|
||||||
add_metadata(s, "title" , len, header_size);
|
{
|
||||||
|
char buf[8] = {0};
|
||||||
|
int size = avio_rb32(s->pb);
|
||||||
|
|
||||||
|
snprintf(buf, sizeof(buf), "%d", size);
|
||||||
|
av_dict_set(&s->metadata, "size", buf, 0);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case MKTAG('(','c',')',' '):
|
case MKTAG('Y','E','A','R'): // recording date
|
||||||
add_metadata(s, "copyright", len, header_size);
|
case MKTAG('E','N','C','D'): // compression date
|
||||||
break;
|
case MKTAG('E','X','T','R'): // reserved
|
||||||
case MKTAG('A','U','T','H'):
|
case MKTAG('_','Y','M','H'): // reserved
|
||||||
add_metadata(s, "author" , len, header_size);
|
case MKTAG('_','N','T','T'): // reserved
|
||||||
break;
|
case MKTAG('_','I','D','3'): // reserved for ID3 tags
|
||||||
case MKTAG('A','L','B','M'):
|
avio_skip(s->pb, FFMIN(len, header_size));
|
||||||
add_metadata(s, "album" , len, header_size);
|
|
||||||
break;
|
|
||||||
case MKTAG('T','R','C','K'):
|
|
||||||
add_metadata(s, "track" , len, header_size);
|
|
||||||
break;
|
|
||||||
case MKTAG('C','O','M','T'):
|
|
||||||
add_metadata(s, "comment" , len, header_size);
|
|
||||||
break;
|
|
||||||
case MKTAG('F','I','L','E'):
|
|
||||||
add_metadata(s, "filename" , len, header_size);
|
|
||||||
break;
|
|
||||||
case MKTAG('D','S','I','Z'):
|
|
||||||
add_metadata(s, "size" , len, header_size);
|
|
||||||
break;
|
|
||||||
case MKTAG('D','A','T','E'):
|
|
||||||
add_metadata(s, "date" , len, header_size);
|
|
||||||
break;
|
|
||||||
case MKTAG('G','E','N','R'):
|
|
||||||
add_metadata(s, "genre" , len, header_size);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
av_log(s, AV_LOG_ERROR, "Unknown chunk: %c%c%c%c\n",
|
add_metadata(s, chunk_tag, len, header_size);
|
||||||
((char*)&chunk_tag)[0], ((char*)&chunk_tag)[1],
|
|
||||||
((char*)&chunk_tag)[2], ((char*)&chunk_tag)[3]);
|
|
||||||
avio_skip(s->pb, FFMIN(len, header_size));
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -201,6 +209,8 @@ static int vqf_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
|||||||
st->codec->extradata_size = 12;
|
st->codec->extradata_size = 12;
|
||||||
memcpy(st->codec->extradata, comm_chunk, 12);
|
memcpy(st->codec->extradata, comm_chunk, 12);
|
||||||
|
|
||||||
|
ff_metadata_conv_ctx(s, NULL, vqf_metadata_conv);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,6 +10,9 @@ fate-bink-demux: CMD = crc -i $(SAMPLES)/bink/Snd0a7d9b58.dee -vn -acodec copy
|
|||||||
FATE_TESTS += fate-bink-demux-video
|
FATE_TESTS += fate-bink-demux-video
|
||||||
fate-bink-demux-video: CMD = framecrc -i $(SAMPLES)/bink/hol2br.bik
|
fate-bink-demux-video: CMD = framecrc -i $(SAMPLES)/bink/hol2br.bik
|
||||||
|
|
||||||
|
FATE_TESTS += fate-bmv
|
||||||
|
fate-bmv: CMD = framecrc -i $(SAMPLES)/bmv/SURFING-partial.BMV -pix_fmt rgb24
|
||||||
|
|
||||||
FATE_TESTS += fate-caf
|
FATE_TESTS += fate-caf
|
||||||
fate-caf: CMD = crc -i $(SAMPLES)/caf/caf-pcm16.caf
|
fate-caf: CMD = crc -i $(SAMPLES)/caf/caf-pcm16.caf
|
||||||
|
|
||||||
@ -78,3 +81,6 @@ fate-siff: CMD = framecrc -i $(SAMPLES)/SIFF/INTRO_B.VB -t 3 -pix_fmt rgb24
|
|||||||
|
|
||||||
FATE_TESTS += fate-westwood-aud
|
FATE_TESTS += fate-westwood-aud
|
||||||
fate-westwood-aud: CMD = md5 -i $(SAMPLES)/westwood-aud/excellent.aud -f s16le
|
fate-westwood-aud: CMD = md5 -i $(SAMPLES)/westwood-aud/excellent.aud -f s16le
|
||||||
|
|
||||||
|
FATE_TESTS += fate-xmv-demux
|
||||||
|
fate-xmv-demux: CMD = framecrc -i $(SAMPLES)/xmv/logos1p.fmv -vcodec copy -acodec copy
|
||||||
|
@ -378,4 +378,4 @@ fate-h264-conformance-sva_nl2_e: CMD = framecrc -vsync 0 -i $(SAMPLES)/h264-conf
|
|||||||
fate-h264-interlace-crop: CMD = framecrc -vsync 0 -i $(SAMPLES)/h264/interlaced_crop.mp4 -vframes 3
|
fate-h264-interlace-crop: CMD = framecrc -vsync 0 -i $(SAMPLES)/h264/interlaced_crop.mp4 -vframes 3
|
||||||
fate-h264-lossless: CMD = framecrc -vsync 0 -i $(SAMPLES)/h264/lossless.h264
|
fate-h264-lossless: CMD = framecrc -vsync 0 -i $(SAMPLES)/h264/lossless.h264
|
||||||
fate-h264-extreme-plane-pred: CMD = framemd5 -vsync 0 -i $(SAMPLES)/h264/extreme-plane-pred.h264
|
fate-h264-extreme-plane-pred: CMD = framemd5 -vsync 0 -i $(SAMPLES)/h264/extreme-plane-pred.h264
|
||||||
fate-h264-bsf-mp4toannexb: CMD = md5 -i $(SAMPLES)/h264/interlaced_crop.mp4 -vcodec copy -bsf h264_mp4toannexb -f mpeg
|
fate-h264-bsf-mp4toannexb: CMD = md5 -i $(SAMPLES)/h264/interlaced_crop.mp4 -vcodec copy -bsf h264_mp4toannexb -f h264
|
||||||
|
@ -4,6 +4,9 @@ fate-indeo2: CMD = framecrc -i $(SAMPLES)/rt21/VPAR0026.AVI
|
|||||||
FATE_INDEO += fate-indeo3
|
FATE_INDEO += fate-indeo3
|
||||||
fate-indeo3: CMD = framecrc -i $(SAMPLES)/iv32/cubes.mov
|
fate-indeo3: CMD = framecrc -i $(SAMPLES)/iv32/cubes.mov
|
||||||
|
|
||||||
|
FATE_INDEO += fate-indeo4
|
||||||
|
fate-indeo4: CMD = framecrc -i $(SAMPLES)/iv41/indeo41-partial.avi -an
|
||||||
|
|
||||||
FATE_INDEO += fate-indeo5
|
FATE_INDEO += fate-indeo5
|
||||||
fate-indeo5: CMD = framecrc -i $(SAMPLES)/iv50/Educ_Movie_DeadlyForce.avi -an
|
fate-indeo5: CMD = framecrc -i $(SAMPLES)/iv50/Educ_Movie_DeadlyForce.avi -an
|
||||||
|
|
||||||
|
@ -185,5 +185,5 @@ fate-wnv1: CMD = framecrc -i $(SAMPLES)/wnv1/wnv1-codec.avi -an
|
|||||||
FATE_TESTS += fate-yop
|
FATE_TESTS += fate-yop
|
||||||
fate-yop: CMD = framecrc -i $(SAMPLES)/yop/test1.yop -pix_fmt rgb24 -an
|
fate-yop: CMD = framecrc -i $(SAMPLES)/yop/test1.yop -pix_fmt rgb24 -an
|
||||||
|
|
||||||
FATE_TESTS += fate-xxan-wc4
|
#FATE_TESTS += fate-xxan-wc4
|
||||||
fate-xxan-wc4: CMD = framecrc -i $(SAMPLES)/wc4-xan/wc4_2.avi -an -vframes 10
|
#fate-xxan-wc4: CMD = framecrc -i $(SAMPLES)/wc4-xan/wc4trailer-partial.avi -an
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
156f63e3391b95020ae882dbae6eccf3 *./tests/data/acodec/g722.wav
|
b813a52d4efe6cf7974190ea9c4c7e8c *./tests/data/acodec/g722.wav
|
||||||
47991 ./tests/data/acodec/g722.wav
|
48053 ./tests/data/acodec/g722.wav
|
||||||
8f65de513acc08b37a488d6a802b4f00 *./tests/data/g722.acodec.out.wav
|
d8344d14a11eef0418b856af70694cbe *./tests/data/g722.acodec.out.wav
|
||||||
stddev: 8860.50 PSNR: 17.38 MAXDIFF:33814 bytes: 191732/ 1058400
|
stddev: 8841.18 PSNR: 17.40 MAXDIFF:36225 bytes: 191980/ 1058400
|
||||||
|
42
tests/ref/fate/bmv
Normal file
42
tests/ref/fate/bmv
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
0, 0, 823680, 0xddb8a306
|
||||||
|
1, 0, 7424, 0x18540b36
|
||||||
|
0, 7500, 823680, 0xa95375c8
|
||||||
|
1, 7576, 7296, 0x5acd2484
|
||||||
|
0, 15000, 823680, 0xa95375c8
|
||||||
|
1, 15020, 7424, 0xa1bc5c5a
|
||||||
|
0, 22500, 823680, 0xb6f78afe
|
||||||
|
1, 22596, 7296, 0x71a02ad1
|
||||||
|
0, 30000, 823680, 0xb6f78afe
|
||||||
|
1, 30041, 7424, 0x09cc32f2
|
||||||
|
0, 37500, 823680, 0x45b9c8f0
|
||||||
|
1, 37616, 7296, 0xa3451726
|
||||||
|
0, 45000, 823680, 0x45b9c8f0
|
||||||
|
1, 45061, 7296, 0x1eb40a18
|
||||||
|
0, 52500, 823680, 0x7653d8e9
|
||||||
|
1, 52506, 7424, 0xc55a2acf
|
||||||
|
0, 60000, 823680, 0x7653d8e9
|
||||||
|
1, 60082, 7296, 0x5b9fad3f
|
||||||
|
0, 67500, 823680, 0xf1e2fd73
|
||||||
|
1, 67527, 7424, 0xea651ae7
|
||||||
|
0, 75000, 823680, 0xf1e2fd73
|
||||||
|
1, 75102, 7296, 0x2bd5ddb6
|
||||||
|
0, 82500, 823680, 0x6d2deab3
|
||||||
|
1, 82547, 7424, 0xde4243b4
|
||||||
|
0, 90000, 823680, 0x6d2deab3
|
||||||
|
1, 90122, 7296, 0x358806d3
|
||||||
|
0, 97500, 823680, 0x37fd33ce
|
||||||
|
1, 97567, 7296, 0x511a144e
|
||||||
|
0, 105000, 823680, 0x37fd33ce
|
||||||
|
1, 105012, 7424, 0x887a3e84
|
||||||
|
0, 112500, 823680, 0x0a8e0ab9
|
||||||
|
1, 112588, 7296, 0xfeae2a0c
|
||||||
|
0, 120000, 823680, 0x0a8e0ab9
|
||||||
|
1, 120033, 7424, 0xa4ea5d22
|
||||||
|
0, 127500, 823680, 0x991bb2b0
|
||||||
|
1, 127608, 7296, 0xb3adf7fa
|
||||||
|
0, 135000, 823680, 0x991bb2b0
|
||||||
|
1, 135053, 7424, 0xce995dcc
|
||||||
|
0, 142500, 823680, 0xb8397c8c
|
||||||
|
1, 142629, 7296, 0x5b4cf574
|
||||||
|
0, 150000, 823680, 0xb8397c8c
|
||||||
|
1, 150073, 7296, 0x8a70eaf0
|
@ -1 +1 @@
|
|||||||
503d34ff458a86387ab349c31726f19a
|
5f04c27cc6ee8625fe2405fb0f7da9a3
|
||||||
|
100
tests/ref/fate/indeo4
Normal file
100
tests/ref/fate/indeo4
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
0, 0, 86400, 0x98f5e422
|
||||||
|
0, 6000, 86400, 0x1864cb06
|
||||||
|
0, 12000, 86400, 0xb09532ef
|
||||||
|
0, 18000, 86400, 0x3cd3dcdc
|
||||||
|
0, 24000, 86400, 0xe738847f
|
||||||
|
0, 30000, 86400, 0xc9b13afb
|
||||||
|
0, 36000, 86400, 0x5005d035
|
||||||
|
0, 42000, 86400, 0x22f63e17
|
||||||
|
0, 48000, 86400, 0x93391f02
|
||||||
|
0, 54000, 86400, 0x264830fd
|
||||||
|
0, 60000, 86400, 0x8fff9f5f
|
||||||
|
0, 66000, 86400, 0x524997fe
|
||||||
|
0, 72000, 86400, 0x54e330f9
|
||||||
|
0, 78000, 86400, 0x1d766a22
|
||||||
|
0, 84000, 86400, 0x683a70ac
|
||||||
|
0, 90000, 86400, 0x553b7b3d
|
||||||
|
0, 96000, 86400, 0x822c79bc
|
||||||
|
0, 102000, 86400, 0xe1087a1c
|
||||||
|
0, 108000, 86400, 0xff397595
|
||||||
|
0, 114000, 86400, 0x1b6b7717
|
||||||
|
0, 120000, 86400, 0x6c5275c1
|
||||||
|
0, 126000, 86400, 0x4e6a7189
|
||||||
|
0, 132000, 86400, 0x285c6eba
|
||||||
|
0, 138000, 86400, 0xce647227
|
||||||
|
0, 144000, 86400, 0xa0d07b1c
|
||||||
|
0, 150000, 86400, 0x5b567861
|
||||||
|
0, 156000, 86400, 0x105873ec
|
||||||
|
0, 162000, 86400, 0x59267fa0
|
||||||
|
0, 168000, 86400, 0xaeac839f
|
||||||
|
0, 174000, 86400, 0x2faf7402
|
||||||
|
0, 180000, 86400, 0xc8547a30
|
||||||
|
0, 186000, 86400, 0x3d357d49
|
||||||
|
0, 192000, 86400, 0x75db6d6c
|
||||||
|
0, 198000, 86400, 0x9fbf68e9
|
||||||
|
0, 204000, 86400, 0x56a64d26
|
||||||
|
0, 210000, 86400, 0xce9e1f43
|
||||||
|
0, 216000, 86400, 0xa4d7fddc
|
||||||
|
0, 222000, 86400, 0x3e20d77c
|
||||||
|
0, 228000, 86400, 0x4680661d
|
||||||
|
0, 234000, 86400, 0xf1b20af3
|
||||||
|
0, 240000, 86400, 0xb79d8045
|
||||||
|
0, 246000, 86400, 0x9479fc8a
|
||||||
|
0, 252000, 86400, 0x232965c3
|
||||||
|
0, 258000, 86400, 0xd18bca17
|
||||||
|
0, 264000, 86400, 0xb9064249
|
||||||
|
0, 270000, 86400, 0xcc48ab34
|
||||||
|
0, 276000, 86400, 0xe25018cd
|
||||||
|
0, 282000, 86400, 0x8da489ee
|
||||||
|
0, 288000, 86400, 0x90de0fc1
|
||||||
|
0, 294000, 86400, 0x2428dcee
|
||||||
|
0, 300000, 86400, 0x4316e1ae
|
||||||
|
0, 306000, 86400, 0x2b25e54c
|
||||||
|
0, 312000, 86400, 0x736ce020
|
||||||
|
0, 318000, 86400, 0x9a6be09a
|
||||||
|
0, 324000, 86400, 0x23bddbcd
|
||||||
|
0, 330000, 86400, 0x9368e465
|
||||||
|
0, 336000, 86400, 0x1ae9bb87
|
||||||
|
0, 342000, 86400, 0x4e591f32
|
||||||
|
0, 348000, 86400, 0xba1bf9dc
|
||||||
|
0, 354000, 86400, 0x07f0aa60
|
||||||
|
0, 360000, 86400, 0xf5a2cfa2
|
||||||
|
0, 366000, 86400, 0xcba5fc18
|
||||||
|
0, 372000, 86400, 0x858c0cfe
|
||||||
|
0, 378000, 86400, 0xac73ecd4
|
||||||
|
0, 384000, 86400, 0xf41bf03c
|
||||||
|
0, 390000, 86400, 0x928ed146
|
||||||
|
0, 396000, 86400, 0x9ff5990a
|
||||||
|
0, 402000, 86400, 0xc2fabc3d
|
||||||
|
0, 408000, 86400, 0x94af87a3
|
||||||
|
0, 414000, 86400, 0x9bae514c
|
||||||
|
0, 420000, 86400, 0xe0da267a
|
||||||
|
0, 426000, 86400, 0x1d40f55c
|
||||||
|
0, 432000, 86400, 0xe6173b68
|
||||||
|
0, 438000, 86400, 0x1445490d
|
||||||
|
0, 444000, 86400, 0x8d8753c1
|
||||||
|
0, 450000, 86400, 0xe5a7779d
|
||||||
|
0, 456000, 86400, 0x3cfc66ef
|
||||||
|
0, 462000, 86400, 0xa5d45608
|
||||||
|
0, 468000, 86400, 0x62f17be1
|
||||||
|
0, 474000, 86400, 0xa64c84d3
|
||||||
|
0, 480000, 86400, 0xf98162f0
|
||||||
|
0, 486000, 86400, 0x0db77d9f
|
||||||
|
0, 492000, 86400, 0x0f0cbac9
|
||||||
|
0, 498000, 86400, 0xb9934e97
|
||||||
|
0, 504000, 86400, 0x7f8fa248
|
||||||
|
0, 510000, 86400, 0xdfd96768
|
||||||
|
0, 516000, 86400, 0x81b07919
|
||||||
|
0, 522000, 86400, 0x66c11e9f
|
||||||
|
0, 528000, 86400, 0xd86eb114
|
||||||
|
0, 534000, 86400, 0x67f20c1f
|
||||||
|
0, 540000, 86400, 0x66915de5
|
||||||
|
0, 546000, 86400, 0x2b8aa76f
|
||||||
|
0, 552000, 86400, 0x85b5a3d2
|
||||||
|
0, 558000, 86400, 0x80d29ed6
|
||||||
|
0, 564000, 86400, 0x4d508e2c
|
||||||
|
0, 570000, 86400, 0x0d407374
|
||||||
|
0, 576000, 86400, 0xd4068016
|
||||||
|
0, 582000, 86400, 0x6ffab98f
|
||||||
|
0, 588000, 86400, 0x2360903d
|
||||||
|
0, 594000, 86400, 0x470e04a0
|
181
tests/ref/fate/xmv-demux
Normal file
181
tests/ref/fate/xmv-demux
Normal file
@ -0,0 +1,181 @@
|
|||||||
|
0, 0, 1508, 0xefceba48
|
||||||
|
1, 0, 5976, 0xfa2c2db9
|
||||||
|
1, 10841, 5976, 0x256b935c
|
||||||
|
1, 21682, 5976, 0xa78a9563
|
||||||
|
1, 32522, 5976, 0x4ea056f4
|
||||||
|
1, 43363, 5976, 0xda772d8d
|
||||||
|
1, 54204, 5976, 0xafacf7c9
|
||||||
|
0, 57600, 108, 0x06713c96
|
||||||
|
0, 61200, 952, 0xd306df7e
|
||||||
|
0, 64800, 2312, 0xaf316585
|
||||||
|
1, 65045, 5976, 0xdeb003f4
|
||||||
|
0, 68400, 3872, 0xfc1c527c
|
||||||
|
0, 72000, 20, 0xaffc0edd
|
||||||
|
0, 75600, 6600, 0xe1b66c7f
|
||||||
|
1, 75886, 2016, 0xa7380d36
|
||||||
|
0, 79200, 6868, 0xd5b3f631
|
||||||
|
1, 79543, 2016, 0xbc090bac
|
||||||
|
0, 82800, 8420, 0xf70ee33b
|
||||||
|
1, 83200, 2016, 0x6f8c164c
|
||||||
|
0, 86400, 13144, 0x9a54ef39
|
||||||
|
1, 86857, 2016, 0x13b80e28
|
||||||
|
0, 90000, 6340, 0xe55bf555
|
||||||
|
1, 90514, 2016, 0xd40ff863
|
||||||
|
0, 93600, 3736, 0x0b23f89f
|
||||||
|
1, 94171, 2016, 0x4d530ed7
|
||||||
|
0, 97200, 2624, 0x79e2e451
|
||||||
|
1, 97829, 2160, 0x0fbc37eb
|
||||||
|
0, 100800, 1860, 0x63886f11
|
||||||
|
1, 101747, 13824, 0x82fb2602
|
||||||
|
0, 104400, 1244, 0x74594601
|
||||||
|
0, 108000, 564, 0xf4561dfb
|
||||||
|
0, 111600, 80, 0xbf8e2e30
|
||||||
|
0, 115200, 20, 0xa0990c29
|
||||||
|
1, 126824, 13824, 0x08771caf
|
||||||
|
1, 151902, 13824, 0xdf7d4a65
|
||||||
|
1, 176980, 13896, 0x24bf3f47
|
||||||
|
1, 202188, 3600, 0x9ad26b9f
|
||||||
|
1, 208718, 3600, 0x8c666fd6
|
||||||
|
1, 215249, 3600, 0x305c6ca1
|
||||||
|
1, 221780, 3600, 0x48b04e1e
|
||||||
|
0, 223200, 104, 0x12413980
|
||||||
|
0, 226800, 796, 0x2e698ed3
|
||||||
|
1, 228310, 3600, 0x8c915935
|
||||||
|
0, 230400, 1808, 0x8b3e6e5e
|
||||||
|
0, 234000, 4712, 0xdbd51737
|
||||||
|
1, 234841, 3600, 0xa8f45e01
|
||||||
|
0, 237600, 5548, 0xee9c831c
|
||||||
|
0, 241200, 6152, 0x9c18ccc1
|
||||||
|
1, 241371, 3816, 0xc64cc5ed
|
||||||
|
0, 244800, 6452, 0x7860462a
|
||||||
|
1, 248294, 1944, 0x0ac2e3f1
|
||||||
|
0, 248400, 6676, 0xe1b1c9e4
|
||||||
|
1, 251820, 1944, 0x2197dccd
|
||||||
|
0, 252000, 10904, 0x0bded7b7
|
||||||
|
1, 255347, 1944, 0x0c02e77f
|
||||||
|
0, 255600, 12844, 0xe6d16cff
|
||||||
|
1, 258873, 1944, 0x675ee06a
|
||||||
|
0, 259200, 10920, 0xe114c46b
|
||||||
|
1, 262400, 2160, 0x0d803a8b
|
||||||
|
0, 262800, 5952, 0xb7464634
|
||||||
|
1, 266318, 6696, 0xa7a0dfea
|
||||||
|
0, 266400, 4732, 0x2fa2e36d
|
||||||
|
0, 270000, 2592, 0xf54ddd57
|
||||||
|
0, 273600, 1516, 0x4a1cd4d5
|
||||||
|
0, 277200, 864, 0x49889afc
|
||||||
|
1, 278465, 6696, 0x59aa3145
|
||||||
|
0, 280800, 468, 0x3932e6a4
|
||||||
|
0, 284400, 116, 0x2b8341e6
|
||||||
|
0, 288000, 16, 0x6a3109cf
|
||||||
|
1, 290612, 6696, 0x69be4d78
|
||||||
|
1, 302759, 6696, 0x64064c67
|
||||||
|
1, 314906, 6696, 0xc8536f98
|
||||||
|
1, 327053, 6696, 0xc0ce5199
|
||||||
|
1, 339200, 6768, 0x3b275c58
|
||||||
|
1, 351478, 8856, 0x90e5b37c
|
||||||
|
0, 360000, 1508, 0xefceba48
|
||||||
|
1, 367543, 8856, 0x86b33366
|
||||||
|
1, 383608, 8856, 0x19e18797
|
||||||
|
1, 399673, 8856, 0x0a0c7fbd
|
||||||
|
1, 415739, 8928, 0x4a9b2d42
|
||||||
|
0, 417600, 100, 0x45023894
|
||||||
|
0, 421200, 948, 0xa65ed345
|
||||||
|
0, 424800, 2808, 0xd7285746
|
||||||
|
0, 428400, 5372, 0x05794175
|
||||||
|
1, 431935, 1512, 0xed8b3f4b
|
||||||
|
0, 432000, 11596, 0x8636eca7
|
||||||
|
1, 434678, 1512, 0xa27d3891
|
||||||
|
0, 435600, 11524, 0xe1f39be3
|
||||||
|
1, 437420, 1512, 0xb0f13eb6
|
||||||
|
0, 439200, 23392, 0xab053f05
|
||||||
|
1, 440163, 1656, 0xe5a98324
|
||||||
|
0, 442800, 4560, 0x03197d07
|
||||||
|
1, 443167, 2232, 0x15445433
|
||||||
|
0, 446400, 4440, 0x1cc361a2
|
||||||
|
1, 447216, 2232, 0x5cb348a9
|
||||||
|
0, 450000, 23688, 0x16030634
|
||||||
|
1, 451265, 2232, 0xf10347da
|
||||||
|
0, 453600, 16132, 0xf0eca799
|
||||||
|
1, 455314, 2448, 0x3e16a175
|
||||||
|
0, 457200, 29896, 0x0c0988ea
|
||||||
|
1, 459755, 2520, 0x17e3ca2b
|
||||||
|
0, 460800, 19956, 0x0093aa0b
|
||||||
|
1, 464327, 1944, 0x35c2de84
|
||||||
|
0, 464400, 16392, 0x8829a9ca
|
||||||
|
1, 467853, 1944, 0x55b4db40
|
||||||
|
0, 468000, 16772, 0x9a4a546d
|
||||||
|
1, 471380, 2088, 0xdaae14b2
|
||||||
|
0, 471600, 8920, 0xcd8ca203
|
||||||
|
1, 475167, 1944, 0x92ccd37f
|
||||||
|
0, 475200, 9632, 0x53c1d37b
|
||||||
|
1, 478694, 1944, 0x70efede1
|
||||||
|
0, 478800, 8976, 0xfe4da2cc
|
||||||
|
1, 482220, 1944, 0x7601d304
|
||||||
|
0, 482400, 6680, 0x35348fe0
|
||||||
|
1, 485747, 1944, 0x3922ebc2
|
||||||
|
0, 486000, 9228, 0xcbf62b0c
|
||||||
|
1, 489273, 2160, 0xde462f2e
|
||||||
|
0, 489600, 5108, 0xd1d88511
|
||||||
|
1, 493192, 1872, 0x467ac1d2
|
||||||
|
0, 493200, 10016, 0xaff4b2b2
|
||||||
|
1, 496588, 1872, 0xa1e4cd43
|
||||||
|
0, 496800, 7468, 0x23e81ab8
|
||||||
|
1, 499984, 1872, 0x1dceccc6
|
||||||
|
0, 500400, 4172, 0x253cd05b
|
||||||
|
1, 503380, 1872, 0x2bbad2a5
|
||||||
|
0, 504000, 8188, 0x7ede743f
|
||||||
|
1, 506776, 1872, 0xc603d44d
|
||||||
|
0, 507600, 2884, 0x2dec55a3
|
||||||
|
1, 510171, 1872, 0x1b4cc261
|
||||||
|
0, 511200, 3900, 0xd0666a18
|
||||||
|
1, 513567, 1872, 0x10edd6cf
|
||||||
|
0, 514800, 2996, 0x9cc99b8c
|
||||||
|
1, 516963, 2376, 0xecdb9d61
|
||||||
|
0, 518400, 2156, 0xae612776
|
||||||
|
1, 521273, 2592, 0x5559eced
|
||||||
|
0, 522000, 3988, 0x0d2c9992
|
||||||
|
0, 525600, 1512, 0x6281fc00
|
||||||
|
1, 525976, 2592, 0x8848dfc7
|
||||||
|
0, 529200, 6544, 0xb75c2562
|
||||||
|
1, 530678, 2592, 0x4ca2d7da
|
||||||
|
0, 532800, 4108, 0xfb21efc9
|
||||||
|
1, 535380, 2592, 0x285fd7e6
|
||||||
|
0, 536400, 1096, 0x85922a37
|
||||||
|
0, 540000, 9740, 0xe57d7647
|
||||||
|
1, 540082, 2592, 0x2717e404
|
||||||
|
0, 543600, 416, 0x61c2ea02
|
||||||
|
1, 544784, 2592, 0xf106111a
|
||||||
|
0, 547200, 336, 0x1dc5ac1c
|
||||||
|
1, 549486, 2592, 0xd7d01119
|
||||||
|
0, 550800, 204, 0x16f57017
|
||||||
|
1, 554188, 2592, 0x550cfeda
|
||||||
|
0, 554400, 112, 0x78374234
|
||||||
|
0, 558000, 40, 0x6cb21985
|
||||||
|
1, 558890, 2592, 0x47ad00c4
|
||||||
|
1, 563592, 2592, 0x39bbf306
|
||||||
|
1, 568294, 3240, 0x69addfce
|
||||||
|
1, 574171, 21384, 0x254f63e0
|
||||||
|
1, 612963, 21456, 0x2f7a9859
|
||||||
|
0, 615600, 14420, 0x53324ca4
|
||||||
|
0, 619200, 40, 0x10971420
|
||||||
|
1, 651886, 37512, 0x6e962928
|
||||||
|
1, 719935, 2736, 0x1dc91c69
|
||||||
|
0, 720000, 24904, 0x15574f7e
|
||||||
|
1, 724898, 2736, 0x023434fd
|
||||||
|
1, 729861, 2736, 0x906f1541
|
||||||
|
0, 734400, 1908, 0xccb2dd3c
|
||||||
|
1, 734824, 2736, 0x85a31102
|
||||||
|
0, 738000, 4676, 0xbfa42b7e
|
||||||
|
1, 739788, 3024, 0x9296a5f3
|
||||||
|
0, 741600, 3600, 0x87c9dc58
|
||||||
|
0, 745200, 8184, 0x504a8e65
|
||||||
|
1, 745273, 1944, 0x7bf4dedc
|
||||||
|
0, 748800, 9636, 0x2efb3006
|
||||||
|
1, 748800, 1944, 0x4196c404
|
||||||
|
1, 752327, 1944, 0xcda97c7a
|
||||||
|
0, 752400, 9580, 0x0fb6f4e8
|
||||||
|
1, 755853, 1944, 0x5f4922b2
|
||||||
|
0, 756000, 7840, 0xe996f564
|
||||||
|
1, 759380, 2088, 0x37dfc157
|
||||||
|
0, 759600, 4208, 0xe9c2fba2
|
||||||
|
0, 763200, 556, 0x3f1e077c
|
@ -1,10 +1,21 @@
|
|||||||
0, 0, 79360, 0x877eb3ed
|
0, 0, 79360, 0x3b0a7d1b
|
||||||
0, 6000, 79360, 0x9ff8707c
|
0, 6000, 79360, 0x740842c3
|
||||||
0, 12000, 79360, 0x144dec86
|
0, 12000, 79360, 0x85160167
|
||||||
0, 18000, 79360, 0x56d59588
|
0, 18000, 79360, 0xaf510e92
|
||||||
0, 24000, 79360, 0x2d20f8ce
|
0, 24000, 79360, 0x8e290bec
|
||||||
0, 30000, 79360, 0x1a752c42
|
0, 30000, 79360, 0x51e981b0
|
||||||
0, 36000, 79360, 0x85705730
|
0, 36000, 79360, 0x16e52c60
|
||||||
0, 42000, 79360, 0xddea3741
|
0, 42000, 79360, 0x66e1e60a
|
||||||
0, 48000, 79360, 0x46448efd
|
0, 48000, 79360, 0x40fa58f6
|
||||||
0, 54000, 79360, 0x27186e2b
|
0, 54000, 79360, 0x00388edd
|
||||||
|
0, 60000, 79360, 0xc74f95bf
|
||||||
|
0, 66000, 79360, 0xf446a3fd
|
||||||
|
0, 72000, 79360, 0x27b5eb60
|
||||||
|
0, 78000, 79360, 0xea9266a2
|
||||||
|
0, 84000, 79360, 0x7b6a7907
|
||||||
|
0, 90000, 79360, 0x2be7d946
|
||||||
|
0, 96000, 79360, 0x61881ee4
|
||||||
|
0, 102000, 79360, 0x9214bd4f
|
||||||
|
0, 108000, 79360, 0xeb294afe
|
||||||
|
0, 114000, 79360, 0xc861ad55
|
||||||
|
0, 120000, 79360, 0x3d3b6220
|
||||||
|
Loading…
Reference in New Issue
Block a user