Merge remote-tracking branch 'qatar/master'

* qatar/master: (31 commits)
  ARM: add ARMv6 optimised av_clip_uintp2
  ARM: remove volatile from asm statements in libavutil/intmath
  ARM: fix av_clipl_int32_arm()
  v4l: include avdevice.h
  ffserver: move close_connection() call to avoid a temporary string and copy.
  lavf: initialize demuxer private options.
  AVOptions: set string default values.
  lavdevice: mark v4l for removal on next major bump.
  swscale: fix compile on ppc.
  swscale: fix compile on x86-32.
  build: Remove generated .version file on distclean.
  configure: Add -D_GNU_SOURCE to CPPFLAGS on OS/2.
  doc: Drop hint at --enable-memalign-hack for MinGW, it is now autodetected.
  ffplay: Remove disabled code.
  Mark parameterless function declarations as 'void'.
  swscale: use av_clip_uint8() in yuv2yuv1_c().
  swscale: remove VOF/VOFW.
  swscale: split chroma buffers into separate U/V planes.
  swscale: replace formatConvBuffer[VOF] by allocated array.
  rgb2rgb: remove duplicate mmx/mmx2/3dnow/sse2 functions.
  ...

Merged-by: Michael Niedermayer <michaelni@gmx.at>
pull/2/head
Michael Niedermayer 14 years ago
commit 027264cb82
  1. 2
      Makefile
  2. 1
      configure
  3. 12
      doc/general.texi
  4. 2
      ffmpeg.c
  5. 62
      ffplay.c
  6. 28
      ffserver.c
  7. 12
      libavcodec/ac3enc.c
  8. 2
      libavcodec/bink.c
  9. 2
      libavdevice/alldevices.c
  10. 4
      libavdevice/avdevice.h
  11. 31
      libavdevice/libdc1394.c
  12. 7
      libavdevice/v4l.c
  13. 3
      libavformat/network.h
  14. 40
      libavutil/arm/intmath.h
  15. 4
      libavutil/opt.c

@ -174,7 +174,7 @@ clean:: testclean
distclean:: distclean::
$(RM) $(DISTCLEANSUFFIXES) $(RM) $(DISTCLEANSUFFIXES)
$(RM) version.h config.* libavutil/avconfig.h $(RM) config.* .version version.h libavutil/avconfig.h
config: config:
$(SRC_PATH)/configure $(value FFMPEG_CONFIGURATION) $(SRC_PATH)/configure $(value FFMPEG_CONFIGURATION)

1
configure vendored

@ -2510,6 +2510,7 @@ case $target_os in
strip="lxlite -CS" strip="lxlite -CS"
ln_s="cp -f" ln_s="cp -f"
objformat="aout" objformat="aout"
add_cppflags -D_GNU_SOURCE
add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf' SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
FFSERVERLDFLAGS="" FFSERVERLDFLAGS=""

@ -843,18 +843,6 @@ are listed below:
FFmpeg automatically passes @code{-fno-common} to the compiler to work around FFmpeg automatically passes @code{-fno-common} to the compiler to work around
a GCC bug (see @url{http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37216}). a GCC bug (see @url{http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37216}).
Within the MSYS shell, configure and make with:
@example
./configure --enable-memalign-hack
make
make install
@end example
This will install @file{ffmpeg.exe} along with many other development files
to @file{/usr/local}. You may specify another install path using the
@code{--prefix} option in @file{configure}.
Notes: Notes:
@itemize @itemize

@ -707,7 +707,7 @@ static int read_ffserver_streams(AVFormatContext *s, const char *filename)
return err; return err;
/* copy stream format */ /* copy stream format */
s->nb_streams = 0; s->nb_streams = 0;
s->streams = av_mallocz(sizeof(*s->streams) * ic->nb_streams); s->streams = av_mallocz(sizeof(AVStream *) * ic->nb_streams);
for(i=0;i<ic->nb_streams;i++) { for(i=0;i<ic->nb_streams;i++) {
AVStream *st; AVStream *st;
AVCodec *codec; AVCodec *codec;

@ -406,44 +406,6 @@ static inline void fill_rectangle(SDL_Surface *screen,
SDL_FillRect(screen, &rect, color); SDL_FillRect(screen, &rect, color);
} }
#if 0
/* draw only the border of a rectangle */
void fill_border(VideoState *s, int x, int y, int w, int h, int color)
{
int w1, w2, h1, h2;
/* fill the background */
w1 = x;
if (w1 < 0)
w1 = 0;
w2 = s->width - (x + w);
if (w2 < 0)
w2 = 0;
h1 = y;
if (h1 < 0)
h1 = 0;
h2 = s->height - (y + h);
if (h2 < 0)
h2 = 0;
fill_rectangle(screen,
s->xleft, s->ytop,
w1, s->height,
color);
fill_rectangle(screen,
s->xleft + s->width - w2, s->ytop,
w2, s->height,
color);
fill_rectangle(screen,
s->xleft + w1, s->ytop,
s->width - w1 - w2, h1,
color);
fill_rectangle(screen,
s->xleft + w1, s->ytop + s->height - h2,
s->width - w1 - w2, h2,
color);
}
#endif
#define ALPHA_BLEND(a, oldp, newp, s)\ #define ALPHA_BLEND(a, oldp, newp, s)\
((((oldp << s) * (255 - (a))) + (newp * (a))) / (255 << s)) ((((oldp << s) * (255 - (a))) + (newp * (a))) / (255 << s))
@ -743,23 +705,12 @@ static void video_image_display(VideoState *is)
} }
x = (is->width - width) / 2; x = (is->width - width) / 2;
y = (is->height - height) / 2; y = (is->height - height) / 2;
if (!is->no_background) { is->no_background = 0;
/* fill the background */
// fill_border(is, x, y, width, height, QERGB(0x00, 0x00, 0x00));
} else {
is->no_background = 0;
}
rect.x = is->xleft + x; rect.x = is->xleft + x;
rect.y = is->ytop + y; rect.y = is->ytop + y;
rect.w = FFMAX(width, 1); rect.w = FFMAX(width, 1);
rect.h = FFMAX(height, 1); rect.h = FFMAX(height, 1);
SDL_DisplayYUVOverlay(vp->bmp, &rect); SDL_DisplayYUVOverlay(vp->bmp, &rect);
} else {
#if 0
fill_rectangle(screen,
is->xleft, is->ytop, is->width, is->height,
QERGB(0x00, 0x00, 0x00));
#endif
} }
} }
@ -1899,8 +1850,6 @@ static int subtitle_thread(void *arg)
len1 = avcodec_decode_subtitle2(is->subtitle_st->codec, len1 = avcodec_decode_subtitle2(is->subtitle_st->codec,
&sp->sub, &got_subtitle, &sp->sub, &got_subtitle,
pkt); pkt);
// if (len1 < 0)
// break;
if (got_subtitle && sp->sub.format == 0) { if (got_subtitle && sp->sub.format == 0) {
sp->pts = pts; sp->pts = pts;
@ -1924,9 +1873,6 @@ static int subtitle_thread(void *arg)
SDL_UnlockMutex(is->subpq_mutex); SDL_UnlockMutex(is->subpq_mutex);
} }
av_free_packet(pkt); av_free_packet(pkt);
// if (step)
// if (cur_stream)
// stream_toggle_pause(cur_stream);
} }
the_end: the_end:
return 0; return 0;
@ -2254,8 +2200,6 @@ static int stream_component_open(VideoState *is, int stream_index)
is->video_stream = stream_index; is->video_stream = stream_index;
is->video_st = ic->streams[stream_index]; is->video_st = ic->streams[stream_index];
// is->video_current_pts_time = av_gettime();
packet_queue_init(&is->videoq); packet_queue_init(&is->videoq);
is->video_tid = SDL_CreateThread(video_thread, is); is->video_tid = SDL_CreateThread(video_thread, is);
break; break;
@ -2694,10 +2638,6 @@ static void stream_cycle_channel(VideoState *is, int codec_type)
static void toggle_full_screen(void) static void toggle_full_screen(void)
{ {
is_full_screen = !is_full_screen; is_full_screen = !is_full_screen;
if (!fs_screen_width) {
/* use default SDL method */
// SDL_WM_ToggleFullScreen(screen);
}
video_open(cur_stream); video_open(cur_stream);
} }

