* qatar/master: cosmetics: Consistently use C-style comments with multiple inclusion guards anm: fix a few Doxygen comments misc typo and wording fixes attributes: add av_noreturn attributes: drop pointless define guards configure: do not disable av_always_inline with --enable-small flvdec: initial stream switch support avplay: fix write on freed memory for rawvideo snow: remove a VLA used for edge emulation x86: lavfi: fix gradfun/yadif build with mmx/sse disabled snow: remove the runs[] VLA. snow: Check mallocs at init flacdec: remove redundant setting of avctx->sample_fmt Conflicts: ffplay.c libavcodec/h264.c libavcodec/snow.c libavcodec/snow.h libavcodec/snowdec.c libavcodec/snowenc.c libavformat/flvdec.c libavutil/attributes.h tools/patcheck Merged-by: Michael Niedermayer <michaelni@gmx.at>tags/n1.0
@@ -376,7 +376,7 @@ FILE *get_preset_file(char *filename, size_t filename_size, | |||
* Do all the necessary cleanup and abort. | |||
* This function is implemented in the avtools, not cmdutils. | |||
*/ | |||
void exit_program(int ret); | |||
av_noreturn void exit_program(int ret); | |||
/** | |||
* Realloc array to hold new_size elements of elem_size. | |||
@@ -3856,15 +3856,6 @@ test -n "$assert_level" && | |||
test -n "$malloc_prefix" && | |||
echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH | |||
if enabled small || disabled optimizations; then | |||
echo "#undef av_always_inline" >> $TMPH | |||
if enabled small; then | |||
echo "#define av_always_inline inline" >> $TMPH | |||
else | |||
echo "#define av_always_inline av_unused" >> $TMPH | |||
fi | |||
fi | |||
if enabled yasm; then | |||
append config_files $TMPASM | |||
printf '' >$TMPASM | |||
@@ -1632,6 +1632,7 @@ static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const c | |||
static int video_thread(void *arg) | |||
{ | |||
AVPacket pkt = { 0 }; | |||
VideoState *is = arg; | |||
AVFrame *frame = avcodec_alloc_frame(); | |||
int64_t pts_int = AV_NOPTS_VALUE, pos = -1; | |||
@@ -1655,7 +1656,6 @@ static int video_thread(void *arg) | |||
#endif | |||
for (;;) { | |||
AVPacket pkt; | |||
#if CONFIG_AVFILTER | |||
AVFilterBufferRef *picref; | |||
AVRational tb; | |||
@@ -1664,14 +1664,14 @@ static int video_thread(void *arg) | |||
SDL_Delay(10); | |||
avcodec_get_frame_defaults(frame); | |||
av_free_packet(&pkt); | |||
ret = get_video_frame(is, frame, &pts_int, &pkt); | |||
if (ret < 0) | |||
goto the_end; | |||
if (!ret) { | |||
av_free_packet(&pkt); | |||
if (!ret) | |||
continue; | |||
} | |||
#if CONFIG_AVFILTER | |||
if ( last_w != is->video_st->codec->width | |||
@@ -1766,6 +1766,7 @@ static int video_thread(void *arg) | |||
av_freep(&vfilters); | |||
avfilter_graph_free(&graph); | |||
#endif | |||
av_free_packet(&pkt); | |||
av_free(frame); | |||
return 0; | |||
} | |||
@@ -56,8 +56,9 @@ static av_cold int decode_init(AVCodecContext *avctx) | |||
/** | |||
* Perform decode operation | |||
* @param dst, dst_end Destination image buffer | |||
* @param gb, GetByteContext (optional, see below) | |||
* @param dst pointer to destination image buffer | |||
* @param dst_end pointer to end of destination image buffer | |||
* @param gb GetByteContext (optional, see below) | |||
* @param pixel Fill color (optional, see below) | |||
* @param count Pixel count | |||
* @param x Pointer to x-axis counter | |||
@@ -66,8 +67,8 @@ static av_cold int decode_init(AVCodecContext *avctx) | |||
* @return non-zero if destination buffer is exhausted | |||
* | |||
* a copy operation is achieved when 'gb' is set | |||
* a fill operation is acheived when 'gb' is null and pixel is >= 0 | |||
* a skip operation is acheived when 'gb' is null and pixel is < 0 | |||
* a fill operation is achieved when 'gb' is null and pixel is >= 0 | |||
* a skip operation is achieved when 'gb' is null and pixel is < 0 | |||
*/ | |||
static inline int op(uint8_t **dst, const uint8_t *dst_end, | |||
GetByteContext *gb, | |||
@@ -552,9 +552,9 @@ typedef struct DSPContext { | |||
* @param src source array | |||
* constraints: 16-byte aligned | |||
* @param min minimum value | |||
* constraints: must in the the range [-(1<<24), 1<<24] | |||
* constraints: must be in the range [-(1 << 24), 1 << 24] | |||
* @param max maximum value | |||
* constraints: must in the the range [-(1<<24), 1<<24] | |||
* constraints: must be in the range [-(1 << 24), 1 << 24] | |||
* @param len number of elements in the array | |||
* constraints: multiple of 32 greater than zero | |||
*/ | |||
@@ -108,8 +108,6 @@ static av_cold int flac_decode_init(AVCodecContext *avctx) | |||
FLACContext *s = avctx->priv_data; | |||
s->avctx = avctx; | |||
avctx->sample_fmt = AV_SAMPLE_FMT_S16; | |||
/* for now, the raw FLAC header is allowed to be passed to the decoder as | |||
frame data instead of extradata. */ | |||
if (!avctx->extradata) | |||
@@ -1737,7 +1737,7 @@ static av_always_inline void backup_mb_border(H264Context *h, uint8_t *src_y, | |||
} | |||
top_border = h->top_borders[top_idx][s->mb_x]; | |||
/* There are two lines saved, the line above the the top macroblock | |||
/* There are two lines saved, the line above the top macroblock | |||
* of a pair, and the line above the bottom macroblock. */ | |||
AV_COPY128(top_border, src_y + 16 * linesize); | |||
if (pixel_shift) | |||
@@ -4443,7 +4443,7 @@ again: | |||
init_get_bits(&s->gb, ptr, bit_length); | |||
if (ff_h264_decode_seq_parameter_set(h) < 0 && (h->is_avc ? (nalsize != consumed) && nalsize : 1)) { | |||
av_log(h->s.avctx, AV_LOG_DEBUG, | |||
"SPS decoding failure, trying alternative mode\n"); | |||
"SPS decoding failure, trying again with the complete NAL\n"); | |||
if (h->is_avc) | |||
av_assert0(next_avc - buf_index + consumed == nalsize); | |||
init_get_bits(&s->gb, &buf[buf_index + 1 - consumed], | |||
@@ -394,7 +394,8 @@ mca( 8, 8,8) | |||
av_cold int ff_snow_common_init(AVCodecContext *avctx){ | |||
SnowContext *s = avctx->priv_data; | |||
int width, height; | |||
int i, j; | |||
int i, j, ret; | |||
int emu_buf_size; | |||
s->avctx= avctx; | |||
s->max_ref_frames=1; //just make sure its not an invalid value in case of no initial keyframe | |||
@@ -447,19 +448,27 @@ av_cold int ff_snow_common_init(AVCodecContext *avctx){ | |||
width= s->avctx->width; | |||
height= s->avctx->height; | |||
s->spatial_idwt_buffer= av_mallocz(width*height*sizeof(IDWTELEM)); | |||
s->spatial_dwt_buffer= av_mallocz(width*height*sizeof(DWTELEM)); //FIXME this does not belong here | |||
s->temp_dwt_buffer = av_mallocz(width * sizeof(DWTELEM)); | |||
s->temp_idwt_buffer = av_mallocz(width * sizeof(IDWTELEM)); | |||
FF_ALLOCZ_OR_GOTO(avctx, s->spatial_idwt_buffer, width * height * sizeof(IDWTELEM), fail); | |||
FF_ALLOCZ_OR_GOTO(avctx, s->spatial_dwt_buffer, width * height * sizeof(DWTELEM), fail); //FIXME this does not belong here | |||
FF_ALLOCZ_OR_GOTO(avctx, s->temp_dwt_buffer, width * sizeof(DWTELEM), fail); | |||
FF_ALLOCZ_OR_GOTO(avctx, s->temp_idwt_buffer, width * sizeof(IDWTELEM), fail); | |||
FF_ALLOC_OR_GOTO(avctx, s->run_buffer, ((width + 1) >> 1) * ((height + 1) >> 1) * sizeof(*s->run_buffer), fail); | |||
for(i=0; i<MAX_REF_FRAMES; i++) | |||
for(j=0; j<MAX_REF_FRAMES; j++) | |||
ff_scale_mv_ref[i][j] = 256*(i+1)/(j+1); | |||
s->avctx->get_buffer(s->avctx, &s->mconly_picture); | |||
s->scratchbuf = av_mallocz(s->mconly_picture.linesize[0]*7*MB_SIZE); | |||
if ((ret = s->avctx->get_buffer(s->avctx, &s->mconly_picture)) < 0) { | |||
// av_log(s->avctx, AV_LOG_ERROR, "get_buffer() failed\n"); | |||
// return ret; | |||
} | |||
FF_ALLOCZ_OR_GOTO(avctx, s->scratchbuf, FFMAX(s->mconly_picture.linesize[0], 2*width+256)*7*MB_SIZE, fail); | |||
emu_buf_size = FFMAX(s->mconly_picture.linesize[0], 2*width+256) * (2 * MB_SIZE + HTAPS_MAX - 1); | |||
FF_ALLOC_OR_GOTO(avctx, s->emu_edge_buffer, emu_buf_size, fail); | |||
return 0; | |||
fail: | |||
return AVERROR(ENOMEM); | |||
} | |||
int ff_snow_common_init_after_header(AVCodecContext *avctx) { | |||
@@ -632,6 +641,7 @@ av_cold void ff_snow_common_end(SnowContext *s) | |||
av_freep(&s->temp_dwt_buffer); | |||
av_freep(&s->spatial_idwt_buffer); | |||
av_freep(&s->temp_idwt_buffer); | |||
av_freep(&s->run_buffer); | |||
s->m.me.temp= NULL; | |||
av_freep(&s->m.me.scratchpad); | |||
@@ -641,6 +651,7 @@ av_cold void ff_snow_common_end(SnowContext *s) | |||
av_freep(&s->block); | |||
av_freep(&s->scratchbuf); | |||
av_freep(&s->emu_edge_buffer); | |||
for(i=0; i<MAX_REF_FRAMES; i++){ | |||
av_freep(&s->ref_mvs[i]); | |||
@@ -135,6 +135,7 @@ typedef struct SnowContext{ | |||
DWTELEM *temp_dwt_buffer; | |||
IDWTELEM *spatial_idwt_buffer; | |||
IDWTELEM *temp_idwt_buffer; | |||
int *run_buffer; | |||
int colorspace_type; | |||
int chroma_h_shift; | |||
int chroma_v_shift; | |||
@@ -165,7 +166,7 @@ typedef struct SnowContext{ | |||
MpegEncContext m; // needed for motion estimation, should not be used for anything else, the idea is to eventually make the motion estimation independent of MpegEncContext, so this will be removed then (FIXME/XXX) | |||
uint8_t *scratchbuf; | |||
int *runs; | |||
uint8_t *emu_edge_buffer; | |||
}SnowContext; | |||
/* Tables */ | |||
@@ -365,7 +365,12 @@ static int decode_header(SnowContext *s){ | |||
static av_cold int decode_init(AVCodecContext *avctx) | |||
{ | |||
ff_snow_common_init(avctx); | |||
int ret; | |||
if ((ret = ff_snow_common_init(avctx)) < 0) { | |||
ff_snow_common_end(avctx->priv_data); | |||
return ret; | |||
} | |||
return 0; | |||
} | |||
@@ -156,7 +156,7 @@ static void dwt_quantize(SnowContext *s, Plane *p, DWTELEM *buffer, int width, i | |||
static av_cold int encode_init(AVCodecContext *avctx) | |||
{ | |||
SnowContext *s = avctx->priv_data; | |||
int plane_index; | |||
int plane_index, ret; | |||
if(avctx->strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL){ | |||
av_log(avctx, AV_LOG_ERROR, "This codec is under development, files encoded with it may not be decodable with future versions!!!\n" | |||
@@ -185,7 +185,10 @@ static av_cold int encode_init(AVCodecContext *avctx) | |||
s->plane[plane_index].fast_mc= 1; | |||
} | |||
ff_snow_common_init(avctx); | |||
if ((ret = ff_snow_common_init(avctx)) < 0) { | |||
ff_snow_common_end(avctx->priv_data); | |||
return ret; | |||
} | |||
ff_snow_alloc_blocks(s); | |||
s->version=0; | |||
@@ -246,8 +249,6 @@ static av_cold int encode_init(AVCodecContext *avctx) | |||
} | |||
} | |||
s->runs = av_malloc(avctx->width * avctx->height * sizeof(*s->runs)); | |||
return 0; | |||
} | |||
@@ -677,7 +678,7 @@ static int get_block_rd(SnowContext *s, int mb_x, int mb_y, int plane_index, uin | |||
uint8_t *src= s-> input_picture.data[plane_index]; | |||
IDWTELEM *pred= (IDWTELEM*)s->m.obmc_scratchpad + plane_index*block_size*block_size*4; | |||
uint8_t *cur = s->scratchbuf; | |||
uint8_t tmp[ref_stride*(2*MB_SIZE+HTAPS_MAX-1)]; | |||
uint8_t *tmp = s->emu_edge_buffer; | |||
const int b_stride = s->b_width << s->block_max_depth; | |||
const int b_height = s->b_height<< s->block_max_depth; | |||
const int w= p->width; | |||
@@ -843,6 +844,7 @@ static int encode_subband_c0run(SnowContext *s, SubBand *b, const IDWTELEM *src, | |||
if(1){ | |||
int run=0; | |||
int *runs = s->run_buffer; | |||
int run_index=0; | |||
int max_index; | |||
@@ -876,7 +878,7 @@ static int encode_subband_c0run(SnowContext *s, SubBand *b, const IDWTELEM *src, | |||
} | |||
if(!(/*ll|*/l|lt|t|rt|p)){ | |||
if(v){ | |||
s->runs[run_index++]= run; | |||
runs[run_index++]= run; | |||
run=0; | |||
}else{ | |||
run++; | |||
@@ -885,9 +887,9 @@ static int encode_subband_c0run(SnowContext *s, SubBand *b, const IDWTELEM *src, | |||
} | |||
} | |||
max_index= run_index; | |||
s->runs[run_index++]= run; | |||
runs[run_index++]= run; | |||
run_index=0; | |||
run= s->runs[run_index++]; | |||
run= runs[run_index++]; | |||
put_symbol2(&s->c, b->state[30], max_index, 0); | |||
if(run_index <= max_index) | |||
@@ -931,7 +933,7 @@ static int encode_subband_c0run(SnowContext *s, SubBand *b, const IDWTELEM *src, | |||
put_rac(&s->c, &b->state[0][context], !!v); | |||
}else{ | |||
if(!run){ | |||
run= s->runs[run_index++]; | |||
run= runs[run_index++]; | |||
if(run_index <= max_index) | |||
put_symbol2(&s->c, b->state[1], run, 3); | |||
@@ -1909,7 +1911,6 @@ static av_cold int encode_end(AVCodecContext *avctx) | |||
if (s->input_picture.data[0]) | |||
avctx->release_buffer(avctx, &s->input_picture); | |||
av_free(avctx->stats_out); | |||
av_freep(&s->runs); | |||
return 0; | |||
} | |||
@@ -41,7 +41,7 @@ | |||
#define LIBAVCODEC_IDENT "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION) | |||
/** | |||
* Those FF_API_* defines are not part of public API. | |||
* These FF_API_* defines are not part of the public API. | |||
* They may change, break or disappear at any time. | |||
*/ | |||
#ifndef FF_API_REQUEST_CHANNELS | |||
@@ -147,7 +147,7 @@ struct xvmc_pix_fmt { | |||
*/ | |||
int filled_mv_blocks_num; | |||
/** Number of the the next free data block; one data block consists of | |||
/** Number of the next free data block; one data block consists of | |||
64 short values in the data_blocks array. | |||
All blocks before this one have already been claimed by placing their | |||
position into the corresponding block description structure field, | |||
@@ -221,4 +221,4 @@ void ff_formats_unref(AVFilterFormats **ref); | |||
*/ | |||
void ff_formats_changeref(AVFilterFormats **oldref, AVFilterFormats **newref); | |||
#endif // AVFILTER_FORMATS_H | |||
#endif /* AVFILTER_FORMATS_H */ |
@@ -41,7 +41,7 @@ | |||
#define LIBAVFILTER_BUILD LIBAVFILTER_VERSION_INT | |||
/** | |||
* Those FF_API_* defines are not part of public API. | |||
* These FF_API_* defines are not part of the public API. | |||
* They may change, break or disappear at any time. | |||
*/ | |||
#ifndef FF_API_OLD_ALL_FORMATS_API | |||
@@ -60,4 +60,4 @@ | |||
#define FF_API_BUFFERSRC_BUFFER (LIBAVFILTER_VERSION_MAJOR < 4) | |||
#endif | |||
#endif // AVFILTER_VERSION_H | |||
#endif /* AVFILTER_VERSION_H */ |
@@ -26,9 +26,9 @@ | |||
DECLARE_ALIGNED(16, static const uint16_t, pw_7f)[8] = {0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F}; | |||
DECLARE_ALIGNED(16, static const uint16_t, pw_ff)[8] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; | |||
#if HAVE_MMX2 | |||
static void gradfun_filter_line_mmx2(uint8_t *dst, const uint8_t *src, const uint16_t *dc, int width, int thresh, const uint16_t *dithers) | |||
{ | |||
#if HAVE_MMX2 | |||
intptr_t x; | |||
if (width & 3) { | |||
x = width & ~3; | |||
@@ -71,12 +71,12 @@ static void gradfun_filter_line_mmx2(uint8_t *dst, const uint8_t *src, const uin | |||
"rm"(thresh), "m"(*dithers), "m"(*pw_7f) | |||
:"memory" | |||
); | |||
#endif | |||
} | |||
#endif | |||
#if HAVE_SSSE3 | |||
static void gradfun_filter_line_ssse3(uint8_t *dst, const uint8_t *src, const uint16_t *dc, int width, int thresh, const uint16_t *dithers) | |||
{ | |||
#if HAVE_SSSE3 | |||
intptr_t x; | |||
if (width & 7) { | |||
// could be 10% faster if I somehow eliminated this | |||
@@ -118,12 +118,12 @@ static void gradfun_filter_line_ssse3(uint8_t *dst, const uint8_t *src, const ui | |||
"rm"(thresh), "m"(*dithers), "m"(*pw_7f) | |||
:"memory" | |||
); | |||
#endif // HAVE_SSSE3 | |||
} | |||
#endif // HAVE_SSSE3 | |||
#if HAVE_SSE | |||
static void gradfun_blur_line_sse2(uint16_t *dc, uint16_t *buf, const uint16_t *buf1, const uint8_t *src, int src_linesize, int width) | |||
{ | |||
#if HAVE_SSE | |||
#define BLURV(load)\ | |||
intptr_t x = -2*width;\ | |||
__asm__ volatile(\ | |||
@@ -161,17 +161,23 @@ static void gradfun_blur_line_sse2(uint16_t *dc, uint16_t *buf, const uint16_t * | |||
} else { | |||
BLURV("movdqa"); | |||
} | |||
#endif // HAVE_SSE | |||
} | |||
#endif // HAVE_SSE | |||
av_cold void ff_gradfun_init_x86(GradFunContext *gf) | |||
{ | |||
int cpu_flags = av_get_cpu_flags(); | |||
if (HAVE_MMX2 && cpu_flags & AV_CPU_FLAG_MMX2) | |||
#if HAVE_MMX2 | |||
if (cpu_flags & AV_CPU_FLAG_MMX2) | |||
gf->filter_line = gradfun_filter_line_mmx2; | |||
if (HAVE_SSSE3 && cpu_flags & AV_CPU_FLAG_SSSE3) | |||
#endif | |||
#if HAVE_SSSE3 | |||
if (cpu_flags & AV_CPU_FLAG_SSSE3) | |||
gf->filter_line = gradfun_filter_line_ssse3; | |||
if (HAVE_SSE && cpu_flags & AV_CPU_FLAG_SSE2) | |||
#endif | |||
#if HAVE_SSE | |||
if (cpu_flags & AV_CPU_FLAG_SSE2) | |||
gf->blur_line = gradfun_blur_line_sse2; | |||
#endif | |||
} |
@@ -24,10 +24,6 @@ | |||
#include "libavcodec/x86/dsputil_mmx.h" | |||
#include "libavfilter/yadif.h" | |||
static void yadif_filter_line_ssse3(uint8_t *dst, uint8_t *prev, uint8_t *cur, uint8_t *next, int w, int prefs, int mrefs, int parity, int mode); | |||
static void yadif_filter_line_sse2(uint8_t *dst, uint8_t *prev, uint8_t *cur, uint8_t *next, int w, int prefs, int mrefs, int parity, int mode); | |||
static void yadif_filter_line_mmx(uint8_t *dst, uint8_t *prev, uint8_t *cur, uint8_t *next, int w, int prefs, int mrefs, int parity, int mode); | |||
DECLARE_ASM_CONST(16, const xmm_reg, pb_1) = {0x0101010101010101ULL, 0x0101010101010101ULL}; | |||
DECLARE_ASM_CONST(16, const xmm_reg, pw_1) = {0x0001000100010001ULL, 0x0001000100010001ULL}; | |||
@@ -57,10 +53,16 @@ av_cold void ff_yadif_init_x86(YADIFContext *yadif) | |||
{ | |||
int cpu_flags = av_get_cpu_flags(); | |||
if (HAVE_MMX && cpu_flags & AV_CPU_FLAG_MMX) | |||
#if HAVE_MMX | |||
if (cpu_flags & AV_CPU_FLAG_MMX) | |||
yadif->filter_line = yadif_filter_line_mmx; | |||
if (HAVE_SSE && cpu_flags & AV_CPU_FLAG_SSE2) | |||
#endif | |||
#if HAVE_SSE | |||
if (cpu_flags & AV_CPU_FLAG_SSE2) | |||
yadif->filter_line = yadif_filter_line_sse2; | |||
if (HAVE_SSSE3 && cpu_flags & AV_CPU_FLAG_SSSE3) | |||
#endif | |||
#if HAVE_SSSE3 | |||
if (cpu_flags & AV_CPU_FLAG_SSSE3) | |||
yadif->filter_line = yadif_filter_line_ssse3; | |||
#endif | |||
} |
@@ -76,6 +76,59 @@ static AVStream *create_stream(AVFormatContext *s, int tag, int codec_type){ | |||
avpriv_set_pts_info(st, 32, 1, 1000); /* 32 bit pts in ms */ | |||
return st; | |||
} | |||
static int flv_same_audio_codec(AVCodecContext *acodec, int flags) | |||
{ | |||
int bits_per_coded_sample = (flags & FLV_AUDIO_SAMPLESIZE_MASK) ? 16 : 8; | |||
int flv_codecid = flags & FLV_AUDIO_CODECID_MASK; | |||
int codec_id; | |||
if (!acodec->codec_id && !acodec->codec_tag) | |||
return 1; | |||
if (acodec->bits_per_coded_sample != bits_per_coded_sample) | |||
return 0; | |||
switch(flv_codecid) { | |||
//no distinction between S16 and S8 PCM codec flags | |||
case FLV_CODECID_PCM: | |||
codec_id = bits_per_coded_sample == 8 ? CODEC_ID_PCM_U8 : | |||
#if HAVE_BIGENDIAN | |||
CODEC_ID_PCM_S16BE; | |||
#else | |||
CODEC_ID_PCM_S16LE; | |||
#endif | |||
return codec_id == acodec->codec_id; | |||
case FLV_CODECID_PCM_LE: | |||
codec_id = bits_per_coded_sample == 8 ? CODEC_ID_PCM_U8 : CODEC_ID_PCM_S16LE; | |||
return codec_id == acodec->codec_id; | |||
case FLV_CODECID_AAC: | |||
return acodec->codec_id == CODEC_ID_AAC; | |||
case FLV_CODECID_ADPCM: | |||
return acodec->codec_id == CODEC_ID_ADPCM_SWF; | |||
case FLV_CODECID_SPEEX: | |||
return acodec->codec_id == CODEC_ID_SPEEX; | |||
case FLV_CODECID_MP3: | |||
return acodec->codec_id == CODEC_ID_MP3; | |||
case FLV_CODECID_NELLYMOSER_8KHZ_MONO: | |||
return acodec->sample_rate == 8000 && | |||
acodec->codec_id == CODEC_ID_NELLYMOSER; | |||
case FLV_CODECID_NELLYMOSER_16KHZ_MONO: | |||
return acodec->sample_rate == 16000 && | |||
acodec->codec_id == CODEC_ID_NELLYMOSER; | |||
case FLV_CODECID_NELLYMOSER: | |||
return acodec->codec_id == CODEC_ID_NELLYMOSER; | |||
case FLV_CODECID_PCM_MULAW: | |||
return acodec->sample_rate == 8000 && | |||
acodec->codec_id == CODEC_ID_PCM_MULAW; | |||
case FLV_CODECID_PCM_ALAW: | |||
return acodec->sample_rate = 8000 && | |||
acodec->codec_id == CODEC_ID_PCM_ALAW; | |||
default: | |||
return acodec->codec_tag == (flv_codecid >> FLV_AUDIO_CODECID_OFFSET); | |||
} | |||
return 0; | |||
} | |||
static void flv_set_audio_codec(AVFormatContext *s, AVStream *astream, AVCodecContext *acodec, int flv_codecid) { | |||
switch(flv_codecid) { | |||
@@ -122,6 +175,33 @@ static void flv_set_audio_codec(AVFormatContext *s, AVStream *astream, AVCodecCo | |||
} | |||
} | |||
static int flv_same_video_codec(AVCodecContext *vcodec, int flags) | |||
{ | |||
int flv_codecid = flags & FLV_VIDEO_CODECID_MASK; | |||
if (!vcodec->codec_id && !vcodec->codec_tag) | |||
return 1; | |||
switch (flv_codecid) { | |||
case FLV_CODECID_H263: | |||
return vcodec->codec_id == CODEC_ID_FLV1; | |||
case FLV_CODECID_SCREEN: | |||
return vcodec->codec_id == CODEC_ID_FLASHSV; | |||
case FLV_CODECID_SCREEN2: | |||
return vcodec->codec_id == CODEC_ID_FLASHSV2; | |||
case FLV_CODECID_VP6: | |||
return vcodec->codec_id == CODEC_ID_VP6F; | |||
case FLV_CODECID_VP6A: | |||
return vcodec->codec_id == CODEC_ID_VP6A; | |||
case FLV_CODECID_H264: | |||
return vcodec->codec_id == CODEC_ID_H264; | |||
default: | |||
return vcodec->codec_tag == flv_codecid; | |||
} | |||
return 0; | |||
} | |||
static int flv_set_video_codec(AVFormatContext *s, AVStream *vstream, int flv_codecid) { | |||
AVCodecContext *vcodec = vstream->codec; | |||
switch(flv_codecid) { | |||
@@ -516,7 +596,7 @@ static int flv_data_packet(AVFormatContext *s, AVPacket *pkt, | |||
for (i = 0; i < s->nb_streams; i++) { | |||
st = s->streams[i]; | |||
if (st->id == 2) | |||
if (st->codec->codec_type == AVMEDIA_TYPE_DATA) | |||
break; | |||
} | |||
@@ -616,8 +696,18 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt) | |||
/* now find stream */ | |||
for(i=0;i<s->nb_streams;i++) { | |||
st = s->streams[i]; | |||
if (st->id == stream_type) | |||
if (stream_type == FLV_STREAM_TYPE_AUDIO && st->codec->codec_type == AVMEDIA_TYPE_AUDIO) { | |||
if (flv_same_audio_codec(st->codec, flags)) { | |||
break; | |||
} | |||
} else | |||
if (stream_type == FLV_STREAM_TYPE_VIDEO && st->codec->codec_type == AVMEDIA_TYPE_VIDEO) { | |||
if (flv_same_video_codec(st->codec, flags)) { | |||
break; | |||
} | |||
} else if (st->id == stream_type) { | |||
break; | |||
} | |||
} | |||
if(i == s->nb_streams){ | |||
av_log(s, AV_LOG_WARNING, "Stream discovered after head already parsed\n"); | |||
@@ -77,7 +77,7 @@ enum CodecID ff_rtp_codec_id(const char *buf, enum AVMediaType codec_type); | |||
#define RTCP_TX_RATIO_DEN 1000 | |||
/* An arbitrary id value for RTP Xiph streams - only relevant to indicate | |||
* the the configuration has changed within a stream (by changing the | |||
* that the configuration has changed within a stream (by changing the | |||
* ident value sent). | |||
*/ | |||
#define RTP_XIPH_IDENT 0xfecdba | |||
@@ -44,7 +44,7 @@ | |||
#define LIBAVFORMAT_IDENT "Lavf" AV_STRINGIFY(LIBAVFORMAT_VERSION) | |||
/** | |||
* Those FF_API_* defines are not part of public API. | |||
* These FF_API_* defines are not part of the public API. | |||
* They may change, break or disappear at any time. | |||
*/ | |||
#ifndef FF_API_OLD_AVIO | |||
@@ -75,7 +75,6 @@ static av_always_inline av_const int16_t av_clip_int16_arm(int a) | |||
return x; | |||
} | |||
#if !CONFIG_SMALL //the code below cannot be compiled without always_inline | |||
#define av_clip_uintp2 av_clip_uintp2_arm | |||
static av_always_inline av_const unsigned av_clip_uintp2_arm(int a, int p) | |||
{ | |||
@@ -83,7 +82,7 @@ static av_always_inline av_const unsigned av_clip_uintp2_arm(int a, int p) | |||
__asm__ ("usat %0, %2, %1" : "=r"(x) : "r"(a), "i"(p)); | |||
return x; | |||
} | |||
#endif //!CONFIG_SMALL | |||
#else /* HAVE_ARMV6 */ | |||
@@ -50,65 +50,45 @@ | |||
#endif | |||
#endif | |||
#ifndef av_noreturn | |||
#if AV_GCC_VERSION_AT_LEAST(2,5) | |||
# define av_noreturn __attribute__((noreturn)) | |||
#else | |||
# define av_noreturn | |||
#endif | |||
#endif | |||
#ifndef av_noinline | |||
#if AV_GCC_VERSION_AT_LEAST(3,1) | |||
# define av_noinline __attribute__((noinline)) | |||
#else | |||
# define av_noinline | |||
#endif | |||
#endif | |||
#ifndef av_pure | |||
#if AV_GCC_VERSION_AT_LEAST(3,1) | |||
# define av_pure __attribute__((pure)) | |||
#else | |||
# define av_pure | |||
#endif | |||
#endif | |||
#ifndef av_restrict | |||
#define av_restrict restrict | |||
#endif | |||
#ifndef av_const | |||
#if AV_GCC_VERSION_AT_LEAST(2,6) | |||
# define av_const __attribute__((const)) | |||
#else | |||
# define av_const | |||
#endif | |||
#endif | |||
#ifndef av_cold | |||
#if AV_GCC_VERSION_AT_LEAST(4,3) | |||
# define av_cold __attribute__((cold)) | |||
#else | |||
# define av_cold | |||
#endif | |||
#endif | |||
#ifndef av_flatten | |||
#if AV_GCC_VERSION_AT_LEAST(4,1) | |||
# define av_flatten __attribute__((flatten)) | |||
#else | |||
# define av_flatten | |||
#endif | |||
#endif | |||
#ifndef attribute_deprecated | |||
#if AV_GCC_VERSION_AT_LEAST(3,1) | |||
# define attribute_deprecated __attribute__((deprecated)) | |||
#else | |||
# define attribute_deprecated | |||
#endif | |||
#endif | |||
/** | |||
* Disable warnings about deprecated features | |||
@@ -128,42 +108,34 @@ | |||
#endif | |||
#ifndef av_unused | |||
#if defined(__GNUC__) | |||
# define av_unused __attribute__((unused)) | |||
#else | |||
# define av_unused | |||
#endif | |||
#endif | |||
/** | |||
* Mark a variable as used and prevent the compiler from optimizing it | |||
* away. This is useful for variables accessed only from inline | |||
* assembler without the compiler being aware. | |||
*/ | |||
#ifndef av_used | |||
#if AV_GCC_VERSION_AT_LEAST(3,1) | |||
# define av_used __attribute__((used)) | |||
#else | |||
# define av_used | |||
#endif | |||
#endif | |||
#ifndef av_alias | |||
#if AV_GCC_VERSION_AT_LEAST(3,3) | |||
# define av_alias __attribute__((may_alias)) | |||
#else | |||
# define av_alias | |||
#endif | |||
#endif | |||
#ifndef av_uninit | |||
#if defined(__GNUC__) && !defined(__INTEL_COMPILER) | |||
# define av_uninit(x) x=x | |||
#else | |||
# define av_uninit(x) x | |||
#endif | |||
#endif | |||
#ifdef __GNUC__ | |||
# define av_builtin_constant_p __builtin_constant_p | |||
@@ -173,4 +145,10 @@ | |||
# define av_printf_format(fmtpos, attrpos) | |||
#endif | |||
#if AV_GCC_VERSION_AT_LEAST(2,5) | |||
# define av_noreturn __attribute__((noreturn)) | |||
#else | |||
# define av_noreturn | |||
#endif | |||
#endif /* AVUTIL_ATTRIBUTES_H */ |
@@ -124,4 +124,4 @@ void av_dict_free(AVDictionary **m); | |||
* @} | |||
*/ | |||
#endif // AVUTIL_DICT_H | |||
#endif /* AVUTIL_DICT_H */ |
@@ -67,7 +67,8 @@ $EGREP $OPT '^\+ *(const *|)static' $*| $EGREP --color=always '[^=]= *(0|NULL)[^ | |||
cat $TMP | |||
hiegrep '# *ifdef * (HAVE|CONFIG)_' 'ifdefs that should be #if' $* | |||
hiegrep '\b(awnser|cant|dont|wont|usefull|successfull|occured|teh|alot|wether|skiped|heigth|informations|colums|loosy|loosing|ouput|seperate|preceed|upto|paket|posible|unkown|inpossible|dimention|funtions|overriden|outputing|seperation|initalize|compatibilty)\b' 'common typos' $* | |||
hiegrep '\b(awnser|cant|dont|wont|usefull|successfull|occured|teh|alot|wether|skiped|heigth|informations|colums|loosy|loosing|ouput|seperate|preceed|upto|paket|posible|unkown|inpossible|dimention|acheive|funtions|overriden|outputing|seperation|initalize|compatibilty)\b' 'common typos' $* | |||
hiegrep 'av_log\( *NULL' 'Missing context in av_log' $* | |||
hiegrep '[^sn]printf' 'Please use av_log' $* | |||
hiegrep '\bmalloc' 'Please use av_malloc' $* | |||