Merge remote-tracking branch 'qatar/master'

* 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>
pull/59/head
Michael Niedermayer 13 years ago
commit 86e107a7d4
  1. 2
      cmdutils.h
  2. 9
      configure
  3. 9
      ffplay.c
  4. 9
      libavcodec/anm.c
  5. 4
      libavcodec/dsputil.h
  6. 2
      libavcodec/flacdec.c
  7. 4
      libavcodec/h264.c
  8. 25
      libavcodec/snow.c
  9. 3
      libavcodec/snow.h
  10. 7
      libavcodec/snowdec.c
  11. 21
      libavcodec/snowenc.c
  12. 2
      libavcodec/version.h
  13. 2
      libavcodec/xvmc.h
  14. 2
      libavfilter/formats.h
  15. 4
      libavfilter/version.h
  16. 24
      libavfilter/x86/gradfun.c
  17. 16
      libavfilter/x86/yadif.c
  18. 94
      libavformat/flvdec.c
  19. 2
      libavformat/rtp.h
  20. 2
      libavformat/version.h
  21. 3
      libavutil/arm/intmath.h
  22. 34
      libavutil/attributes.h
  23. 2
      libavutil/dict.h
  24. 3
      tools/patcheck

@ -376,7 +376,7 @@ FILE *get_preset_file(char *filename, size_t filename_size,
* Do all the necessary cleanup and abort. * Do all the necessary cleanup and abort.
* This function is implemented in the avtools, not cmdutils. * 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. * Realloc array to hold new_size elements of elem_size.

9
configure vendored

@ -3856,15 +3856,6 @@ test -n "$assert_level" &&
test -n "$malloc_prefix" && test -n "$malloc_prefix" &&
echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH 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 if enabled yasm; then
append config_files $TMPASM append config_files $TMPASM
printf '' >$TMPASM printf '' >$TMPASM

@ -1632,6 +1632,7 @@ static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const c
static int video_thread(void *arg) static int video_thread(void *arg)
{ {
AVPacket pkt = { 0 };
VideoState *is = arg; VideoState *is = arg;
AVFrame *frame = avcodec_alloc_frame(); AVFrame *frame = avcodec_alloc_frame();
int64_t pts_int = AV_NOPTS_VALUE, pos = -1; int64_t pts_int = AV_NOPTS_VALUE, pos = -1;
@ -1655,7 +1656,6 @@ static int video_thread(void *arg)
#endif #endif
for (;;) { for (;;) {
AVPacket pkt;
#if CONFIG_AVFILTER #if CONFIG_AVFILTER
AVFilterBufferRef *picref; AVFilterBufferRef *picref;
AVRational tb; AVRational tb;
@ -1664,14 +1664,14 @@ static int video_thread(void *arg)
SDL_Delay(10); SDL_Delay(10);
avcodec_get_frame_defaults(frame); avcodec_get_frame_defaults(frame);
av_free_packet(&pkt);
ret = get_video_frame(is, frame, &pts_int, &pkt); ret = get_video_frame(is, frame, &pts_int, &pkt);
if (ret < 0) if (ret < 0)
goto the_end; goto the_end;
if (!ret) { if (!ret)
av_free_packet(&pkt);
continue; continue;
}
#if CONFIG_AVFILTER #if CONFIG_AVFILTER
if ( last_w != is->video_st->codec->width if ( last_w != is->video_st->codec->width
@ -1766,6 +1766,7 @@ static int video_thread(void *arg)
av_freep(&vfilters); av_freep(&vfilters);
avfilter_graph_free(&graph); avfilter_graph_free(&graph);
#endif #endif
av_free_packet(&pkt);
av_free(frame); av_free(frame);
return 0; return 0;
} }

@ -56,8 +56,9 @@ static av_cold int decode_init(AVCodecContext *avctx)
/** /**
* Perform decode operation * Perform decode operation
* @param dst, dst_end Destination image buffer * @param dst pointer to destination image buffer
* @param gb, GetByteContext (optional, see below) * @param dst_end pointer to end of destination image buffer
* @param gb GetByteContext (optional, see below)
* @param pixel Fill color (optional, see below) * @param pixel Fill color (optional, see below)
* @param count Pixel count * @param count Pixel count
* @param x Pointer to x-axis counter * @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 * @return non-zero if destination buffer is exhausted
* *
* a copy operation is achieved when 'gb' is set * a copy operation is achieved when 'gb' is set
* a fill 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 acheived 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, static inline int op(uint8_t **dst, const uint8_t *dst_end,
GetByteContext *gb, GetByteContext *gb,

@ -552,9 +552,9 @@ typedef struct DSPContext {
* @param src source array * @param src source array
* constraints: 16-byte aligned * constraints: 16-byte aligned
* @param min minimum value * @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 * @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 * @param len number of elements in the array
* constraints: multiple of 32 greater than zero * 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; FLACContext *s = avctx->priv_data;
s->avctx = avctx; 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 /* for now, the raw FLAC header is allowed to be passed to the decoder as
frame data instead of extradata. */ frame data instead of extradata. */
if (!avctx->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]; 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. */ * of a pair, and the line above the bottom macroblock. */
AV_COPY128(top_border, src_y + 16 * linesize); AV_COPY128(top_border, src_y + 16 * linesize);
if (pixel_shift) if (pixel_shift)
@ -4443,7 +4443,7 @@ again:
init_get_bits(&s->gb, ptr, bit_length); init_get_bits(&s->gb, ptr, bit_length);
if (ff_h264_decode_seq_parameter_set(h) < 0 && (h->is_avc ? (nalsize != consumed) && nalsize : 1)) { if (ff_h264_decode_seq_parameter_set(h) < 0 && (h->is_avc ? (nalsize != consumed) && nalsize : 1)) {
av_log(h->s.avctx, AV_LOG_DEBUG, 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) if (h->is_avc)
av_assert0(next_avc - buf_index + consumed == nalsize); av_assert0(next_avc - buf_index + consumed == nalsize);
init_get_bits(&s->gb, &buf[buf_index + 1 - consumed], 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){ av_cold int ff_snow_common_init(AVCodecContext *avctx){
SnowContext *s = avctx->priv_data; SnowContext *s = avctx->priv_data;
int width, height; int width, height;
int i, j; int i, j, ret;
int emu_buf_size;
s->avctx= avctx; s->avctx= avctx;
s->max_ref_frames=1; //just make sure its not an invalid value in case of no initial keyframe 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; width= s->avctx->width;
height= s->avctx->height; height= s->avctx->height;
s->spatial_idwt_buffer= av_mallocz(width*height*sizeof(IDWTELEM)); FF_ALLOCZ_OR_GOTO(avctx, s->spatial_idwt_buffer, width * height * sizeof(IDWTELEM), fail);
s->spatial_dwt_buffer= av_mallocz(width*height*sizeof(DWTELEM)); //FIXME this does not belong here FF_ALLOCZ_OR_GOTO(avctx, s->spatial_dwt_buffer, width * height * sizeof(DWTELEM), fail); //FIXME this does not belong here
s->temp_dwt_buffer = av_mallocz(width * sizeof(DWTELEM)); FF_ALLOCZ_OR_GOTO(avctx, s->temp_dwt_buffer, width * sizeof(DWTELEM), fail);
s->temp_idwt_buffer = av_mallocz(width * sizeof(IDWTELEM)); 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(i=0; i<MAX_REF_FRAMES; i++)
for(j=0; j<MAX_REF_FRAMES; j++) for(j=0; j<MAX_REF_FRAMES; j++)
ff_scale_mv_ref[i][j] = 256*(i+1)/(j+1); ff_scale_mv_ref[i][j] = 256*(i+1)/(j+1);
s->avctx->get_buffer(s->avctx, &s->mconly_picture); if ((ret = s->avctx->get_buffer(s->avctx, &s->mconly_picture)) < 0) {
s->scratchbuf = av_mallocz(s->mconly_picture.linesize[0]*7*MB_SIZE); // 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; return 0;
fail:
return AVERROR(ENOMEM);
} }
int ff_snow_common_init_after_header(AVCodecContext *avctx) { 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->temp_dwt_buffer);
av_freep(&s->spatial_idwt_buffer); av_freep(&s->spatial_idwt_buffer);
av_freep(&s->temp_idwt_buffer); av_freep(&s->temp_idwt_buffer);
av_freep(&s->run_buffer);
s->m.me.temp= NULL; s->m.me.temp= NULL;
av_freep(&s->m.me.scratchpad); 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->block);
av_freep(&s->scratchbuf); av_freep(&s->scratchbuf);
av_freep(&s->emu_edge_buffer);
for(i=0; i<MAX_REF_FRAMES; i++){ for(i=0; i<MAX_REF_FRAMES; i++){
av_freep(&s->ref_mvs[i]); av_freep(&s->ref_mvs[i]);

@ -135,6 +135,7 @@ typedef struct SnowContext{
DWTELEM *temp_dwt_buffer; DWTELEM *temp_dwt_buffer;
IDWTELEM *spatial_idwt_buffer; IDWTELEM *spatial_idwt_buffer;
IDWTELEM *temp_idwt_buffer; IDWTELEM *temp_idwt_buffer;
int *run_buffer;
int colorspace_type; int colorspace_type;
int chroma_h_shift; int chroma_h_shift;
int chroma_v_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) 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; uint8_t *scratchbuf;
int *runs; uint8_t *emu_edge_buffer;
}SnowContext; }SnowContext;
/* Tables */ /* Tables */

@ -365,7 +365,12 @@ static int decode_header(SnowContext *s){
static av_cold int decode_init(AVCodecContext *avctx) 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; 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) static av_cold int encode_init(AVCodecContext *avctx)
{ {
SnowContext *s = avctx->priv_data; SnowContext *s = avctx->priv_data;
int plane_index; int plane_index, ret;
if(avctx->strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL){ 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" 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; 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); ff_snow_alloc_blocks(s);
s->version=0; 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; 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]; uint8_t *src= s-> input_picture.data[plane_index];
IDWTELEM *pred= (IDWTELEM*)s->m.obmc_scratchpad + plane_index*block_size*block_size*4; IDWTELEM *pred= (IDWTELEM*)s->m.obmc_scratchpad + plane_index*block_size*block_size*4;
uint8_t *cur = s->scratchbuf; 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_stride = s->b_width << s->block_max_depth;
const int b_height = s->b_height<< s->block_max_depth; const int b_height = s->b_height<< s->block_max_depth;
const int w= p->width; const int w= p->width;
@ -843,6 +844,7 @@ static int encode_subband_c0run(SnowContext *s, SubBand *b, const IDWTELEM *src,
if(1){ if(1){
int run=0; int run=0;
int *runs = s->run_buffer;
int run_index=0; int run_index=0;
int max_index; 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(!(/*ll|*/l|lt|t|rt|p)){
if(v){ if(v){
s->runs[run_index++]= run; runs[run_index++]= run;
run=0; run=0;
}else{ }else{
run++; run++;
@ -885,9 +887,9 @@ static int encode_subband_c0run(SnowContext *s, SubBand *b, const IDWTELEM *src,
} }
} }
max_index= run_index; max_index= run_index;
s->runs[run_index++]= run; runs[run_index++]= run;
run_index=0; run_index=0;
run= s->runs[run_index++]; run= runs[run_index++];
put_symbol2(&s->c, b->state[30], max_index, 0); put_symbol2(&s->c, b->state[30], max_index, 0);
if(run_index <= max_index) 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); put_rac(&s->c, &b->state[0][context], !!v);
}else{ }else{
if(!run){ if(!run){
run= s->runs[run_index++]; run= runs[run_index++];
if(run_index <= max_index) if(run_index <= max_index)
put_symbol2(&s->c, b->state[1], run, 3); 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]) if (s->input_picture.data[0])
avctx->release_buffer(avctx, &s->input_picture); avctx->release_buffer(avctx, &s->input_picture);
av_free(avctx->stats_out); av_free(avctx->stats_out);
av_freep(&s->runs);
return 0; return 0;
} }

@ -41,7 +41,7 @@
#define LIBAVCODEC_IDENT "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION) #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. * They may change, break or disappear at any time.
*/ */
#ifndef FF_API_REQUEST_CHANNELS #ifndef FF_API_REQUEST_CHANNELS

@ -147,7 +147,7 @@ struct xvmc_pix_fmt {
*/ */
int filled_mv_blocks_num; 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. 64 short values in the data_blocks array.
All blocks before this one have already been claimed by placing their All blocks before this one have already been claimed by placing their
position into the corresponding block description structure field, 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); 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 #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. * They may change, break or disappear at any time.
*/ */
#ifndef FF_API_OLD_ALL_FORMATS_API #ifndef FF_API_OLD_ALL_FORMATS_API
@ -60,4 +60,4 @@
#define FF_API_BUFFERSRC_BUFFER (LIBAVFILTER_VERSION_MAJOR < 4) #define FF_API_BUFFERSRC_BUFFER (LIBAVFILTER_VERSION_MAJOR < 4)
#endif #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_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}; 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) 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; intptr_t x;
if (width & 3) { if (width & 3) {
x = 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) "rm"(thresh), "m"(*dithers), "m"(*pw_7f)
:"memory" :"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) 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; intptr_t x;
if (width & 7) { if (width & 7) {
// could be 10% faster if I somehow eliminated this // 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) "rm"(thresh), "m"(*dithers), "m"(*pw_7f)
:"memory" :"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) 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)\ #define BLURV(load)\
intptr_t x = -2*width;\ intptr_t x = -2*width;\
__asm__ volatile(\ __asm__ volatile(\
@ -161,17 +161,23 @@ static void gradfun_blur_line_sse2(uint16_t *dc, uint16_t *buf, const uint16_t *
} else { } else {
BLURV("movdqa"); BLURV("movdqa");
} }
#endif // HAVE_SSE
} }
#endif // HAVE_SSE
av_cold void ff_gradfun_init_x86(GradFunContext *gf) av_cold void ff_gradfun_init_x86(GradFunContext *gf)
{ {
int cpu_flags = av_get_cpu_flags(); 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; 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; 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; gf->blur_line = gradfun_blur_line_sse2;
#endif
} }

@ -24,10 +24,6 @@
#include "libavcodec/x86/dsputil_mmx.h" #include "libavcodec/x86/dsputil_mmx.h"
#include "libavfilter/yadif.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, pb_1) = {0x0101010101010101ULL, 0x0101010101010101ULL};
DECLARE_ASM_CONST(16, const xmm_reg, pw_1) = {0x0001000100010001ULL, 0x0001000100010001ULL}; 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(); 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; 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; 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; 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 */ avpriv_set_pts_info(st, 32, 1, 1000); /* 32 bit pts in ms */
return st; 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) { static void flv_set_audio_codec(AVFormatContext *s, AVStream *astream, AVCodecContext *acodec, int flv_codecid) {
switch(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) { static int flv_set_video_codec(AVFormatContext *s, AVStream *vstream, int flv_codecid) {
AVCodecContext *vcodec = vstream->codec; AVCodecContext *vcodec = vstream->codec;
switch(flv_codecid) { switch(flv_codecid) {
@ -516,7 +596,7 @@ static int flv_data_packet(AVFormatContext *s, AVPacket *pkt,
for (i = 0; i < s->nb_streams; i++) { for (i = 0; i < s->nb_streams; i++) {
st = s->streams[i]; st = s->streams[i];
if (st->id == 2) if (st->codec->codec_type == AVMEDIA_TYPE_DATA)
break; break;
} }
@ -616,9 +696,19 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt)
/* now find stream */ /* now find stream */
for(i=0;i<s->nb_streams;i++) { for(i=0;i<s->nb_streams;i++) {
st = s->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; 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){ if(i == s->nb_streams){
av_log(s, AV_LOG_WARNING, "Stream discovered after head already parsed\n"); av_log(s, AV_LOG_WARNING, "Stream discovered after head already parsed\n");
st = create_stream(s, stream_type, st = create_stream(s, stream_type,

@ -77,7 +77,7 @@ enum CodecID ff_rtp_codec_id(const char *buf, enum AVMediaType codec_type);
#define RTCP_TX_RATIO_DEN 1000 #define RTCP_TX_RATIO_DEN 1000
/* An arbitrary id value for RTP Xiph streams - only relevant to indicate /* 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). * ident value sent).
*/ */
#define RTP_XIPH_IDENT 0xfecdba #define RTP_XIPH_IDENT 0xfecdba

@ -44,7 +44,7 @@
#define LIBAVFORMAT_IDENT "Lavf" AV_STRINGIFY(LIBAVFORMAT_VERSION) #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. * They may change, break or disappear at any time.
*/ */
#ifndef FF_API_OLD_AVIO #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; return x;
} }
#if !CONFIG_SMALL //the code below cannot be compiled without always_inline
#define av_clip_uintp2 av_clip_uintp2_arm #define av_clip_uintp2 av_clip_uintp2_arm
static av_always_inline av_const unsigned av_clip_uintp2_arm(int a, int p) 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)); __asm__ ("usat %0, %2, %1" : "=r"(x) : "r"(a), "i"(p));
return x; return x;
} }
#endif //!CONFIG_SMALL
#else /* HAVE_ARMV6 */ #else /* HAVE_ARMV6 */

@ -50,65 +50,45 @@
#endif #endif
#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) #if AV_GCC_VERSION_AT_LEAST(3,1)
# define av_noinline __attribute__((noinline)) # define av_noinline __attribute__((noinline))
#else #else
# define av_noinline # define av_noinline
#endif #endif
#endif
#ifndef av_pure
#if AV_GCC_VERSION_AT_LEAST(3,1) #if AV_GCC_VERSION_AT_LEAST(3,1)
# define av_pure __attribute__((pure)) # define av_pure __attribute__((pure))
#else #else
# define av_pure # define av_pure
#endif #endif
#endif
#ifndef av_restrict #ifndef av_restrict
#define av_restrict restrict #define av_restrict restrict
#endif #endif
#ifndef av_const
#if AV_GCC_VERSION_AT_LEAST(2,6) #if AV_GCC_VERSION_AT_LEAST(2,6)
# define av_const __attribute__((const)) # define av_const __attribute__((const))
#else #else
# define av_const # define av_const
#endif #endif
#endif
#ifndef av_cold
#if AV_GCC_VERSION_AT_LEAST(4,3) #if AV_GCC_VERSION_AT_LEAST(4,3)
# define av_cold __attribute__((cold)) # define av_cold __attribute__((cold))
#else #else
# define av_cold # define av_cold
#endif #endif
#endif
#ifndef av_flatten
#if AV_GCC_VERSION_AT_LEAST(4,1) #if AV_GCC_VERSION_AT_LEAST(4,1)
# define av_flatten __attribute__((flatten)) # define av_flatten __attribute__((flatten))
#else #else
# define av_flatten # define av_flatten
#endif #endif
#endif
#ifndef attribute_deprecated
#if AV_GCC_VERSION_AT_LEAST(3,1) #if AV_GCC_VERSION_AT_LEAST(3,1)
# define attribute_deprecated __attribute__((deprecated)) # define attribute_deprecated __attribute__((deprecated))
#else #else
# define attribute_deprecated # define attribute_deprecated
#endif #endif
#endif
/** /**
* Disable warnings about deprecated features * Disable warnings about deprecated features
@ -128,42 +108,34 @@
#endif #endif
#ifndef av_unused
#if defined(__GNUC__) #if defined(__GNUC__)
# define av_unused __attribute__((unused)) # define av_unused __attribute__((unused))
#else #else
# define av_unused # define av_unused
#endif #endif
#endif
/** /**
* Mark a variable as used and prevent the compiler from optimizing it * Mark a variable as used and prevent the compiler from optimizing it
* away. This is useful for variables accessed only from inline * away. This is useful for variables accessed only from inline
* assembler without the compiler being aware. * assembler without the compiler being aware.
*/ */
#ifndef av_used
#if AV_GCC_VERSION_AT_LEAST(3,1) #if AV_GCC_VERSION_AT_LEAST(3,1)
# define av_used __attribute__((used)) # define av_used __attribute__((used))
#else #else
# define av_used # define av_used
#endif #endif
#endif
#ifndef av_alias
#if AV_GCC_VERSION_AT_LEAST(3,3) #if AV_GCC_VERSION_AT_LEAST(3,3)
# define av_alias __attribute__((may_alias)) # define av_alias __attribute__((may_alias))
#else #else
# define av_alias # define av_alias
#endif #endif
#endif
#ifndef av_uninit
#if defined(__GNUC__) && !defined(__INTEL_COMPILER) #if defined(__GNUC__) && !defined(__INTEL_COMPILER)
# define av_uninit(x) x=x # define av_uninit(x) x=x
#else #else
# define av_uninit(x) x # define av_uninit(x) x
#endif #endif
#endif
#ifdef __GNUC__ #ifdef __GNUC__
# define av_builtin_constant_p __builtin_constant_p # define av_builtin_constant_p __builtin_constant_p
@ -173,4 +145,10 @@
# define av_printf_format(fmtpos, attrpos) # define av_printf_format(fmtpos, attrpos)
#endif #endif
#if AV_GCC_VERSION_AT_LEAST(2,5)
# define av_noreturn __attribute__((noreturn))
#else
# define av_noreturn
#endif
#endif /* AVUTIL_ATTRIBUTES_H */ #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 cat $TMP
hiegrep '# *ifdef * (HAVE|CONFIG)_' 'ifdefs that should be #if' $* 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 'av_log\( *NULL' 'Missing context in av_log' $*
hiegrep '[^sn]printf' 'Please use av_log' $* hiegrep '[^sn]printf' 'Please use av_log' $*
hiegrep '\bmalloc' 'Please use av_malloc' $* hiegrep '\bmalloc' 'Please use av_malloc' $*

Loading…
Cancel
Save