@ -2229,12 +2229,11 @@ static int http_prepare_data(HTTPContext *c)
av_metadata_set2(&c->fmt_ctx.metadata, "copyright", c->stream->copyright, 0); av_metadata_set2(&c->fmt_ctx.metadata, "copyright", c->stream->copyright, 0);
av_metadata_set2(&c->fmt_ctx.metadata, "title" , c->stream->title , 0); av_metadata_set2(&c->fmt_ctx.metadata, "title" , c->stream->title , 0);
c->fmt_ctx.streams = av_mallocz(sizeof(*c->fmt_ctx.streams) * c->stream->nb_streams); c->fmt_ctx.streams = av_mallocz(sizeof(AVStream *) * c->stream->nb_streams);
for(i=0;i<c->stream->nb_streams;i++) { for(i=0;i<c->stream->nb_streams;i++) {
AVStream *st;
AVStream *src; AVStream *src;
st = av_mallocz(sizeof(AVStream)); c->fmt_ctx.streams[i] = av_mallocz(sizeof(AVStream));
c->fmt_ctx.streams[i] = st;
/* if file or feed, then just take streams from FFStream struct */ /* if file or feed, then just take streams from FFStream struct */
if (!c->stream->feed || if (!c->stream->feed ||
c->stream->feed == c->stream) c->stream->feed == c->stream)
@ -2242,9 +2241,9 @@ static int http_prepare_data(HTTPContext *c)
else else
src = c->stream->feed->streams[c->stream->feed_streams[i]]; src = c->stream->feed->streams[c->stream->feed_streams[i]];
*st = *src; *(c->fmt_ctx.streams[i]) = *src;
st->priv_data = 0; c->fmt_ctx.streams[i]->priv_data = 0;
st->codec->frame_number = 0; /* XXX: should be done in c->fmt_ctx.streams[i]->codec->frame_number = 0; /* XXX: should be done in
AVStream, not in codec */ AVStream, not in codec */
} }
/* set output format parameters */ /* set output format parameters */
@ -3275,7 +3274,6 @@ static void rtsp_cmd_pause(HTTPContext *c, const char *url, RTSPMessageHeader *h
static void rtsp_cmd_teardown(HTTPContext *c, const char *url, RTSPMessageHeader *h) static void rtsp_cmd_teardown(HTTPContext *c, const char *url, RTSPMessageHeader *h)
{ {
HTTPContext *rtp_c; HTTPContext *rtp_c;
char session_id[32];
rtp_c = find_rtp_session_with_url(url, h->session_id); rtp_c = find_rtp_session_with_url(url, h->session_id);
if (!rtp_c) { if (!rtp_c) {
@ -3283,16 +3281,14 @@ static void rtsp_cmd_teardown(HTTPContext *c, const char *url, RTSPMessageHeader
return; return;
} }
av_strlcpy(session_id, rtp_c->session_id, sizeof(session_id));
/* abort the session */
close_connection(rtp_c);
/* now everything is OK, so we can send the connection parameters */ /* now everything is OK, so we can send the connection parameters */
rtsp_reply_header(c, RTSP_STATUS_OK); rtsp_reply_header(c, RTSP_STATUS_OK);
/* session ID */ /* session ID */
avio_printf(c->pb, "Session: %s\r\n", session_id); avio_printf(c->pb, "Session: %s\r\n", rtp_c->session_id);
avio_printf(c->pb, "\r\n"); avio_printf(c->pb, "\r\n");
/* abort the session */
close_connection(rtp_c);
} }
@ -3386,9 +3382,9 @@ static int rtp_new_av_stream(HTTPContext *c,
if (!st) if (!st)
goto fail; goto fail;
ctx->nb_streams = 1; ctx->nb_streams = 1;
ctx->streams = av_mallocz(sizeof(*ctx->streams) * ctx->nb_streams); ctx->streams = av_mallocz(sizeof(AVStream *) * ctx->nb_streams);
if (!ctx->streams) if (!ctx->streams)
goto fail; goto fail;
ctx->streams[0] = st; ctx->streams[0] = st;
if (!c->stream->feed || if (!c->stream->feed ||

@ -555,8 +555,8 @@ static inline float calc_cpl_coord(float energy_ch, float energy_cpl)
static void apply_channel_coupling(AC3EncodeContext *s) static void apply_channel_coupling(AC3EncodeContext *s)
{ {
#if CONFIG_AC3ENC_FLOAT #if CONFIG_AC3ENC_FLOAT
DECLARE_ALIGNED(16, float, cpl_coords) [AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][16]; DECLARE_ALIGNED(16, float, cpl_coords) [AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][16] = {{{0}}};
DECLARE_ALIGNED(16, int32_t, fixed_cpl_coords)[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][16]; DECLARE_ALIGNED(16, int32_t, fixed_cpl_coords)[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][16] = {{{0}}};
int blk, ch, bnd, i, j; int blk, ch, bnd, i, j;
CoefSumType energy[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][16] = {{{0}}}; CoefSumType energy[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][16] = {{{0}}};
int num_cpl_coefs = s->num_cpl_subbands * 12; int num_cpl_coefs = s->num_cpl_subbands * 12;
@ -2630,8 +2630,8 @@ static av_cold int allocate_buffers(AVCodecContext *avctx)
AC3_MAX_COEFS * sizeof(*s->bap_buffer), alloc_fail); AC3_MAX_COEFS * sizeof(*s->bap_buffer), alloc_fail);
FF_ALLOC_OR_GOTO(avctx, s->bap1_buffer, AC3_MAX_BLOCKS * channels * FF_ALLOC_OR_GOTO(avctx, s->bap1_buffer, AC3_MAX_BLOCKS * channels *
AC3_MAX_COEFS * sizeof(*s->bap1_buffer), alloc_fail); AC3_MAX_COEFS * sizeof(*s->bap1_buffer), alloc_fail);
FF_ALLOC_OR_GOTO(avctx, s->mdct_coef_buffer, AC3_MAX_BLOCKS * channels * FF_ALLOCZ_OR_GOTO(avctx, s->mdct_coef_buffer, AC3_MAX_BLOCKS * channels *
AC3_MAX_COEFS * sizeof(*s->mdct_coef_buffer), alloc_fail); AC3_MAX_COEFS * sizeof(*s->mdct_coef_buffer), alloc_fail);
FF_ALLOC_OR_GOTO(avctx, s->exp_buffer, AC3_MAX_BLOCKS * channels * FF_ALLOC_OR_GOTO(avctx, s->exp_buffer, AC3_MAX_BLOCKS * channels *
AC3_MAX_COEFS * sizeof(*s->exp_buffer), alloc_fail); AC3_MAX_COEFS * sizeof(*s->exp_buffer), alloc_fail);
FF_ALLOC_OR_GOTO(avctx, s->grouped_exp_buffer, AC3_MAX_BLOCKS * channels * FF_ALLOC_OR_GOTO(avctx, s->grouped_exp_buffer, AC3_MAX_BLOCKS * channels *
@ -2695,8 +2695,8 @@ static av_cold int allocate_buffers(AVCodecContext *avctx)
} }
if (CONFIG_AC3ENC_FLOAT) { if (CONFIG_AC3ENC_FLOAT) {
FF_ALLOC_OR_GOTO(avctx, s->fixed_coef_buffer, AC3_MAX_BLOCKS * channels * FF_ALLOCZ_OR_GOTO(avctx, s->fixed_coef_buffer, AC3_MAX_BLOCKS * channels *
AC3_MAX_COEFS * sizeof(*s->fixed_coef_buffer), alloc_fail); AC3_MAX_COEFS * sizeof(*s->fixed_coef_buffer), alloc_fail);
for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) { for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
AC3Block *block = &s->blocks[blk]; AC3Block *block = &s->blocks[blk];
FF_ALLOCZ_OR_GOTO(avctx, block->fixed_coef, channels * FF_ALLOCZ_OR_GOTO(avctx, block->fixed_coef, channels *

@ -1208,7 +1208,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPac
/** /**
* Caclulate quantization tables for version b * Caclulate quantization tables for version b
*/ */
static av_cold void binkb_calc_quant() static av_cold void binkb_calc_quant(void)
{ {
uint8_t inv_bink_scan[64]; uint8_t inv_bink_scan[64];
double s[64]; double s[64];

@ -48,7 +48,9 @@ void avdevice_register_all(void)
REGISTER_INOUTDEV (OSS, oss); REGISTER_INOUTDEV (OSS, oss);
REGISTER_INOUTDEV (SNDIO, sndio); REGISTER_INOUTDEV (SNDIO, sndio);
REGISTER_INDEV (V4L2, v4l2); REGISTER_INDEV (V4L2, v4l2);
#if FF_API_V4L
REGISTER_INDEV (V4L, v4l); REGISTER_INDEV (V4L, v4l);
#endif
REGISTER_INDEV (VFWCAP, vfwcap); REGISTER_INDEV (VFWCAP, vfwcap);
REGISTER_INDEV (X11_GRAB_DEVICE, x11_grab_device); REGISTER_INDEV (X11_GRAB_DEVICE, x11_grab_device);

@ -33,6 +33,10 @@
LIBAVDEVICE_VERSION_MICRO) LIBAVDEVICE_VERSION_MICRO)
#define LIBAVDEVICE_BUILD LIBAVDEVICE_VERSION_INT #define LIBAVDEVICE_BUILD LIBAVDEVICE_VERSION_INT
#ifndef FF_API_V4L
#define FF_API_V4L (LIBAVDEVICE_VERSION_MAJOR < 54)
#endif
/** /**
* Return the LIBAVDEVICE_VERSION_INT constant. * Return the LIBAVDEVICE_VERSION_INT constant.
*/ */

@ -90,6 +90,21 @@ struct dc1394_frame_rate {
{ 0, 0 } /* gotta be the last one */ { 0, 0 } /* gotta be the last one */
}; };
static const AVOption options[] = {
#if HAVE_LIBDC1394_1
{ "channel", "", offsetof(dc1394_data, channel), FF_OPT_TYPE_INT, {.dbl = 0}, 0, INT_MAX, AV_OPT_FLAG_DECODING_PARAM },
#endif
{ NULL },
};
static const AVClass libdc1394_class = {
.class_name = "libdc1394 indev",
.item_name = av_default_item_name,
.option = options,
.version = LIBAVUTIL_VERSION_INT,
};
static inline int dc1394_read_common(AVFormatContext *c, AVFormatParameters *ap, static inline int dc1394_read_common(AVFormatContext *c, AVFormatParameters *ap,
struct dc1394_frame_format **select_fmt, struct dc1394_frame_rate **select_fps) struct dc1394_frame_format **select_fmt, struct dc1394_frame_rate **select_fps)
{ {
@ -245,20 +260,6 @@ static int dc1394_v1_close(AVFormatContext * context)
return 0; return 0;
} }
static const AVOption options[] = {
#if HAVE_LIBDC1394_1
{ "channel", "", offsetof(dc1394_data, channel), FF_OPT_TYPE_INT, {.dbl = 0}, 0, INT_MAX, AV_OPT_FLAG_DECODING_PARAM },
#endif
{ NULL },
};
static const AVClass libdc1394_class = {
.class_name = "libdc1394 indev",
.item_name = av_default_item_name,
.option = options,
.version = LIBAVUTIL_VERSION_INT,
};
#elif HAVE_LIBDC1394_2 #elif HAVE_LIBDC1394_2
static int dc1394_v2_read_header(AVFormatContext *c, AVFormatParameters * ap) static int dc1394_v2_read_header(AVFormatContext *c, AVFormatParameters * ap)
{ {
@ -378,7 +379,7 @@ AVInputFormat ff_libdc1394_demuxer = {
.read_header = dc1394_v2_read_header, .read_header = dc1394_v2_read_header,
.read_packet = dc1394_v2_read_packet, .read_packet = dc1394_v2_read_packet,
.read_close = dc1394_v2_close, .read_close = dc1394_v2_close,
.flags = AVFMT_NOFILE .flags = AVFMT_NOFILE,
.priv_class = &libdc1394_class, .priv_class = &libdc1394_class,
}; };

@ -19,6 +19,10 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/ */
#include "avdevice.h"
#if FF_API_V4L
#undef __STRICT_ANSI__ //workaround due to broken kernel headers #undef __STRICT_ANSI__ //workaround due to broken kernel headers
#include "config.h" #include "config.h"
#include "libavutil/rational.h" #include "libavutil/rational.h"
@ -83,6 +87,8 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
int j; int j;
int vformat_num = FF_ARRAY_ELEMS(video_formats); int vformat_num = FF_ARRAY_ELEMS(video_formats);
av_log(s1, AV_LOG_WARNING, "V4L input device is deprecated and will be removed in the next release.");
if (ap->time_base.den <= 0) { if (ap->time_base.den <= 0) {
av_log(s1, AV_LOG_ERROR, "Wrong time base (%d)\n", ap->time_base.den); av_log(s1, AV_LOG_ERROR, "Wrong time base (%d)\n", ap->time_base.den);
return -1; return -1;
@ -374,3 +380,4 @@ AVInputFormat ff_v4l_demuxer = {
.flags = AVFMT_NOFILE, .flags = AVFMT_NOFILE,
.priv_class = &v4l_class, .priv_class = &v4l_class,
}; };
#endif /* FF_API_V4L */

@ -33,7 +33,8 @@
#define ECONNREFUSED WSAECONNREFUSED #define ECONNREFUSED WSAECONNREFUSED
#define EINPROGRESS WSAEINPROGRESS #define EINPROGRESS WSAEINPROGRESS
static inline int ff_neterrno() { static inline int ff_neterrno(void)
{
int err = WSAGetLastError(); int err = WSAGetLastError();
switch (err) { switch (err) {
case WSAEWOULDBLOCK: case WSAEWOULDBLOCK:

@ -34,11 +34,11 @@
static av_always_inline av_const int FASTDIV(int a, int b) static av_always_inline av_const int FASTDIV(int a, int b)
{ {
int r, t; int r, t;
__asm__ volatile("cmp %3, #2 \n\t" __asm__ ("cmp %3, #2 \n\t"
"ldr %1, [%4, %3, lsl #2] \n\t" "ldr %1, [%4, %3, lsl #2] \n\t"
"lsrle %0, %2, #1 \n\t" "lsrle %0, %2, #1 \n\t"
"smmulgt %0, %1, %2 \n\t" "smmulgt %0, %1, %2 \n\t"
: "=&r"(r), "=&r"(t) : "r"(a), "r"(b), "r"(ff_inverse)); : "=&r"(r), "=&r"(t) : "r"(a), "r"(b), "r"(ff_inverse));
return r; return r;
} }
@ -46,7 +46,7 @@ static av_always_inline av_const int FASTDIV(int a, int b)
static av_always_inline av_const uint8_t av_clip_uint8_arm(int a) static av_always_inline av_const uint8_t av_clip_uint8_arm(int a)
{ {
unsigned x; unsigned x;
__asm__ volatile ("usat %0, #8, %1" : "=r"(x) : "r"(a)); __asm__ ("usat %0, #8, %1" : "=r"(x) : "r"(a));
return x; return x;
} }
@ -54,7 +54,7 @@ static av_always_inline av_const uint8_t av_clip_uint8_arm(int a)
static av_always_inline av_const uint8_t av_clip_int8_arm(int a) static av_always_inline av_const uint8_t av_clip_int8_arm(int a)
{ {
unsigned x; unsigned x;
__asm__ volatile ("ssat %0, #8, %1" : "=r"(x) : "r"(a)); __asm__ ("ssat %0, #8, %1" : "=r"(x) : "r"(a));
return x; return x;
} }
@ -62,7 +62,7 @@ static av_always_inline av_const uint8_t av_clip_int8_arm(int a)
static av_always_inline av_const uint16_t av_clip_uint16_arm(int a) static av_always_inline av_const uint16_t av_clip_uint16_arm(int a)
{ {
unsigned x; unsigned x;
__asm__ volatile ("usat %0, #16, %1" : "=r"(x) : "r"(a)); __asm__ ("usat %0, #16, %1" : "=r"(x) : "r"(a));
return x; return x;
} }
@ -70,18 +70,27 @@ static av_always_inline av_const uint16_t av_clip_uint16_arm(int a)
static av_always_inline av_const int16_t av_clip_int16_arm(int a) static av_always_inline av_const int16_t av_clip_int16_arm(int a)
{ {
int x; int x;
__asm__ volatile ("ssat %0, #16, %1" : "=r"(x) : "r"(a)); __asm__ ("ssat %0, #16, %1" : "=r"(x) : "r"(a));
return x; return x;
} }
#define av_clip_uintp2 av_clip_uintp2_arm
static av_always_inline av_const unsigned av_clip_uintp2_arm(int a, int p)
{
unsigned x;
__asm__ ("usat %0, %2, %1" : "=r"(x) : "r"(a), "i"(p));
return x;
}
#else /* HAVE_ARMV6 */ #else /* HAVE_ARMV6 */
#define FASTDIV FASTDIV #define FASTDIV FASTDIV
static av_always_inline av_const int FASTDIV(int a, int b) static av_always_inline av_const int FASTDIV(int a, int b)
{ {
int r, t; int r, t;
__asm__ volatile("umull %1, %0, %2, %3" __asm__ ("umull %1, %0, %2, %3"
: "=&r"(r), "=&r"(t) : "r"(a), "r"(ff_inverse[b])); : "=&r"(r), "=&r"(t) : "r"(a), "r"(ff_inverse[b]));
return r; return r;
} }
@ -91,10 +100,11 @@ static av_always_inline av_const int FASTDIV(int a, int b)
static av_always_inline av_const int32_t av_clipl_int32_arm(int64_t a) static av_always_inline av_const int32_t av_clipl_int32_arm(int64_t a)
{ {
int x, y; int x, y;
__asm__ volatile ("adds %1, %R2, %Q2, lsr #31 \n\t" __asm__ ("adds %1, %R2, %Q2, lsr #31 \n\t"
"mvnne %1, #1<<31 \n\t" "mvnne %1, #1<<31 \n\t"
"eorne %0, %1, %R2, asr #31 \n\t" "moveq %0, %Q2 \n\t"
: "=r"(x), "=&r"(y) : "r"(a)); "eorne %0, %1, %R2, asr #31 \n\t"
: "=r"(x), "=&r"(y) : "r"(a));
return x; return x;
} }

@ -443,8 +443,10 @@ void av_opt_set_defaults2(void *s, int mask, int flags)
} }
break; break;
case FF_OPT_TYPE_STRING: case FF_OPT_TYPE_STRING:
av_set_string3(s, opt->name, opt->default_val.str, 1, NULL);
break;
case FF_OPT_TYPE_BINARY: case FF_OPT_TYPE_BINARY:
/* Cannot set default for string as default_val is of type * double */ /* Cannot set default for binary */
break; break;
default: default:
av_log(s, AV_LOG_DEBUG, "AVOption type %d of option %s not implemented yet\n", opt->type, opt->name); av_log(s, AV_LOG_DEBUG, "AVOption type %d of option %s not implemented yet\n", opt->type, opt->name);

Loading…
Cancel
Save