Commit 1c668076 authored by Michael Niedermayer's avatar Michael Niedermayer

Merge commit 'd488c3bc'

* commit 'd488c3bc':
  configure: support Bitrig OS
  yuv2rgb: handle line widths that are not a multiple of 4.
  graph2dot: Use the fallback getopt implementation if needed
  tools: Include io.h for open/read/write/close if unistd.h doesn't exist
  testprogs: Remove unused includes
  qt-faststart: Use other seek/tell functions on MSVC than on mingw
  ismindex: Include direct.h for _mkdir on windows
  sdp: Use static const char arrays instead of pointers to strings
  x86: avcodec: Drop silly "_mmx" suffixes from filenames
  x86: avcodec: Drop silly "_sse" suffixes from filenames
  sdp: Include profile-level-id for H264
  utvideoenc: use ff_huff_gen_len_table
  huffman: add ff_huff_gen_len_table
  cllc: simplify/fix swapped data buffer allocation.
  rtpdec_h264: Don't set the pixel format
  h264: Check that the codec isn't null before accessing it
  audio_frame_queue: Define af_queue_log_state before using it

Conflicts:
	libavcodec/audio_frame_queue.c
	libavcodec/h264.c
	libavcodec/huffman.h
	libavcodec/huffyuv.c
	libavcodec/utvideoenc.c
	libavcodec/x86/Makefile
Merged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents 85c83033 d488c3bc
...@@ -1552,6 +1552,7 @@ eatqi_decoder_select="aandcttables error_resilience mpegvideo" ...@@ -1552,6 +1552,7 @@ eatqi_decoder_select="aandcttables error_resilience mpegvideo"
exr_decoder_select="zlib" exr_decoder_select="zlib"
ffv1_decoder_select="golomb rangecoder" ffv1_decoder_select="golomb rangecoder"
ffv1_encoder_select="rangecoder" ffv1_encoder_select="rangecoder"
ffvhuff_encoder_select="huffman"
flac_decoder_select="golomb" flac_decoder_select="golomb"
flac_encoder_select="golomb lpc" flac_encoder_select="golomb lpc"
flashsv_decoder_select="zlib" flashsv_decoder_select="zlib"
......
...@@ -40,6 +40,22 @@ void ff_af_queue_close(AudioFrameQueue *afq) ...@@ -40,6 +40,22 @@ void ff_af_queue_close(AudioFrameQueue *afq)
memset(afq, 0, sizeof(*afq)); memset(afq, 0, sizeof(*afq));
} }
#ifdef DEBUG
static void af_queue_log_state(AudioFrameQueue *afq)
{
AudioFrame *f;
av_dlog(afq->avctx, "remaining delay = %d\n", afq->remaining_delay);
av_dlog(afq->avctx, "remaining samples = %d\n", afq->remaining_samples);
av_dlog(afq->avctx, "frames:\n");
f = afq->frame_queue;
while (f) {
av_dlog(afq->avctx, " [ pts=%9"PRId64" duration=%d ]\n",
f->pts, f->duration);
f = f->next;
}
}
#endif /* DEBUG */
int ff_af_queue_add(AudioFrameQueue *afq, const AVFrame *f) int ff_af_queue_add(AudioFrameQueue *afq, const AVFrame *f)
{ {
AudioFrame *new = av_fast_realloc(afq->frames, &afq->frame_alloc, sizeof(*afq->frames)*(afq->frame_count+1)); AudioFrame *new = av_fast_realloc(afq->frames, &afq->frame_alloc, sizeof(*afq->frames)*(afq->frame_count+1));
...@@ -108,4 +124,3 @@ void ff_af_queue_remove(AudioFrameQueue *afq, int nb_samples, int64_t *pts, ...@@ -108,4 +124,3 @@ void ff_af_queue_remove(AudioFrameQueue *afq, int nb_samples, int64_t *pts,
if (duration) if (duration)
*duration = ff_samples_to_time_base(afq->avctx, removed_samples); *duration = ff_samples_to_time_base(afq->avctx, removed_samples);
} }
...@@ -31,6 +31,63 @@ ...@@ -31,6 +31,63 @@
/* symbol for Huffman tree node */ /* symbol for Huffman tree node */
#define HNODE -1 #define HNODE -1
typedef struct {
uint64_t val;
int name;
} HeapElem;
static void heap_sift(HeapElem *h, int root, int size)
{
while (root * 2 + 1 < size) {
int child = root * 2 + 1;
if (child < size - 1 && h[child].val > h[child+1].val)
child++;
if (h[root].val > h[child].val) {
FFSWAP(HeapElem, h[root], h[child]);
root = child;
} else
break;
}
}
void ff_huff_gen_len_table(uint8_t *dst, const uint64_t *stats)
{
HeapElem h[256];
int up[2*256];
int len[2*256];
int offset, i, next;
int size = 256;
for (offset = 1; ; offset <<= 1) {
for (i=0; i < size; i++) {
h[i].name = i;
h[i].val = (stats[i] << 8) + offset;
}
for (i = size / 2 - 1; i >= 0; i--)
heap_sift(h, i, size);
for (next = size; next < size * 2 - 1; next++) {
// merge the two smallest entries, and put it back in the heap
uint64_t min1v = h[0].val;
up[h[0].name] = next;
h[0].val = INT64_MAX;
heap_sift(h, 0, size);
up[h[0].name] = next;
h[0].name = next;
h[0].val += min1v;
heap_sift(h, 0, size);
}
len[2 * size - 2] = 0;
for (i = 2 * size - 3; i >= size; i--)
len[i] = len[up[i]] + 1;
for (i = 0; i < size; i++) {
dst[i] = len[up[i]] + 1;
if (dst[i] >= 32) break;
}
if (i==size) break;
}
}
static void get_tree_codes(uint32_t *bits, int16_t *lens, uint8_t *xlat, static void get_tree_codes(uint32_t *bits, int16_t *lens, uint8_t *xlat,
Node *nodes, int node, Node *nodes, int node,
...@@ -117,60 +174,3 @@ int ff_huff_build_tree(AVCodecContext *avctx, VLC *vlc, int nb_codes, ...@@ -117,60 +174,3 @@ int ff_huff_build_tree(AVCodecContext *avctx, VLC *vlc, int nb_codes,
} }
return 0; return 0;
} }
typedef struct {
uint64_t val;
int name;
} HeapElem;
static void heap_sift(HeapElem *h, int root, int size)
{
while(root*2+1 < size) {
int child = root*2+1;
if(child < size-1 && h[child].val > h[child+1].val)
child++;
if(h[root].val > h[child].val) {
FFSWAP(HeapElem, h[root], h[child]);
root = child;
} else
break;
}
}
void ff_generate_len_table(uint8_t *dst, const uint64_t *stats){
HeapElem h[256];
int up[2*256];
int len[2*256];
int offset, i, next;
int size = 256;
for(offset=1; ; offset<<=1){
for(i=0; i<size; i++){
h[i].name = i;
h[i].val = (stats[i] << 8) + offset;
}
for(i=size/2-1; i>=0; i--)
heap_sift(h, i, size);
for(next=size; next<size*2-1; next++){
// merge the two smallest entries, and put it back in the heap
uint64_t min1v = h[0].val;
up[h[0].name] = next;
h[0].val = INT64_MAX;
heap_sift(h, 0, size);
up[h[0].name] = next;
h[0].name = next;
h[0].val += min1v;
heap_sift(h, 0, size);
}
len[2*size-2] = 0;
for(i=2*size-3; i>=size; i--)
len[i] = len[up[i]] + 1;
for(i=0; i<size; i++) {
dst[i] = len[up[i]] + 1;
if(dst[i] >= 32) break;
}
if(i==size) break;
}
}
...@@ -42,6 +42,6 @@ typedef int (*HuffCmp)(const void *va, const void *vb); ...@@ -42,6 +42,6 @@ typedef int (*HuffCmp)(const void *va, const void *vb);
int ff_huff_build_tree(AVCodecContext *avctx, VLC *vlc, int nb_codes, int ff_huff_build_tree(AVCodecContext *avctx, VLC *vlc, int nb_codes,
Node *nodes, HuffCmp cmp, int flags); Node *nodes, HuffCmp cmp, int flags);
void ff_generate_len_table(uint8_t *dst, const uint64_t *stats); void ff_huff_gen_len_table(uint8_t *dst, const uint64_t *stats);
#endif /* AVCODEC_HUFFMAN_H */ #endif /* AVCODEC_HUFFMAN_H */
...@@ -676,7 +676,7 @@ static av_cold int encode_init(AVCodecContext *avctx) ...@@ -676,7 +676,7 @@ static av_cold int encode_init(AVCodecContext *avctx)
} }
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
ff_generate_len_table(s->len[i], s->stats[i]); ff_huff_gen_len_table(s->len[i], s->stats[i]);
if (generate_bits_table(s->bits[i], s->len[i]) < 0) { if (generate_bits_table(s->bits[i], s->len[i]) < 0) {
return -1; return -1;
...@@ -1286,7 +1286,7 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, ...@@ -1286,7 +1286,7 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
if (s->context) { if (s->context) {
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
ff_generate_len_table(s->len[i], s->stats[i]); ff_huff_gen_len_table(s->len[i], s->stats[i]);
if (generate_bits_table(s->bits[i], s->len[i]) < 0) if (generate_bits_table(s->bits[i], s->len[i]) < 0)
return -1; return -1;
size += store_table(s, s->len[i], &pkt->data[size]); size += store_table(s, s->len[i], &pkt->data[size]);
......
...@@ -26,8 +26,6 @@ ...@@ -26,8 +26,6 @@
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <sys/time.h>
#include <unistd.h>
#include "config.h" #include "config.h"
#include "dsputil.h" #include "dsputil.h"
......
...@@ -441,7 +441,7 @@ static int encode_plane(AVCodecContext *avctx, uint8_t *src, ...@@ -441,7 +441,7 @@ static int encode_plane(AVCodecContext *avctx, uint8_t *src,
} }
/* Calculate huffman lengths */ /* Calculate huffman lengths */
ff_generate_len_table(lengths, counts); ff_huff_gen_len_table(lengths, counts);
/* /*
* Write the plane's header into the output packet: * Write the plane's header into the output packet:
......
...@@ -4,26 +4,26 @@ OBJS-$(CONFIG_VP3DSP) += x86/vp3dsp_init.o ...@@ -4,26 +4,26 @@ OBJS-$(CONFIG_VP3DSP) += x86/vp3dsp_init.o
OBJS-$(CONFIG_XMM_CLOBBER_TEST) += x86/w64xmmtest.o OBJS-$(CONFIG_XMM_CLOBBER_TEST) += x86/w64xmmtest.o
MMX-OBJS += x86/dsputil_mmx.o \ MMX-OBJS += x86/dsputil_mmx.o \
x86/fdct_mmx.o \ x86/fdct.o \
x86/fmtconvert_init.o \ x86/fmtconvert_init.o \
x86/idct_mmx_xvid.o \ x86/idct_mmx_xvid.o \
x86/idct_sse2_xvid.o \ x86/idct_sse2_xvid.o \
x86/motion_est_mmx.o \ x86/motion_est.o \
x86/simple_idct_mmx.o \ x86/simple_idct.o \
MMX-OBJS-$(CONFIG_AAC_DECODER) += x86/sbrdsp_init.o MMX-OBJS-$(CONFIG_AAC_DECODER) += x86/sbrdsp_init.o
MMX-OBJS-$(CONFIG_AC3DSP) += x86/ac3dsp_init.o MMX-OBJS-$(CONFIG_AC3DSP) += x86/ac3dsp_init.o
MMX-OBJS-$(CONFIG_CAVS_DECODER) += x86/cavsdsp_mmx.o MMX-OBJS-$(CONFIG_CAVS_DECODER) += x86/cavsdsp.o
MMX-OBJS-$(CONFIG_DNXHD_ENCODER) += x86/dnxhdenc.o MMX-OBJS-$(CONFIG_DNXHD_ENCODER) += x86/dnxhdenc.o
MMX-OBJS-$(CONFIG_DWT) += x86/snowdsp_mmx.o \ MMX-OBJS-$(CONFIG_DWT) += x86/snowdsp.o \
x86/dwt.o x86/dwt.o
MMX-OBJS-$(CONFIG_ENCODERS) += x86/dsputilenc_mmx.o MMX-OBJS-$(CONFIG_ENCODERS) += x86/dsputilenc_mmx.o
MMX-OBJS-$(CONFIG_FFT) += x86/fft_init.o MMX-OBJS-$(CONFIG_FFT) += x86/fft_init.o
MMX-OBJS-$(CONFIG_GPL) += x86/idct_mmx.o MMX-OBJS-$(CONFIG_GPL) += x86/idct_mmx.o
MMX-OBJS-$(CONFIG_H264DSP) += x86/h264dsp_init.o MMX-OBJS-$(CONFIG_H264DSP) += x86/h264dsp_init.o
MMX-OBJS-$(CONFIG_H264PRED) += x86/h264_intrapred_init.o MMX-OBJS-$(CONFIG_H264PRED) += x86/h264_intrapred_init.o
MMX-OBJS-$(CONFIG_LPC) += x86/lpc_mmx.o MMX-OBJS-$(CONFIG_LPC) += x86/lpc.o
MMX-OBJS-$(CONFIG_MPEGAUDIODSP) += x86/mpegaudiodec_mmx.o MMX-OBJS-$(CONFIG_MPEGAUDIODSP) += x86/mpegaudiodec.o
MMX-OBJS-$(CONFIG_MPEGVIDEO) += x86/mpegvideo.o MMX-OBJS-$(CONFIG_MPEGVIDEO) += x86/mpegvideo.o
MMX-OBJS-$(CONFIG_MPEGVIDEOENC) += x86/mpegvideoenc.o MMX-OBJS-$(CONFIG_MPEGVIDEOENC) += x86/mpegvideoenc.o
MMX-OBJS-$(CONFIG_PNG_DECODER) += x86/pngdsp_init.o MMX-OBJS-$(CONFIG_PNG_DECODER) += x86/pngdsp_init.o
...@@ -40,11 +40,11 @@ MMX-OBJS-$(CONFIG_VP8_DECODER) += x86/vp8dsp_init.o ...@@ -40,11 +40,11 @@ MMX-OBJS-$(CONFIG_VP8_DECODER) += x86/vp8dsp_init.o
YASM-OBJS-$(CONFIG_AAC_DECODER) += x86/sbrdsp.o YASM-OBJS-$(CONFIG_AAC_DECODER) += x86/sbrdsp.o
YASM-OBJS-$(CONFIG_AC3DSP) += x86/ac3dsp.o YASM-OBJS-$(CONFIG_AC3DSP) += x86/ac3dsp.o
YASM-OBJS-$(CONFIG_DCT) += x86/dct32_sse.o YASM-OBJS-$(CONFIG_DCT) += x86/dct32.o
YASM-OBJS-$(CONFIG_DIRAC_DECODER) += x86/diracdsp_mmx.o x86/diracdsp_yasm.o YASM-OBJS-$(CONFIG_DIRAC_DECODER) += x86/diracdsp_mmx.o x86/diracdsp_yasm.o
YASM-OBJS-$(CONFIG_DWT) += x86/dwt_yasm.o YASM-OBJS-$(CONFIG_DWT) += x86/dwt_yasm.o
YASM-OBJS-$(CONFIG_ENCODERS) += x86/dsputilenc.o YASM-OBJS-$(CONFIG_ENCODERS) += x86/dsputilenc.o
YASM-OBJS-$(CONFIG_FFT) += x86/fft_mmx.o YASM-OBJS-$(CONFIG_FFT) += x86/fft.o
YASM-OBJS-$(CONFIG_H264CHROMA) += x86/h264_chromamc.o \ YASM-OBJS-$(CONFIG_H264CHROMA) += x86/h264_chromamc.o \
x86/h264_chromamc_10bit.o x86/h264_chromamc_10bit.o
YASM-OBJS-$(CONFIG_H264DSP) += x86/h264_deblock.o \ YASM-OBJS-$(CONFIG_H264DSP) += x86/h264_deblock.o \
...@@ -56,7 +56,7 @@ YASM-OBJS-$(CONFIG_H264DSP) += x86/h264_deblock.o \ ...@@ -56,7 +56,7 @@ YASM-OBJS-$(CONFIG_H264DSP) += x86/h264_deblock.o \
YASM-OBJS-$(CONFIG_H264PRED) += x86/h264_intrapred.o \ YASM-OBJS-$(CONFIG_H264PRED) += x86/h264_intrapred.o \
x86/h264_intrapred_10bit.o x86/h264_intrapred_10bit.o
YASM-OBJS-$(CONFIG_H264QPEL) += x86/h264_qpel_10bit.o YASM-OBJS-$(CONFIG_H264QPEL) += x86/h264_qpel_10bit.o
YASM-OBJS-$(CONFIG_MPEGAUDIODSP) += x86/imdct36_sse.o YASM-OBJS-$(CONFIG_MPEGAUDIODSP) += x86/imdct36.o
YASM-OBJS-$(CONFIG_PNG_DECODER) += x86/pngdsp.o YASM-OBJS-$(CONFIG_PNG_DECODER) += x86/pngdsp.o
YASM-OBJS-$(CONFIG_PRORES_DECODER) += x86/proresdsp.o YASM-OBJS-$(CONFIG_PRORES_DECODER) += x86/proresdsp.o
YASM-OBJS-$(CONFIG_PRORES_LGPL_DECODER) += x86/proresdsp.o YASM-OBJS-$(CONFIG_PRORES_LGPL_DECODER) += x86/proresdsp.o
......
...@@ -2101,7 +2101,7 @@ PREFETCH(prefetch_3dnow, prefetch) ...@@ -2101,7 +2101,7 @@ PREFETCH(prefetch_3dnow, prefetch)
#endif /* HAVE_INLINE_ASM */ #endif /* HAVE_INLINE_ASM */
#include "h264_qpel_mmx.c" #include "h264_qpel.c"
void ff_put_h264_chroma_mc8_mmx_rnd (uint8_t *dst, uint8_t *src, void ff_put_h264_chroma_mc8_mmx_rnd (uint8_t *dst, uint8_t *src,
int stride, int h, int x, int y); int stride, int h, int x, int y);
......
...@@ -2,20 +2,20 @@ ...@@ -2,20 +2,20 @@
;* 36 point SSE-optimized IMDCT transform ;* 36 point SSE-optimized IMDCT transform
;* Copyright (c) 2011 Vitor Sessak ;* Copyright (c) 2011 Vitor Sessak
;* ;*
;* This file is part of Libav. ;* This file is part of FFmpeg.
;* ;*
;* Libav is free software; you can redistribute it and/or ;* FFmpeg is free software; you can redistribute it and/or
;* modify it under the terms of the GNU Lesser General Public ;* modify it under the terms of the GNU Lesser General Public
;* License as published by the Free Software Foundation; either ;* License as published by the Free Software Foundation; either
;* version 2.1 of the License, or (at your option) any later version. ;* version 2.1 of the License, or (at your option) any later version.
;* ;*
;* Libav is distributed in the hope that it will be useful, ;* FFmpeg is distributed in the hope that it will be useful,
;* but WITHOUT ANY WARRANTY; without even the implied warranty of ;* but WITHOUT ANY WARRANTY; without even the implied warranty of
;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;* Lesser General Public License for more details. ;* Lesser General Public License for more details.
;* ;*
;* You should have received a copy of the GNU Lesser General Public ;* You should have received a copy of the GNU Lesser General Public
;* License along with Libav; if not, write to the Free Software ;* License along with FFmpeg; if not, write to the Free Software
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
;****************************************************************************** ;******************************************************************************
......
...@@ -369,7 +369,6 @@ static int parse_h264_sdp_line(AVFormatContext *s, int st_index, ...@@ -369,7 +369,6 @@ static int parse_h264_sdp_line(AVFormatContext *s, int st_index,
// set our parameters // set our parameters
codec->width = atoi(buf1); codec->width = atoi(buf1);
codec->height = atoi(p + 1); // skip the - codec->height = atoi(p + 1); // skip the -
codec->pix_fmt = PIX_FMT_YUV420P;
} else if (av_strstart(p, "fmtp:", &p)) { } else if (av_strstart(p, "fmtp:", &p)) {
return ff_parse_fmtp(stream, h264_data, p, sdp_parse_fmtp_config_h264); return ff_parse_fmtp(stream, h264_data, p, sdp_parse_fmtp_config_h264);
} else if (av_strstart(p, "cliprect:", &p)) { } else if (av_strstart(p, "cliprect:", &p)) {
......
...@@ -154,9 +154,11 @@ static char *extradata2psets(AVCodecContext *c) ...@@ -154,9 +154,11 @@ static char *extradata2psets(AVCodecContext *c)
{ {
char *psets, *p; char *psets, *p;
const uint8_t *r; const uint8_t *r;
const char *pset_string = "; sprop-parameter-sets="; static const char pset_string[] = "; sprop-parameter-sets=";
static const char profile_string[] = "; profile-level-id=";
uint8_t *orig_extradata = NULL; uint8_t *orig_extradata = NULL;
int orig_extradata_size = 0; int orig_extradata_size = 0;
const uint8_t *sps = NULL, *sps_end;
if (c->extradata_size > MAX_EXTRADATA_SIZE) { if (c->extradata_size > MAX_EXTRADATA_SIZE) {
av_log(c, AV_LOG_ERROR, "Too much extradata!\n"); av_log(c, AV_LOG_ERROR, "Too much extradata!\n");
...@@ -210,6 +212,10 @@ static char *extradata2psets(AVCodecContext *c) ...@@ -210,6 +212,10 @@ static char *extradata2psets(AVCodecContext *c)
*p = ','; *p = ',';
p++; p++;
} }
if (!sps) {
sps = r;
sps_end = r1;
}
if (av_base64_encode(p, MAX_PSET_SIZE - (p - psets), r, r1 - r) == NULL) { if (av_base64_encode(p, MAX_PSET_SIZE - (p - psets), r, r1 - r) == NULL) {
av_log(c, AV_LOG_ERROR, "Cannot Base64-encode %td %td!\n", MAX_PSET_SIZE - (p - psets), r1 - r); av_log(c, AV_LOG_ERROR, "Cannot Base64-encode %td %td!\n", MAX_PSET_SIZE - (p - psets), r1 - r);
av_free(psets); av_free(psets);
...@@ -219,6 +225,12 @@ static char *extradata2psets(AVCodecContext *c) ...@@ -219,6 +225,12 @@ static char *extradata2psets(AVCodecContext *c)
p += strlen(p); p += strlen(p);
r = r1; r = r1;
} }
if (sps && sps_end - sps >= 4) {
memcpy(p, profile_string, strlen(profile_string));
p += strlen(p);
ff_data_to_hex(p, sps + 1, 3, 0);
p[6] = '\0';
}
if (orig_extradata) { if (orig_extradata) {
av_free(c->extradata); av_free(c->extradata);
c->extradata = orig_extradata; c->extradata = orig_extradata;
......
...@@ -20,7 +20,6 @@ ...@@ -20,7 +20,6 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> /* for memset() */ #include <string.h> /* for memset() */
#include <unistd.h>
#include <stdlib.h> #include <stdlib.h>
#include <inttypes.h> #include <inttypes.h>
......
...@@ -149,15 +149,15 @@ const int *sws_getCoefficients(int colorspace) ...@@ -149,15 +149,15 @@ const int *sws_getCoefficients(int colorspace)
while (h_size--) { \ while (h_size--) { \
int av_unused U, V, Y; \ int av_unused U, V, Y; \
#define ENDYUV2RGBLINE(dst_delta) \ #define ENDYUV2RGBLINE(dst_delta, ss) \
pu += 4; \ pu += 4 >> ss; \
pv += 4; \ pv += 4 >> ss; \
py_1 += 8; \ py_1 += 8 >> ss; \
py_2 += 8; \ py_2 += 8 >> ss; \
dst_1 += dst_delta; \ dst_1 += dst_delta >> ss; \
dst_2 += dst_delta; \ dst_2 += dst_delta >> ss; \
} \ } \
if (c->dstW & 4) { \ if (c->dstW & (4 >> ss)) { \
int av_unused Y, U, V; \ int av_unused Y, U, V; \
#define ENDYUV2RGBFUNC() \ #define ENDYUV2RGBFUNC() \
...@@ -167,7 +167,7 @@ const int *sws_getCoefficients(int colorspace) ...@@ -167,7 +167,7 @@ const int *sws_getCoefficients(int colorspace)
} }
#define CLOSEYUV2RGBFUNC(dst_delta) \ #define CLOSEYUV2RGBFUNC(dst_delta) \
ENDYUV2RGBLINE(dst_delta) \ ENDYUV2RGBLINE(dst_delta, 0) \
ENDYUV2RGBFUNC() ENDYUV2RGBFUNC()
YUV2RGBFUNC(yuv2rgb_c_48, uint8_t, 0) YUV2RGBFUNC(yuv2rgb_c_48, uint8_t, 0)
...@@ -186,7 +186,7 @@ YUV2RGBFUNC(yuv2rgb_c_48, uint8_t, 0) ...@@ -186,7 +186,7 @@ YUV2RGBFUNC(yuv2rgb_c_48, uint8_t, 0)
LOADCHROMA(3); LOADCHROMA(3);
PUTRGB48(dst_2, py_2, 3); PUTRGB48(dst_2, py_2, 3);
PUTRGB48(dst_1, py_1, 3); PUTRGB48(dst_1, py_1, 3);
ENDYUV2RGBLINE(48) ENDYUV2RGBLINE(48, 0)
LOADCHROMA(0); LOADCHROMA(0);
PUTRGB48(dst_1, py_1, 0); PUTRGB48(dst_1, py_1, 0);
PUTRGB48(dst_2, py_2, 0); PUTRGB48(dst_2, py_2, 0);
...@@ -194,6 +194,10 @@ ENDYUV2RGBLINE(48) ...@@ -194,6 +194,10 @@ ENDYUV2RGBLINE(48)
LOADCHROMA(1); LOADCHROMA(1);
PUTRGB48(dst_2, py_2, 1); PUTRGB48(dst_2, py_2, 1);
PUTRGB48(dst_1, py_1, 1); PUTRGB48(dst_1, py_1, 1);
ENDYUV2RGBLINE(48, 1)
LOADCHROMA(0);
PUTRGB48(dst_1, py_1, 0);
PUTRGB48(dst_2, py_2, 0);
ENDYUV2RGBFUNC() ENDYUV2RGBFUNC()
YUV2RGBFUNC(yuv2rgb_c_bgr48, uint8_t, 0) YUV2RGBFUNC(yuv2rgb_c_bgr48, uint8_t, 0)
...@@ -212,7 +216,7 @@ YUV2RGBFUNC(yuv2rgb_c_bgr48, uint8_t, 0) ...@@ -212,7 +216,7 @@ YUV2RGBFUNC(yuv2rgb_c_bgr48, uint8_t, 0)
LOADCHROMA(3); LOADCHROMA(3);
PUTBGR48(dst_2, py_2, 3); PUTBGR48(dst_2, py_2, 3);
PUTBGR48(dst_1, py_1, 3); PUTBGR48(dst_1, py_1, 3);
ENDYUV2RGBLINE(48) ENDYUV2RGBLINE(48, 0)
LOADCHROMA(0); LOADCHROMA(0);
PUTBGR48(dst_1, py_1, 0); PUTBGR48(dst_1, py_1, 0);
PUTBGR48(dst_2, py_2, 0); PUTBGR48(dst_2, py_2, 0);
...@@ -220,6 +224,10 @@ ENDYUV2RGBLINE(48) ...@@ -220,6 +224,10 @@ ENDYUV2RGBLINE(48)
LOADCHROMA(1); LOADCHROMA(1);
PUTBGR48(dst_2, py_2, 1); PUTBGR48(dst_2, py_2, 1);
PUTBGR48(dst_1, py_1, 1); PUTBGR48(dst_1, py_1, 1);
ENDYUV2RGBLINE(48, 1)
LOADCHROMA(0);
PUTBGR48(dst_1, py_1, 0);
PUTBGR48(dst_2, py_2, 0);
ENDYUV2RGBFUNC() ENDYUV2RGBFUNC()
YUV2RGBFUNC(yuv2rgb_c_32, uint32_t, 0) YUV2RGBFUNC(yuv2rgb_c_32, uint32_t, 0)
...@@ -238,7 +246,7 @@ YUV2RGBFUNC(yuv2rgb_c_32, uint32_t, 0) ...@@ -238,7 +246,7 @@ YUV2RGBFUNC(yuv2rgb_c_32, uint32_t, 0)
LOADCHROMA(3); LOADCHROMA(3);
PUTRGB(dst_2, py_2, 3); PUTRGB(dst_2, py_2, 3);
PUTRGB(dst_1, py_1, 3); PUTRGB(dst_1, py_1, 3);
ENDYUV2RGBLINE(8) ENDYUV2RGBLINE(8, 0)
LOADCHROMA(0); LOADCHROMA(0);
PUTRGB(dst_1, py_1, 0); PUTRGB(dst_1, py_1, 0);
PUTRGB(dst_2, py_2, 0); PUTRGB(dst_2, py_2, 0);
...@@ -246,6 +254,10 @@ ENDYUV2RGBLINE(8) ...@@ -246,6 +254,10 @@ ENDYUV2RGBLINE(8)
LOADCHROMA(1); LOADCHROMA(1);
PUTRGB(dst_2, py_2, 1); PUTRGB(dst_2, py_2, 1);
PUTRGB(dst_1, py_1, 1); PUTRGB(dst_1, py_1, 1);
ENDYUV2RGBLINE(8, 1)
LOADCHROMA(0);
PUTRGB(dst_1, py_1, 0);
PUTRGB(dst_2, py_2, 0);
ENDYUV2RGBFUNC() ENDYUV2RGBFUNC()
YUV2RGBFUNC(yuva2rgba_c, uint32_t, 1) YUV2RGBFUNC(yuva2rgba_c, uint32_t, 1)
...@@ -266,7 +278,7 @@ YUV2RGBFUNC(yuva2rgba_c, uint32_t, 1) ...@@ -266,7 +278,7 @@ YUV2RGBFUNC(yuva2rgba_c, uint32_t, 1)
PUTRGBA(dst_1, py_1, pa_2, 3, 24); PUTRGBA(dst_1, py_1, pa_2, 3, 24);
pa_1 += 8; \ pa_1 += 8; \
pa_2 += 8; \ pa_2 += 8; \
ENDYUV2RGBLINE(8) ENDYUV2RGBLINE(8, 0)
LOADCHROMA(0); LOADCHROMA(0);
PUTRGBA(dst_1, py_1, pa_1, 0, 24); PUTRGBA(dst_1, py_1, pa_1, 0, 24);
PUTRGBA(dst_2, py_2, pa_2, 0, 24); PUTRGBA(dst_2, py_2, pa_2, 0, 24);
...@@ -274,6 +286,12 @@ ENDYUV2RGBLINE(8) ...@@ -274,6 +286,12 @@ ENDYUV2RGBLINE(8)
LOADCHROMA(1); LOADCHROMA(1);
PUTRGBA(dst_2, py_2, pa_1, 1, 24); PUTRGBA(dst_2, py_2, pa_1, 1, 24);
PUTRGBA(dst_1, py_1, pa_2, 1, 24); PUTRGBA(dst_1, py_1, pa_2, 1, 24);
pa_1 += 4; \
pa_2 += 4; \
ENDYUV2RGBLINE(8, 1)
LOADCHROMA(0);
PUTRGBA(dst_1, py_1, pa_1, 0, 24);
PUTRGBA(dst_2, py_2, pa_2, 0, 24);
ENDYUV2RGBFUNC() ENDYUV2RGBFUNC()
YUV2RGBFUNC(yuva2argb_c, uint32_t, 1) YUV2RGBFUNC(yuva2argb_c, uint32_t, 1)
...@@ -294,7 +312,7 @@ YUV2RGBFUNC(yuva2argb_c, uint32_t, 1) ...@@ -294,7 +312,7 @@ YUV2RGBFUNC(yuva2argb_c, uint32_t, 1)
PUTRGBA(dst_1, py_1, pa_1, 3, 0); PUTRGBA(dst_1, py_1, pa_1, 3, 0);
pa_1 += 8; \ pa_1 += 8; \
pa_2 += 8; \ pa_2 += 8; \
ENDYUV2RGBLINE(8) ENDYUV2RGBLINE(8, 0)
LOADCHROMA(0); LOADCHROMA(0);
PUTRGBA(dst_1, py_1, pa_1, 0, 0); PUTRGBA(dst_1, py_1, pa_1, 0, 0);
PUTRGBA(dst_2, py_2, pa_2, 0, 0); PUTRGBA(dst_2, py_2, pa_2, 0, 0);
...@@ -302,6 +320,12 @@ ENDYUV2RGBLINE(8) ...@@ -302,6 +320,12 @@ ENDYUV2RGBLINE(8)
LOADCHROMA(1); LOADCHROMA(1);
PUTRGBA(dst_2, py_2, pa_2, 1, 0); PUTRGBA(dst_2, py_2, pa_2, 1, 0);
PUTRGBA(dst_1, py_1, pa_1, 1, 0); PUTRGBA(dst_1, py_1, pa_1, 1, 0);
pa_1 += 4; \
pa_2 += 4; \
ENDYUV2RGBLINE(8, 1)
LOADCHROMA(0);
PUTRGBA(dst_1, py_1, pa_1, 0, 0);
PUTRGBA(dst_2, py_2, pa_2, 0, 0);
ENDYUV2RGBFUNC() ENDYUV2RGBFUNC()
YUV2RGBFUNC(yuv2rgb_c_24_rgb, uint8_t, 0) YUV2RGBFUNC(yuv2rgb_c_24_rgb, uint8_t, 0)
...@@ -320,7 +344,7 @@ YUV2RGBFUNC(yuv2rgb_c_24_rgb, uint8_t, 0) ...@@ -320,7 +344,7 @@ YUV2RGBFUNC(yuv2rgb_c_24_rgb, uint8_t, 0)
LOADCHROMA(3); LOADCHROMA(3);
PUTRGB24(dst_2, py_2, 3); PUTRGB24(dst_2, py_2, 3);
PUTRGB24(dst_1, py_1, 3); PUTRGB24(dst_1, py_1, 3);
ENDYUV2RGBLINE(24) ENDYUV2RGBLINE(24, 0)
LOADCHROMA(0); LOADCHROMA(0);
PUTRGB24(dst_1, py_1, 0); PUTRGB24(dst_1, py_1, 0);
PUTRGB24(dst_2, py_2, 0); PUTRGB24(dst_2, py_2, 0);
...@@ -328,6 +352,10 @@ ENDYUV2RGBLINE(24) ...@@ -328,6 +352,10 @@ ENDYUV2RGBLINE(24)
LOADCHROMA(1); LOADCHROMA(1);
PUTRGB24(dst_2, py_2, 1); PUTRGB24(dst_2, py_2, 1);
PUTRGB24(dst_1, py_1, 1); PUTRGB24(dst_1, py_1, 1);
ENDYUV2RGBLINE(24, 1)
LOADCHROMA(0);
PUTRGB24(dst_1, py_1, 0);
PUTRGB24(dst_2, py_2, 0);
ENDYUV2RGBFUNC() ENDYUV2RGBFUNC()
// only trivial mods from yuv2rgb_c_24_rgb // only trivial mods from yuv2rgb_c_24_rgb
...@@ -347,7 +375,7 @@ YUV2RGBFUNC(yuv2rgb_c_24_bgr, uint8_t, 0) ...@@ -347,7 +375,7 @@ YUV2RGBFUNC(yuv2rgb_c_24_bgr, uint8_t, 0)
LOADCHROMA(3); LOADCHROMA(3);
PUTBGR24(dst_2, py_2, 3); PUTBGR24(dst_2, py_2, 3);
PUTBGR24(dst_1, py_1, 3); PUTBGR24(dst_1, py_1, 3);
ENDYUV2RGBLINE(24) ENDYUV2RGBLINE(24, 0)
LOADCHROMA(0); LOADCHROMA(0);
PUTBGR24(dst_1, py_1, 0); PUTBGR24(dst_1, py_1, 0);
PUTBGR24(dst_2, py_2, 0); PUTBGR24(dst_2, py_2, 0);
...@@ -355,6 +383,10 @@ ENDYUV2RGBLINE(24) ...@@ -355,6 +383,10 @@ ENDYUV2RGBLINE(24)
LOADCHROMA(1); LOADCHROMA(1);
PUTBGR24(dst_2, py_2, 1); PUTBGR24(dst_2, py_2, 1);
PUTBGR24(dst_1, py_1, 1); PUTBGR24(dst_1, py_1, 1);
ENDYUV2RGBLINE(24, 1)
LOADCHROMA(0);
PUTBGR24(dst_1, py_1, 0);
PUTBGR24(dst_2, py_2, 0);
ENDYUV2RGBFUNC() ENDYUV2RGBFUNC()
YUV2RGBFUNC(yuv2rgb_c_16_ordered_dither, uint16_t, 0) YUV2RGBFUNC(yuv2rgb_c_16_ordered_dither, uint16_t, 0)
......
...@@ -6,11 +6,17 @@ ...@@ -6,11 +6,17 @@
* This utility converts compressed Macromedia Flash files to uncompressed ones. * This utility converts compressed Macromedia Flash files to uncompressed ones.
*/ */
#include "config.h"
#include <sys/stat.h> #include <sys/stat.h>
#include <fcntl.h> #include <fcntl.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#if HAVE_UNISTD_H
#include <unistd.h> #include <unistd.h>
#endif
#if HAVE_IO_H
#include <io.h>
#endif
#include <zlib.h> #include <zlib.h>
#ifdef DEBUG #ifdef DEBUG
......
...@@ -18,7 +18,10 @@ ...@@ -18,7 +18,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 "config.h"
#if HAVE_UNISTD_H
#include <unistd.h> /* getopt */ #include <unistd.h> /* getopt */
#endif
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
...@@ -27,6 +30,10 @@ ...@@ -27,6 +30,10 @@
#include "libavutil/audioconvert.h" #include "libavutil/audioconvert.h"
#include "libavfilter/avfiltergraph.h" #include "libavfilter/avfiltergraph.h"
#if !HAVE_GETOPT
#include "compat/getopt.c"
#endif
static void usage(void) static void usage(void)
{ {
printf("Convert a libavfilter graph to a dot file\n"); printf("Convert a libavfilter graph to a dot file\n");
......
...@@ -36,8 +36,8 @@ ...@@ -36,8 +36,8 @@
#include <string.h> #include <string.h>
#include <sys/stat.h> #include <sys/stat.h>
#ifdef _WIN32 #ifdef _WIN32
#include <io.h> #include <direct.h>
#define mkdir(a, b) mkdir(a) #define mkdir(a, b) _mkdir(a)
#endif #endif
#include "libavformat/avformat.h" #include "libavformat/avformat.h"
......
...@@ -18,12 +18,18 @@ ...@@ -18,12 +18,18 @@
* 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 "config.h"
#include <limits.h> #include <limits.h>
#include <fcntl.h> #include <fcntl.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#if HAVE_UNISTD_H
#include <unistd.h> #include <unistd.h>
#endif
#if HAVE_IO_H
#include <io.h>
#endif
#include "libavutil/time.h" #include "libavutil/time.h"
#include "libavformat/avformat.h" #include "libavformat/avformat.h"
......
...@@ -32,6 +32,9 @@ ...@@ -32,6 +32,9 @@
#ifdef __MINGW32__ #ifdef __MINGW32__
#define fseeko(x, y, z) fseeko64(x, y, z) #define fseeko(x, y, z) fseeko64(x, y, z)
#define ftello(x) ftello64(x) #define ftello(x) ftello64(x)
#elif defined(_WIN32)
#define fseeko(x, y, z) _fseeki64(x, y, z)
#define ftello(x) _ftelli64(x)
#endif #endif
#define BE_16(x) ((((uint8_t*)(x))[0] << 8) | ((uint8_t*)(x))[1]) #define BE_16(x) ((((uint8_t*)(x))[0] << 8) | ((uint8_t*)(x))[1])
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment