mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
Merge remote-tracking branch 'qatar/master'
* qatar/master: build: fix standalone compilation of OMA muxer build: fix standalone compilation of Microsoft XMV demuxer build: fix standalone compilation of Core Audio Format demuxer kvmc: fix invalid reads 4xm: Add a check in decode_i_frame to prevent buffer overreads adpcm: fix IMA SMJPEG decoding options: set minimum for "threads" to zero bsd: use number of logical CPUs as automatic thread count windows: use number of CPUs as automatic thread count linux: use number of CPUs as automatic thread count pthreads: reset active_thread_type when slice thread_init returrns early v410dec: include correct headers Drop ALT_ prefix from BITSTREAM_READER_LE name. lavfi: always build vsrc_buffer. ra144enc: zero the reflection coeffs if the filter is unstable sws: readd PAL8 to isPacked() mov: Don't stick the QuickTime field ordering atom in extradata. truespeech: fix invalid reads in truespeech_apply_twopoint_filter() Conflicts: configure libavcodec/4xm.c libavcodec/avcodec.h libavfilter/Makefile libavfilter/allfilters.c libavformat/Makefile libswscale/swscale_internal.h Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
d1c28e3530
1
avconv.c
1
avconv.c
@ -2139,6 +2139,7 @@ static int transcode_init(OutputFile *output_files,
|
|||||||
codec->bit_rate = icodec->bit_rate;
|
codec->bit_rate = icodec->bit_rate;
|
||||||
codec->rc_max_rate = icodec->rc_max_rate;
|
codec->rc_max_rate = icodec->rc_max_rate;
|
||||||
codec->rc_buffer_size = icodec->rc_buffer_size;
|
codec->rc_buffer_size = icodec->rc_buffer_size;
|
||||||
|
codec->field_order = icodec->field_order;
|
||||||
codec->extradata = av_mallocz(extra_size);
|
codec->extradata = av_mallocz(extra_size);
|
||||||
if (!codec->extradata) {
|
if (!codec->extradata) {
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
|
9
configure
vendored
9
configure
vendored
@ -1174,6 +1174,7 @@ HAVE_LIST="
|
|||||||
gethrtime
|
gethrtime
|
||||||
GetProcessMemoryInfo
|
GetProcessMemoryInfo
|
||||||
GetProcessTimes
|
GetProcessTimes
|
||||||
|
GetSystemInfo
|
||||||
getrusage
|
getrusage
|
||||||
gnu_as
|
gnu_as
|
||||||
ibm_asm
|
ibm_asm
|
||||||
@ -1206,6 +1207,7 @@ HAVE_LIST="
|
|||||||
posix_memalign
|
posix_memalign
|
||||||
round
|
round
|
||||||
roundf
|
roundf
|
||||||
|
sched_getaffinity
|
||||||
sdl
|
sdl
|
||||||
sdl_video_size
|
sdl_video_size
|
||||||
setmode
|
setmode
|
||||||
@ -1224,6 +1226,7 @@ HAVE_LIST="
|
|||||||
symver
|
symver
|
||||||
symver_asm_label
|
symver_asm_label
|
||||||
symver_gnu_asm
|
symver_gnu_asm
|
||||||
|
sysctl
|
||||||
sys_mman_h
|
sys_mman_h
|
||||||
sys_resource_h
|
sys_resource_h
|
||||||
sys_select_h
|
sys_select_h
|
||||||
@ -1654,14 +1657,13 @@ postproc_deps="gpl"
|
|||||||
|
|
||||||
# programs
|
# programs
|
||||||
avconv_deps="avcodec avformat swscale"
|
avconv_deps="avcodec avformat swscale"
|
||||||
avconv_select="buffer_filter"
|
|
||||||
ffplay_deps="avcodec avformat swscale sdl"
|
ffplay_deps="avcodec avformat swscale sdl"
|
||||||
ffplay_select="buffersink_filter rdft"
|
ffplay_select="buffersink_filter rdft"
|
||||||
ffprobe_deps="avcodec avformat"
|
ffprobe_deps="avcodec avformat"
|
||||||
ffserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer"
|
ffserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer"
|
||||||
ffserver_extralibs='$ldl'
|
ffserver_extralibs='$ldl'
|
||||||
ffmpeg_deps="avcodec avformat swscale swresample"
|
ffmpeg_deps="avcodec avformat swscale swresample"
|
||||||
ffmpeg_select="buffer_filter buffersink_filter"
|
ffmpeg_select="buffersink_filter"
|
||||||
|
|
||||||
doc_deps="texi2html"
|
doc_deps="texi2html"
|
||||||
|
|
||||||
@ -3000,12 +3002,15 @@ check_func ${malloc_prefix}posix_memalign && enable posix_memalign
|
|||||||
check_func setrlimit
|
check_func setrlimit
|
||||||
check_func strerror_r
|
check_func strerror_r
|
||||||
check_func strptime
|
check_func strptime
|
||||||
|
check_func sched_getaffinity
|
||||||
|
check_func sysctl
|
||||||
check_func_headers conio.h kbhit
|
check_func_headers conio.h kbhit
|
||||||
check_func_headers windows.h PeekNamedPipe
|
check_func_headers windows.h PeekNamedPipe
|
||||||
check_func_headers io.h setmode
|
check_func_headers io.h setmode
|
||||||
check_func_headers lzo/lzo1x.h lzo1x_999_compress
|
check_func_headers lzo/lzo1x.h lzo1x_999_compress
|
||||||
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
|
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
|
||||||
check_func_headers windows.h GetProcessTimes
|
check_func_headers windows.h GetProcessTimes
|
||||||
|
check_func_headers windows.h GetSystemInfo
|
||||||
check_func_headers windows.h MapViewOfFile
|
check_func_headers windows.h MapViewOfFile
|
||||||
check_func_headers windows.h VirtualAlloc
|
check_func_headers windows.h VirtualAlloc
|
||||||
|
|
||||||
|
1
ffmpeg.c
1
ffmpeg.c
@ -2213,6 +2213,7 @@ static int transcode_init(OutputFile *output_files, int nb_output_files,
|
|||||||
codec->bit_rate = icodec->bit_rate;
|
codec->bit_rate = icodec->bit_rate;
|
||||||
codec->rc_max_rate = icodec->rc_max_rate;
|
codec->rc_max_rate = icodec->rc_max_rate;
|
||||||
codec->rc_buffer_size = icodec->rc_buffer_size;
|
codec->rc_buffer_size = icodec->rc_buffer_size;
|
||||||
|
codec->field_order = icodec->field_order;
|
||||||
codec->extradata = av_mallocz(extra_size);
|
codec->extradata = av_mallocz(extra_size);
|
||||||
if (!codec->extradata) {
|
if (!codec->extradata) {
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
|
@ -688,10 +688,13 @@ static int decode_i_frame(FourXContext *f, const uint8_t *buf, int length){
|
|||||||
unsigned int prestream_size;
|
unsigned int prestream_size;
|
||||||
const uint8_t *prestream;
|
const uint8_t *prestream;
|
||||||
|
|
||||||
if (bitstream_size > (1<<26) || length < bitstream_size + 12)
|
if (bitstream_size > (1<<26) || length < bitstream_size + 12) {
|
||||||
return -1;
|
av_log(f->avctx, AV_LOG_ERROR, "packet size too small\n");
|
||||||
prestream_size = 4*AV_RL32(buf + bitstream_size + 4);
|
return AVERROR_INVALIDDATA;
|
||||||
prestream = buf + bitstream_size + 12;
|
}
|
||||||
|
|
||||||
|
prestream_size = 4 * AV_RL32(buf + bitstream_size + 4);
|
||||||
|
prestream = buf + bitstream_size + 12;
|
||||||
|
|
||||||
if (prestream_size > (1<<26) ||
|
if (prestream_size > (1<<26) ||
|
||||||
prestream_size != length - (bitstream_size + 12)){
|
prestream_size != length - (bitstream_size + 12)){
|
||||||
|
@ -1007,11 +1007,15 @@ static int adpcm_decode_frame(AVCodecContext *avctx, void *data,
|
|||||||
break;
|
break;
|
||||||
case CODEC_ID_ADPCM_IMA_AMV:
|
case CODEC_ID_ADPCM_IMA_AMV:
|
||||||
case CODEC_ID_ADPCM_IMA_SMJPEG:
|
case CODEC_ID_ADPCM_IMA_SMJPEG:
|
||||||
c->status[0].predictor = (int16_t)bytestream_get_le16(&src);
|
if (avctx->codec->id == CODEC_ID_ADPCM_IMA_AMV) {
|
||||||
c->status[0].step_index = bytestream_get_le16(&src);
|
c->status[0].predictor = sign_extend(bytestream_get_le16(&src), 16);
|
||||||
|
c->status[0].step_index = bytestream_get_le16(&src);
|
||||||
if (avctx->codec->id == CODEC_ID_ADPCM_IMA_AMV)
|
src += 4;
|
||||||
src+=4;
|
} else {
|
||||||
|
c->status[0].predictor = sign_extend(bytestream_get_be16(&src), 16);
|
||||||
|
c->status[0].step_index = bytestream_get_byte(&src);
|
||||||
|
src += 1;
|
||||||
|
}
|
||||||
|
|
||||||
for (n = nb_samples >> (1 - st); n > 0; n--, src++) {
|
for (n = nb_samples >> (1 - st); n > 0; n--, src++) {
|
||||||
char hi, lo;
|
char hi, lo;
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define ALT_BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "dsputil.h"
|
#include "dsputil.h"
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
|
@ -1335,6 +1335,15 @@ typedef struct AVFrame {
|
|||||||
|
|
||||||
struct AVCodecInternal;
|
struct AVCodecInternal;
|
||||||
|
|
||||||
|
enum AVFieldOrder {
|
||||||
|
AV_FIELD_UNKNOWN,
|
||||||
|
AV_FIELD_PROGRESSIVE,
|
||||||
|
AV_FIELD_TT, //< Top coded_first, top displayed first
|
||||||
|
AV_FIELD_BB, //< Bottom coded first, bottom displayed first
|
||||||
|
AV_FIELD_TB, //< Top coded first, bottom displayed first
|
||||||
|
AV_FIELD_BT, //< Bottom coded first, top displayed first
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* main external API structure.
|
* main external API structure.
|
||||||
* New fields can be added to the end with minor version bumps.
|
* New fields can be added to the end with minor version bumps.
|
||||||
@ -3191,6 +3200,12 @@ typedef struct AVCodecContext {
|
|||||||
*/
|
*/
|
||||||
struct AVCodecInternal *internal;
|
struct AVCodecInternal *internal;
|
||||||
|
|
||||||
|
/** Field order
|
||||||
|
* - encoding: set by libavcodec
|
||||||
|
* - decoding: Set by libavcodec
|
||||||
|
*/
|
||||||
|
enum AVFieldOrder field_order;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Current statistics for PTS correction.
|
* Current statistics for PTS correction.
|
||||||
* - decoding: maintained and used by libavcodec, not intended to be used by user apps
|
* - decoding: maintained and used by libavcodec, not intended to be used by user apps
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
#include "binkdsp.h"
|
#include "binkdsp.h"
|
||||||
#include "mathops.h"
|
#include "mathops.h"
|
||||||
|
|
||||||
#define ALT_BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
|
|
||||||
#define BINK_FLAG_ALPHA 0x00100000
|
#define BINK_FLAG_ALPHA 0x00100000
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#define ALT_BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
#include "dsputil.h"
|
#include "dsputil.h"
|
||||||
#include "dct.h"
|
#include "dct.h"
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#define ALT_BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
#include "bytestream.h"
|
#include "bytestream.h"
|
||||||
#include "dsputil.h"
|
#include "dsputil.h"
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#define ALT_BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
#include "libavutil/lzo.h"
|
#include "libavutil/lzo.h"
|
||||||
#include "libavutil/imgutils.h"
|
#include "libavutil/imgutils.h"
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
|
|
||||||
#define ALT_BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
|
|
||||||
typedef union MacroBlock {
|
typedef union MacroBlock {
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
|
|
||||||
#define ALT_BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
|
|
||||||
typedef struct Escape130Context {
|
typedef struct Escape130Context {
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#define ALT_BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
#include "acelp_vectors.h"
|
#include "acelp_vectors.h"
|
||||||
#include "celp_filters.h"
|
#include "celp_filters.h"
|
||||||
|
@ -124,7 +124,7 @@ for examples see get_bits, show_bits, skip_bits, get_vlc
|
|||||||
|
|
||||||
#define CLOSE_READER(name, gb) (gb)->index = name##_index
|
#define CLOSE_READER(name, gb) (gb)->index = name##_index
|
||||||
|
|
||||||
#ifdef ALT_BITSTREAM_READER_LE
|
#ifdef BITSTREAM_READER_LE
|
||||||
|
|
||||||
# ifdef LONG_BITSTREAM_READER
|
# ifdef LONG_BITSTREAM_READER
|
||||||
# define UPDATE_CACHE(name, gb) name##_cache = \
|
# define UPDATE_CACHE(name, gb) name##_cache = \
|
||||||
@ -164,7 +164,7 @@ for examples see get_bits, show_bits, skip_bits, get_vlc
|
|||||||
|
|
||||||
#define LAST_SKIP_BITS(name, gb, num) SKIP_COUNTER(name, gb, num)
|
#define LAST_SKIP_BITS(name, gb, num) SKIP_COUNTER(name, gb, num)
|
||||||
|
|
||||||
#ifdef ALT_BITSTREAM_READER_LE
|
#ifdef BITSTREAM_READER_LE
|
||||||
# define SHOW_UBITS(name, gb, num) zero_extend(name##_cache, num)
|
# define SHOW_UBITS(name, gb, num) zero_extend(name##_cache, num)
|
||||||
# define SHOW_SBITS(name, gb, num) sign_extend(name##_cache, num)
|
# define SHOW_SBITS(name, gb, num) sign_extend(name##_cache, num)
|
||||||
#else
|
#else
|
||||||
@ -254,7 +254,7 @@ static inline unsigned int get_bits1(GetBitContext *s)
|
|||||||
{
|
{
|
||||||
unsigned int index = s->index;
|
unsigned int index = s->index;
|
||||||
uint8_t result = s->buffer[index>>3];
|
uint8_t result = s->buffer[index>>3];
|
||||||
#ifdef ALT_BITSTREAM_READER_LE
|
#ifdef BITSTREAM_READER_LE
|
||||||
result >>= index & 7;
|
result >>= index & 7;
|
||||||
result &= 1;
|
result &= 1;
|
||||||
#else
|
#else
|
||||||
@ -288,7 +288,7 @@ static inline unsigned int get_bits_long(GetBitContext *s, int n)
|
|||||||
if (n <= MIN_CACHE_BITS)
|
if (n <= MIN_CACHE_BITS)
|
||||||
return get_bits(s, n);
|
return get_bits(s, n);
|
||||||
else {
|
else {
|
||||||
#ifdef ALT_BITSTREAM_READER_LE
|
#ifdef BITSTREAM_READER_LE
|
||||||
int ret = get_bits(s, 16);
|
int ret = get_bits(s, 16);
|
||||||
return ret | (get_bits(s, n-16) << 16);
|
return ret | (get_bits(s, n-16) << 16);
|
||||||
#else
|
#else
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
* @file
|
* @file
|
||||||
* Intel Indeo 2 decoder.
|
* Intel Indeo 2 decoder.
|
||||||
*/
|
*/
|
||||||
#define ALT_BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
#include "indeo2data.h"
|
#include "indeo2data.h"
|
||||||
@ -163,7 +163,7 @@ static int ir2_decode_frame(AVCodecContext *avctx,
|
|||||||
s->decode_delta = buf[18];
|
s->decode_delta = buf[18];
|
||||||
|
|
||||||
/* decide whether frame uses deltas or not */
|
/* decide whether frame uses deltas or not */
|
||||||
#ifndef ALT_BITSTREAM_READER_LE
|
#ifndef BITSTREAM_READER_LE
|
||||||
for (i = 0; i < buf_size; i++)
|
for (i = 0; i < buf_size; i++)
|
||||||
buf[i] = av_reverse[buf[i]];
|
buf[i] = av_reverse[buf[i]];
|
||||||
#endif
|
#endif
|
||||||
@ -205,7 +205,7 @@ static av_cold int ir2_decode_init(AVCodecContext *avctx){
|
|||||||
|
|
||||||
ir2_vlc.table = vlc_tables;
|
ir2_vlc.table = vlc_tables;
|
||||||
ir2_vlc.table_allocated = 1 << CODE_VLC_BITS;
|
ir2_vlc.table_allocated = 1 << CODE_VLC_BITS;
|
||||||
#ifdef ALT_BITSTREAM_READER_LE
|
#ifdef BITSTREAM_READER_LE
|
||||||
init_vlc(&ir2_vlc, CODE_VLC_BITS, IR2_CODES,
|
init_vlc(&ir2_vlc, CODE_VLC_BITS, IR2_CODES,
|
||||||
&ir2_codes[0][1], 4, 2,
|
&ir2_codes[0][1], 4, 2,
|
||||||
&ir2_codes[0][0], 4, 2, INIT_VLC_USE_NEW_STATIC | INIT_VLC_LE);
|
&ir2_codes[0][0], 4, 2, INIT_VLC_USE_NEW_STATIC | INIT_VLC_LE);
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
|
|
||||||
#define IR2_CODES 143
|
#define IR2_CODES 143
|
||||||
static const uint16_t ir2_codes[IR2_CODES][2] = {
|
static const uint16_t ir2_codes[IR2_CODES][2] = {
|
||||||
#ifdef ALT_BITSTREAM_READER_LE
|
#ifdef BITSTREAM_READER_LE
|
||||||
{0x0000, 3}, {0x0004, 3}, {0x0006, 3}, {0x0001, 5},
|
{0x0000, 3}, {0x0004, 3}, {0x0006, 3}, {0x0001, 5},
|
||||||
{0x0009, 5}, {0x0019, 5}, {0x000D, 5}, {0x001D, 5},
|
{0x0009, 5}, {0x0019, 5}, {0x000D, 5}, {0x001D, 5},
|
||||||
{0x0023, 6}, {0x0013, 6}, {0x0033, 6}, {0x000B, 6},
|
{0x0023, 6}, {0x0013, 6}, {0x0033, 6}, {0x000B, 6},
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
* Known FOURCCs: 'IV50'
|
* Known FOURCCs: 'IV50'
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define ALT_BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
#include "dsputil.h"
|
#include "dsputil.h"
|
||||||
|
@ -41,7 +41,7 @@
|
|||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "bytestream.h"
|
#include "bytestream.h"
|
||||||
#include "dsputil.h"
|
#include "dsputil.h"
|
||||||
#define ALT_BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
|
|
||||||
#define PALETTE_COUNT 256
|
#define PALETTE_COUNT 256
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* Indeo5 decoders.
|
* Indeo5 decoders.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define ALT_BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
#include "ivi_common.h"
|
#include "ivi_common.h"
|
||||||
|
@ -57,17 +57,21 @@ typedef struct BitBuf {
|
|||||||
|
|
||||||
#define kmvc_init_getbits(bb, src) bb.bits = 7; bb.bitbuf = *src++;
|
#define kmvc_init_getbits(bb, src) bb.bits = 7; bb.bitbuf = *src++;
|
||||||
|
|
||||||
#define kmvc_getbit(bb, src, res) {\
|
#define kmvc_getbit(bb, src, src_end, res) {\
|
||||||
res = 0; \
|
res = 0; \
|
||||||
if (bb.bitbuf & (1 << bb.bits)) res = 1; \
|
if (bb.bitbuf & (1 << bb.bits)) res = 1; \
|
||||||
bb.bits--; \
|
bb.bits--; \
|
||||||
if(bb.bits == -1) { \
|
if(bb.bits == -1) { \
|
||||||
|
if (src >= src_end) { \
|
||||||
|
av_log(ctx->avctx, AV_LOG_ERROR, "Data overrun\n"); \
|
||||||
|
return AVERROR_INVALIDDATA; \
|
||||||
|
} \
|
||||||
bb.bitbuf = *src++; \
|
bb.bitbuf = *src++; \
|
||||||
bb.bits = 7; \
|
bb.bits = 7; \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
static void kmvc_decode_intra_8x8(KmvcContext * ctx, const uint8_t * src, int w, int h)
|
static int kmvc_decode_intra_8x8(KmvcContext * ctx, const uint8_t * src, int src_size, int w, int h)
|
||||||
{
|
{
|
||||||
BitBuf bb;
|
BitBuf bb;
|
||||||
int res, val;
|
int res, val;
|
||||||
@ -75,13 +79,18 @@ static void kmvc_decode_intra_8x8(KmvcContext * ctx, const uint8_t * src, int w,
|
|||||||
int bx, by;
|
int bx, by;
|
||||||
int l0x, l1x, l0y, l1y;
|
int l0x, l1x, l0y, l1y;
|
||||||
int mx, my;
|
int mx, my;
|
||||||
|
const uint8_t *src_end = src + src_size;
|
||||||
|
|
||||||
kmvc_init_getbits(bb, src);
|
kmvc_init_getbits(bb, src);
|
||||||
|
|
||||||
for (by = 0; by < h; by += 8)
|
for (by = 0; by < h; by += 8)
|
||||||
for (bx = 0; bx < w; bx += 8) {
|
for (bx = 0; bx < w; bx += 8) {
|
||||||
kmvc_getbit(bb, src, res);
|
kmvc_getbit(bb, src, src_end, res);
|
||||||
if (!res) { // fill whole 8x8 block
|
if (!res) { // fill whole 8x8 block
|
||||||
|
if (src >= src_end) {
|
||||||
|
av_log(ctx->avctx, AV_LOG_ERROR, "Data overrun\n");
|
||||||
|
return AVERROR_INVALIDDATA;
|
||||||
|
}
|
||||||
val = *src++;
|
val = *src++;
|
||||||
for (i = 0; i < 64; i++)
|
for (i = 0; i < 64; i++)
|
||||||
BLK(ctx->cur, bx + (i & 0x7), by + (i >> 3)) = val;
|
BLK(ctx->cur, bx + (i & 0x7), by + (i >> 3)) = val;
|
||||||
@ -89,14 +98,22 @@ static void kmvc_decode_intra_8x8(KmvcContext * ctx, const uint8_t * src, int w,
|
|||||||
for (i = 0; i < 4; i++) {
|
for (i = 0; i < 4; i++) {
|
||||||
l0x = bx + (i & 1) * 4;
|
l0x = bx + (i & 1) * 4;
|
||||||
l0y = by + (i & 2) * 2;
|
l0y = by + (i & 2) * 2;
|
||||||
kmvc_getbit(bb, src, res);
|
kmvc_getbit(bb, src, src_end, res);
|
||||||
if (!res) {
|
if (!res) {
|
||||||
kmvc_getbit(bb, src, res);
|
kmvc_getbit(bb, src, src_end, res);
|
||||||
if (!res) { // fill whole 4x4 block
|
if (!res) { // fill whole 4x4 block
|
||||||
|
if (src >= src_end) {
|
||||||
|
av_log(ctx->avctx, AV_LOG_ERROR, "Data overrun\n");
|
||||||
|
return AVERROR_INVALIDDATA;
|
||||||
|
}
|
||||||
val = *src++;
|
val = *src++;
|
||||||
for (j = 0; j < 16; j++)
|
for (j = 0; j < 16; j++)
|
||||||
BLK(ctx->cur, l0x + (j & 3), l0y + (j >> 2)) = val;
|
BLK(ctx->cur, l0x + (j & 3), l0y + (j >> 2)) = val;
|
||||||
} else { // copy block from already decoded place
|
} else { // copy block from already decoded place
|
||||||
|
if (src >= src_end) {
|
||||||
|
av_log(ctx->avctx, AV_LOG_ERROR, "Data overrun\n");
|
||||||
|
return AVERROR_INVALIDDATA;
|
||||||
|
}
|
||||||
val = *src++;
|
val = *src++;
|
||||||
mx = val & 0xF;
|
mx = val & 0xF;
|
||||||
my = val >> 4;
|
my = val >> 4;
|
||||||
@ -108,16 +125,24 @@ static void kmvc_decode_intra_8x8(KmvcContext * ctx, const uint8_t * src, int w,
|
|||||||
for (j = 0; j < 4; j++) {
|
for (j = 0; j < 4; j++) {
|
||||||
l1x = l0x + (j & 1) * 2;
|
l1x = l0x + (j & 1) * 2;
|
||||||
l1y = l0y + (j & 2);
|
l1y = l0y + (j & 2);
|
||||||
kmvc_getbit(bb, src, res);
|
kmvc_getbit(bb, src, src_end, res);
|
||||||
if (!res) {
|
if (!res) {
|
||||||
kmvc_getbit(bb, src, res);
|
kmvc_getbit(bb, src, src_end, res);
|
||||||
if (!res) { // fill whole 2x2 block
|
if (!res) { // fill whole 2x2 block
|
||||||
|
if (src >= src_end) {
|
||||||
|
av_log(ctx->avctx, AV_LOG_ERROR, "Data overrun\n");
|
||||||
|
return AVERROR_INVALIDDATA;
|
||||||
|
}
|
||||||
val = *src++;
|
val = *src++;
|
||||||
BLK(ctx->cur, l1x, l1y) = val;
|
BLK(ctx->cur, l1x, l1y) = val;
|
||||||
BLK(ctx->cur, l1x + 1, l1y) = val;
|
BLK(ctx->cur, l1x + 1, l1y) = val;
|
||||||
BLK(ctx->cur, l1x, l1y + 1) = val;
|
BLK(ctx->cur, l1x, l1y + 1) = val;
|
||||||
BLK(ctx->cur, l1x + 1, l1y + 1) = val;
|
BLK(ctx->cur, l1x + 1, l1y + 1) = val;
|
||||||
} else { // copy block from already decoded place
|
} else { // copy block from already decoded place
|
||||||
|
if (src >= src_end) {
|
||||||
|
av_log(ctx->avctx, AV_LOG_ERROR, "Data overrun\n");
|
||||||
|
return AVERROR_INVALIDDATA;
|
||||||
|
}
|
||||||
val = *src++;
|
val = *src++;
|
||||||
mx = val & 0xF;
|
mx = val & 0xF;
|
||||||
my = val >> 4;
|
my = val >> 4;
|
||||||
@ -140,9 +165,11 @@ static void kmvc_decode_intra_8x8(KmvcContext * ctx, const uint8_t * src, int w,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void kmvc_decode_inter_8x8(KmvcContext * ctx, const uint8_t * src, int w, int h)
|
static int kmvc_decode_inter_8x8(KmvcContext * ctx, const uint8_t * src, int src_size, int w, int h)
|
||||||
{
|
{
|
||||||
BitBuf bb;
|
BitBuf bb;
|
||||||
int res, val;
|
int res, val;
|
||||||
@ -150,15 +177,20 @@ static void kmvc_decode_inter_8x8(KmvcContext * ctx, const uint8_t * src, int w,
|
|||||||
int bx, by;
|
int bx, by;
|
||||||
int l0x, l1x, l0y, l1y;
|
int l0x, l1x, l0y, l1y;
|
||||||
int mx, my;
|
int mx, my;
|
||||||
|
const uint8_t *src_end = src + src_size;
|
||||||
|
|
||||||
kmvc_init_getbits(bb, src);
|
kmvc_init_getbits(bb, src);
|
||||||
|
|
||||||
for (by = 0; by < h; by += 8)
|
for (by = 0; by < h; by += 8)
|
||||||
for (bx = 0; bx < w; bx += 8) {
|
for (bx = 0; bx < w; bx += 8) {
|
||||||
kmvc_getbit(bb, src, res);
|
kmvc_getbit(bb, src, src_end, res);
|
||||||
if (!res) {
|
if (!res) {
|
||||||
kmvc_getbit(bb, src, res);
|
kmvc_getbit(bb, src, src_end, res);
|
||||||
if (!res) { // fill whole 8x8 block
|
if (!res) { // fill whole 8x8 block
|
||||||
|
if (src >= src_end) {
|
||||||
|
av_log(ctx->avctx, AV_LOG_ERROR, "Data overrun\n");
|
||||||
|
return AVERROR_INVALIDDATA;
|
||||||
|
}
|
||||||
val = *src++;
|
val = *src++;
|
||||||
for (i = 0; i < 64; i++)
|
for (i = 0; i < 64; i++)
|
||||||
BLK(ctx->cur, bx + (i & 0x7), by + (i >> 3)) = val;
|
BLK(ctx->cur, bx + (i & 0x7), by + (i >> 3)) = val;
|
||||||
@ -171,14 +203,22 @@ static void kmvc_decode_inter_8x8(KmvcContext * ctx, const uint8_t * src, int w,
|
|||||||
for (i = 0; i < 4; i++) {
|
for (i = 0; i < 4; i++) {
|
||||||
l0x = bx + (i & 1) * 4;
|
l0x = bx + (i & 1) * 4;
|
||||||
l0y = by + (i & 2) * 2;
|
l0y = by + (i & 2) * 2;
|
||||||
kmvc_getbit(bb, src, res);
|
kmvc_getbit(bb, src, src_end, res);
|
||||||
if (!res) {
|
if (!res) {
|
||||||
kmvc_getbit(bb, src, res);
|
kmvc_getbit(bb, src, src_end, res);
|
||||||
if (!res) { // fill whole 4x4 block
|
if (!res) { // fill whole 4x4 block
|
||||||
|
if (src >= src_end) {
|
||||||
|
av_log(ctx->avctx, AV_LOG_ERROR, "Data overrun\n");
|
||||||
|
return AVERROR_INVALIDDATA;
|
||||||
|
}
|
||||||
val = *src++;
|
val = *src++;
|
||||||
for (j = 0; j < 16; j++)
|
for (j = 0; j < 16; j++)
|
||||||
BLK(ctx->cur, l0x + (j & 3), l0y + (j >> 2)) = val;
|
BLK(ctx->cur, l0x + (j & 3), l0y + (j >> 2)) = val;
|
||||||
} else { // copy block
|
} else { // copy block
|
||||||
|
if (src >= src_end) {
|
||||||
|
av_log(ctx->avctx, AV_LOG_ERROR, "Data overrun\n");
|
||||||
|
return AVERROR_INVALIDDATA;
|
||||||
|
}
|
||||||
val = *src++;
|
val = *src++;
|
||||||
mx = (val & 0xF) - 8;
|
mx = (val & 0xF) - 8;
|
||||||
my = (val >> 4) - 8;
|
my = (val >> 4) - 8;
|
||||||
@ -190,16 +230,24 @@ static void kmvc_decode_inter_8x8(KmvcContext * ctx, const uint8_t * src, int w,
|
|||||||
for (j = 0; j < 4; j++) {
|
for (j = 0; j < 4; j++) {
|
||||||
l1x = l0x + (j & 1) * 2;
|
l1x = l0x + (j & 1) * 2;
|
||||||
l1y = l0y + (j & 2);
|
l1y = l0y + (j & 2);
|
||||||
kmvc_getbit(bb, src, res);
|
kmvc_getbit(bb, src, src_end, res);
|
||||||
if (!res) {
|
if (!res) {
|
||||||
kmvc_getbit(bb, src, res);
|
kmvc_getbit(bb, src, src_end, res);
|
||||||
if (!res) { // fill whole 2x2 block
|
if (!res) { // fill whole 2x2 block
|
||||||
|
if (src >= src_end) {
|
||||||
|
av_log(ctx->avctx, AV_LOG_ERROR, "Data overrun\n");
|
||||||
|
return AVERROR_INVALIDDATA;
|
||||||
|
}
|
||||||
val = *src++;
|
val = *src++;
|
||||||
BLK(ctx->cur, l1x, l1y) = val;
|
BLK(ctx->cur, l1x, l1y) = val;
|
||||||
BLK(ctx->cur, l1x + 1, l1y) = val;
|
BLK(ctx->cur, l1x + 1, l1y) = val;
|
||||||
BLK(ctx->cur, l1x, l1y + 1) = val;
|
BLK(ctx->cur, l1x, l1y + 1) = val;
|
||||||
BLK(ctx->cur, l1x + 1, l1y + 1) = val;
|
BLK(ctx->cur, l1x + 1, l1y + 1) = val;
|
||||||
} else { // copy block
|
} else { // copy block
|
||||||
|
if (src >= src_end) {
|
||||||
|
av_log(ctx->avctx, AV_LOG_ERROR, "Data overrun\n");
|
||||||
|
return AVERROR_INVALIDDATA;
|
||||||
|
}
|
||||||
val = *src++;
|
val = *src++;
|
||||||
mx = (val & 0xF) - 8;
|
mx = (val & 0xF) - 8;
|
||||||
my = (val >> 4) - 8;
|
my = (val >> 4) - 8;
|
||||||
@ -222,6 +270,8 @@ static void kmvc_decode_inter_8x8(KmvcContext * ctx, const uint8_t * src, int w,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int decode_frame(AVCodecContext * avctx, void *data, int *data_size, AVPacket *avpkt)
|
static int decode_frame(AVCodecContext * avctx, void *data, int *data_size, AVPacket *avpkt)
|
||||||
@ -299,10 +349,10 @@ static int decode_frame(AVCodecContext * avctx, void *data, int *data_size, AVPa
|
|||||||
memcpy(ctx->cur, ctx->prev, 320 * 200);
|
memcpy(ctx->cur, ctx->prev, 320 * 200);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
kmvc_decode_intra_8x8(ctx, buf, avctx->width, avctx->height);
|
kmvc_decode_intra_8x8(ctx, buf, buf_size, avctx->width, avctx->height);
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
kmvc_decode_inter_8x8(ctx, buf, avctx->width, avctx->height);
|
kmvc_decode_inter_8x8(ctx, buf, buf_size, avctx->width, avctx->height);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
av_log(avctx, AV_LOG_ERROR, "Unknown compression method %i\n", header & KMVC_METHOD);
|
av_log(avctx, AV_LOG_ERROR, "Unknown compression method %i\n", header & KMVC_METHOD);
|
||||||
|
@ -112,12 +112,9 @@ av_cold int ff_mjpeg_decode_init(AVCodecContext *avctx)
|
|||||||
build_basic_mjpeg_vlc(s);
|
build_basic_mjpeg_vlc(s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (avctx->extradata_size > 9 &&
|
if (avctx->field_order == AV_FIELD_BB) { /* quicktime icefloe 019 */
|
||||||
AV_RL32(avctx->extradata + 4) == MKTAG('f','i','e','l')) {
|
s->interlace_polarity = 1; /* bottom field first */
|
||||||
if (avctx->extradata[9] == 6) { /* quicktime icefloe 019 */
|
av_log(avctx, AV_LOG_DEBUG, "mjpeg bottom field first\n");
|
||||||
s->interlace_polarity = 1; /* bottom field first */
|
|
||||||
av_log(avctx, AV_LOG_DEBUG, "mjpeg bottom field first\n");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (avctx->codec->id == CODEC_ID_AMV)
|
if (avctx->codec->id == CODEC_ID_AMV)
|
||||||
s->flipped = 1;
|
s->flipped = 1;
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define ALT_BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "msgsmdec.h"
|
#include "msgsmdec.h"
|
||||||
#include "gsmdec_template.c"
|
#include "gsmdec_template.c"
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "dsputil.h"
|
#include "dsputil.h"
|
||||||
|
|
||||||
#define ALT_BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
|
|
||||||
const float ff_nelly_dequantization_table[127] = {
|
const float ff_nelly_dequantization_table[127] = {
|
||||||
|
@ -41,7 +41,7 @@
|
|||||||
#include "fmtconvert.h"
|
#include "fmtconvert.h"
|
||||||
#include "sinewin.h"
|
#include "sinewin.h"
|
||||||
|
|
||||||
#define ALT_BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -371,7 +371,8 @@ static const AVOption options[]={
|
|||||||
{"float", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_AA_FLOAT }, INT_MIN, INT_MAX, V|D, "aa"},
|
{"float", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_AA_FLOAT }, INT_MIN, INT_MAX, V|D, "aa"},
|
||||||
#endif
|
#endif
|
||||||
{"qns", "quantizer noise shaping", OFFSET(quantizer_noise_shaping), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
|
{"qns", "quantizer noise shaping", OFFSET(quantizer_noise_shaping), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
|
||||||
{"threads", NULL, OFFSET(thread_count), AV_OPT_TYPE_INT, {.dbl = 1 }, INT_MIN, INT_MAX, V|E|D},
|
{"threads", NULL, OFFSET(thread_count), AV_OPT_TYPE_INT, {.dbl = 1 }, 0, INT_MAX, V|E|D, "threads"},
|
||||||
|
{"auto", "detect a good number of threads", 0, AV_OPT_TYPE_CONST, {.dbl = 0 }, INT_MIN, INT_MAX, V|E|D, "threads"},
|
||||||
{"me_threshold", "motion estimaton threshold", OFFSET(me_threshold), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
|
{"me_threshold", "motion estimaton threshold", OFFSET(me_threshold), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
|
||||||
{"mb_threshold", "macroblock threshold", OFFSET(mb_threshold), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
|
{"mb_threshold", "macroblock threshold", OFFSET(mb_threshold), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
|
||||||
{"dc", "intra_dc_precision", OFFSET(intra_dc_precision), AV_OPT_TYPE_INT, {.dbl = 0 }, INT_MIN, INT_MAX, V|E},
|
{"dc", "intra_dc_precision", OFFSET(intra_dc_precision), AV_OPT_TYPE_INT, {.dbl = 0 }, INT_MIN, INT_MAX, V|E},
|
||||||
|
@ -30,6 +30,17 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
#if HAVE_SCHED_GETAFFINITY
|
||||||
|
#define _GNU_SOURCE
|
||||||
|
#include <sched.h>
|
||||||
|
#elif HAVE_GETSYSTEMINFO
|
||||||
|
#include <windows.h>
|
||||||
|
#elif HAVE_SYSCTL
|
||||||
|
#include <sys/sysctl.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
#include "thread.h"
|
#include "thread.h"
|
||||||
@ -135,6 +146,40 @@ typedef struct FrameThreadContext {
|
|||||||
int die; ///< Set when threads should exit.
|
int die; ///< Set when threads should exit.
|
||||||
} FrameThreadContext;
|
} FrameThreadContext;
|
||||||
|
|
||||||
|
|
||||||
|
/* H264 slice threading seems to be buggy with more than 16 threads,
|
||||||
|
* limit the number of threads to 16 for automatic detection */
|
||||||
|
#define MAX_AUTO_THREADS 16
|
||||||
|
|
||||||
|
static int get_logical_cpus(AVCodecContext *avctx)
|
||||||
|
{
|
||||||
|
int ret, nb_cpus = 1;
|
||||||
|
#if HAVE_SCHED_GETAFFINITY
|
||||||
|
cpu_set_t cpuset;
|
||||||
|
|
||||||
|
CPU_ZERO(&cpuset);
|
||||||
|
|
||||||
|
ret = sched_getaffinity(0, sizeof(cpuset), &cpuset);
|
||||||
|
if (!ret) {
|
||||||
|
nb_cpus = CPU_COUNT(&cpuset);
|
||||||
|
}
|
||||||
|
#elif HAVE_GETSYSTEMINFO
|
||||||
|
SYSTEM_INFO sysinfo;
|
||||||
|
GetSystemInfo(&sysinfo);
|
||||||
|
nb_cpus = sysinfo.dwNumberOfProcessors;
|
||||||
|
#elif HAVE_SYSCTL
|
||||||
|
int mib[2] = { CTL_HW, HW_NCPU };
|
||||||
|
size_t len = sizeof(nb_cpus);
|
||||||
|
|
||||||
|
ret = sysctl(mib, 2, &nb_cpus, &len, NULL, 0);
|
||||||
|
if (ret == -1)
|
||||||
|
nb_cpus = 0;
|
||||||
|
#endif
|
||||||
|
av_log(avctx, AV_LOG_DEBUG, "detected %d logical cores\n", nb_cpus);
|
||||||
|
return FFMIN(nb_cpus, MAX_AUTO_THREADS);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void* attribute_align_arg worker(void *v)
|
static void* attribute_align_arg worker(void *v)
|
||||||
{
|
{
|
||||||
AVCodecContext *avctx = v;
|
AVCodecContext *avctx = v;
|
||||||
@ -239,8 +284,17 @@ static int thread_init(AVCodecContext *avctx)
|
|||||||
ThreadContext *c;
|
ThreadContext *c;
|
||||||
int thread_count = avctx->thread_count;
|
int thread_count = avctx->thread_count;
|
||||||
|
|
||||||
if (thread_count <= 1)
|
if (!thread_count) {
|
||||||
|
int nb_cpus = get_logical_cpus(avctx);
|
||||||
|
// use number of cores + 1 as thread count if there is motre than one
|
||||||
|
if (nb_cpus > 1)
|
||||||
|
thread_count = avctx->thread_count = nb_cpus + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (thread_count <= 1) {
|
||||||
|
avctx->active_thread_type = 0;
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
c = av_mallocz(sizeof(ThreadContext));
|
c = av_mallocz(sizeof(ThreadContext));
|
||||||
if (!c)
|
if (!c)
|
||||||
@ -704,6 +758,13 @@ static int frame_thread_init(AVCodecContext *avctx)
|
|||||||
FrameThreadContext *fctx;
|
FrameThreadContext *fctx;
|
||||||
int i, err = 0;
|
int i, err = 0;
|
||||||
|
|
||||||
|
if (!thread_count) {
|
||||||
|
int nb_cpus = get_logical_cpus(avctx);
|
||||||
|
// use number of cores + 1 as thread count if there is motre than one
|
||||||
|
if (nb_cpus > 1)
|
||||||
|
thread_count = avctx->thread_count = nb_cpus + 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (thread_count <= 1) {
|
if (thread_count <= 1) {
|
||||||
avctx->active_thread_type = 0;
|
avctx->active_thread_type = 0;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#define ALT_BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
#include "dsputil.h"
|
#include "dsputil.h"
|
||||||
|
@ -477,7 +477,10 @@ static int ra144_encode_frame(AVCodecContext *avctx, uint8_t *frame,
|
|||||||
* The filter is unstable: use the coefficients of the previous frame.
|
* The filter is unstable: use the coefficients of the previous frame.
|
||||||
*/
|
*/
|
||||||
ff_int_to_int16(block_coefs[NBLOCKS - 1], ractx->lpc_coef[1]);
|
ff_int_to_int16(block_coefs[NBLOCKS - 1], ractx->lpc_coef[1]);
|
||||||
ff_eval_refl(lpc_refl, block_coefs[NBLOCKS - 1], avctx);
|
if (ff_eval_refl(lpc_refl, block_coefs[NBLOCKS - 1], avctx)) {
|
||||||
|
/* the filter is still unstable. set reflection coeffs to zero. */
|
||||||
|
memset(lpc_refl, 0, sizeof(lpc_refl));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
init_put_bits(&pb, frame, buf_size);
|
init_put_bits(&pb, frame, buf_size);
|
||||||
for (i = 0; i < LPC_ORDER; i++) {
|
for (i = 0; i < LPC_ORDER; i++) {
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#define ALT_BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
#include "ra288.h"
|
#include "ra288.h"
|
||||||
#include "lpc.h"
|
#include "lpc.h"
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
|
|
||||||
#include "libavutil/mathematics.h"
|
#include "libavutil/mathematics.h"
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#define ALT_BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
#include "dsputil.h"
|
#include "dsputil.h"
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
#include "libavutil/audioconvert.h"
|
#include "libavutil/audioconvert.h"
|
||||||
#include "mathops.h"
|
#include "mathops.h"
|
||||||
|
|
||||||
#define ALT_BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
#include "bytestream.h"
|
#include "bytestream.h"
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#define ALT_BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -179,6 +179,7 @@ static void truespeech_apply_twopoint_filter(TSContext *dec, int quart)
|
|||||||
for(i = 0; i < 146; i++)
|
for(i = 0; i < 146; i++)
|
||||||
tmp[i] = dec->filtbuf[i];
|
tmp[i] = dec->filtbuf[i];
|
||||||
off = (t / 25) + dec->offset1[quart >> 1] + 18;
|
off = (t / 25) + dec->offset1[quart >> 1] + 18;
|
||||||
|
off = av_clip(off, 0, 145);
|
||||||
ptr0 = tmp + 145 - off;
|
ptr0 = tmp + 145 - off;
|
||||||
ptr1 = tmp + 146;
|
ptr1 = tmp + 146;
|
||||||
filter = (const int16_t*)ts_order2_coeffs + (t % 25) * 2;
|
filter = (const int16_t*)ts_order2_coeffs + (t % 25) * 2;
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
* @author Alex Beregszaszi
|
* @author Alex Beregszaszi
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define ALT_BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
//#define DEBUG
|
//#define DEBUG
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
|
@ -20,8 +20,8 @@
|
|||||||
* 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 "libavutil/intreadwrite.h"
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "get_bits.h"
|
|
||||||
|
|
||||||
static av_cold int v410_decode_init(AVCodecContext *avctx)
|
static av_cold int v410_decode_init(AVCodecContext *avctx)
|
||||||
{
|
{
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
* VBLE Decoder
|
* VBLE Decoder
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define ALT_BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
|
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "dsputil.h"
|
#include "dsputil.h"
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @author Denes Balatoni ( dbalatoni programozo hu )
|
* @author Denes Balatoni ( dbalatoni programozo hu )
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define ALT_BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
#define ALT_BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
#include "dsputil.h"
|
#include "dsputil.h"
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
* License along with FFmpeg; 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
|
||||||
*/
|
*/
|
||||||
#define ALT_BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
#include "unary.h"
|
#include "unary.h"
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
#include "libavutil/intreadwrite.h"
|
#include "libavutil/intreadwrite.h"
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "bytestream.h"
|
#include "bytestream.h"
|
||||||
#define ALT_BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
// for av_memcpy_backptr
|
// for av_memcpy_backptr
|
||||||
#include "libavutil/lzo.h"
|
#include "libavutil/lzo.h"
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "libavutil/intreadwrite.h"
|
#include "libavutil/intreadwrite.h"
|
||||||
#include "bytestream.h"
|
#include "bytestream.h"
|
||||||
#define ALT_BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
// for av_memcpy_backptr
|
// for av_memcpy_backptr
|
||||||
#include "libavutil/lzo.h"
|
#include "libavutil/lzo.h"
|
||||||
|
@ -20,6 +20,7 @@ OBJS = allfilters.o \
|
|||||||
formats.o \
|
formats.o \
|
||||||
graphparser.o \
|
graphparser.o \
|
||||||
transform.o \
|
transform.o \
|
||||||
|
vsrc_buffer.o
|
||||||
|
|
||||||
OBJS-$(CONFIG_AVCODEC) += avcodec.o
|
OBJS-$(CONFIG_AVCODEC) += avcodec.o
|
||||||
|
|
||||||
@ -83,7 +84,6 @@ OBJS-$(CONFIG_UNSHARP_FILTER) += vf_unsharp.o
|
|||||||
OBJS-$(CONFIG_VFLIP_FILTER) += vf_vflip.o
|
OBJS-$(CONFIG_VFLIP_FILTER) += vf_vflip.o
|
||||||
OBJS-$(CONFIG_YADIF_FILTER) += vf_yadif.o
|
OBJS-$(CONFIG_YADIF_FILTER) += vf_yadif.o
|
||||||
|
|
||||||
OBJS-$(CONFIG_BUFFER_FILTER) += vsrc_buffer.o
|
|
||||||
OBJS-$(CONFIG_CELLAUTO_FILTER) += vsrc_cellauto.o
|
OBJS-$(CONFIG_CELLAUTO_FILTER) += vsrc_cellauto.o
|
||||||
OBJS-$(CONFIG_COLOR_FILTER) += vsrc_color.o
|
OBJS-$(CONFIG_COLOR_FILTER) += vsrc_color.o
|
||||||
OBJS-$(CONFIG_FREI0R_SRC_FILTER) += vf_frei0r.o
|
OBJS-$(CONFIG_FREI0R_SRC_FILTER) += vf_frei0r.o
|
||||||
|
@ -94,7 +94,6 @@ void avfilter_register_all(void)
|
|||||||
REGISTER_FILTER (VFLIP, vflip, vf);
|
REGISTER_FILTER (VFLIP, vflip, vf);
|
||||||
REGISTER_FILTER (YADIF, yadif, vf);
|
REGISTER_FILTER (YADIF, yadif, vf);
|
||||||
|
|
||||||
REGISTER_FILTER (BUFFER, buffer, vsrc);
|
|
||||||
REGISTER_FILTER (CELLAUTO, cellauto, vsrc);
|
REGISTER_FILTER (CELLAUTO, cellauto, vsrc);
|
||||||
REGISTER_FILTER (COLOR, color, vsrc);
|
REGISTER_FILTER (COLOR, color, vsrc);
|
||||||
REGISTER_FILTER (FREI0R, frei0r_src, vsrc);
|
REGISTER_FILTER (FREI0R, frei0r_src, vsrc);
|
||||||
@ -108,4 +107,10 @@ void avfilter_register_all(void)
|
|||||||
|
|
||||||
REGISTER_FILTER (BUFFERSINK, buffersink, vsink);
|
REGISTER_FILTER (BUFFERSINK, buffersink, vsink);
|
||||||
REGISTER_FILTER (NULLSINK, nullsink, vsink);
|
REGISTER_FILTER (NULLSINK, nullsink, vsink);
|
||||||
|
|
||||||
|
/* vsrc_buffer is a part of public API => registered unconditionally */
|
||||||
|
{
|
||||||
|
extern avfilter_vsrc_buffer;
|
||||||
|
avfilter_register(&avfilter_vsrc_buffer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -56,7 +56,8 @@ OBJS-$(CONFIG_BIT_DEMUXER) += bit.o
|
|||||||
OBJS-$(CONFIG_BIT_MUXER) += bit.o
|
OBJS-$(CONFIG_BIT_MUXER) += bit.o
|
||||||
OBJS-$(CONFIG_BMV_DEMUXER) += bmv.o
|
OBJS-$(CONFIG_BMV_DEMUXER) += bmv.o
|
||||||
OBJS-$(CONFIG_C93_DEMUXER) += c93.o vocdec.o voc.o
|
OBJS-$(CONFIG_C93_DEMUXER) += c93.o vocdec.o voc.o
|
||||||
OBJS-$(CONFIG_CAF_DEMUXER) += cafdec.o caf.o mov.o riff.o isom.o
|
OBJS-$(CONFIG_CAF_DEMUXER) += cafdec.o caf.o mov.o mov_chan.o \
|
||||||
|
riff.o isom.o
|
||||||
OBJS-$(CONFIG_CAF_MUXER) += cafenc.o caf.o riff.o isom.o
|
OBJS-$(CONFIG_CAF_MUXER) += cafenc.o caf.o riff.o isom.o
|
||||||
OBJS-$(CONFIG_CAVSVIDEO_DEMUXER) += cavsvideodec.o rawdec.o
|
OBJS-$(CONFIG_CAVSVIDEO_DEMUXER) += cavsvideodec.o rawdec.o
|
||||||
OBJS-$(CONFIG_CAVSVIDEO_MUXER) += rawenc.o
|
OBJS-$(CONFIG_CAVSVIDEO_MUXER) += rawenc.o
|
||||||
@ -195,7 +196,7 @@ OBJS-$(CONFIG_OGG_DEMUXER) += oggdec.o \
|
|||||||
OBJS-$(CONFIG_OGG_MUXER) += oggenc.o \
|
OBJS-$(CONFIG_OGG_MUXER) += oggenc.o \
|
||||||
vorbiscomment.o
|
vorbiscomment.o
|
||||||
OBJS-$(CONFIG_OMA_DEMUXER) += omadec.o pcm.o oma.o
|
OBJS-$(CONFIG_OMA_DEMUXER) += omadec.o pcm.o oma.o
|
||||||
OBJS-$(CONFIG_OMA_MUXER) += omaenc.o rawenc.o oma.o
|
OBJS-$(CONFIG_OMA_MUXER) += omaenc.o rawenc.o oma.o id3v2enc.o
|
||||||
OBJS-$(CONFIG_PCM_ALAW_DEMUXER) += pcmdec.o pcm.o rawdec.o
|
OBJS-$(CONFIG_PCM_ALAW_DEMUXER) += pcmdec.o pcm.o rawdec.o
|
||||||
OBJS-$(CONFIG_PCM_ALAW_MUXER) += pcmenc.o rawenc.o
|
OBJS-$(CONFIG_PCM_ALAW_MUXER) += pcmenc.o rawenc.o
|
||||||
OBJS-$(CONFIG_PCM_F32BE_DEMUXER) += pcmdec.o pcm.o rawdec.o
|
OBJS-$(CONFIG_PCM_F32BE_DEMUXER) += pcmdec.o pcm.o rawdec.o
|
||||||
@ -331,7 +332,7 @@ OBJS-$(CONFIG_WTV_MUXER) += wtvenc.o wtv.o asf.o asfenc.o riff.o
|
|||||||
OBJS-$(CONFIG_WV_DEMUXER) += wv.o apetag.o
|
OBJS-$(CONFIG_WV_DEMUXER) += wv.o apetag.o
|
||||||
OBJS-$(CONFIG_XA_DEMUXER) += xa.o
|
OBJS-$(CONFIG_XA_DEMUXER) += xa.o
|
||||||
OBJS-$(CONFIG_XBIN_DEMUXER) += bintext.o sauce.o
|
OBJS-$(CONFIG_XBIN_DEMUXER) += bintext.o sauce.o
|
||||||
OBJS-$(CONFIG_XMV_DEMUXER) += xmv.o
|
OBJS-$(CONFIG_XMV_DEMUXER) += xmv.o riff.o
|
||||||
OBJS-$(CONFIG_XWMA_DEMUXER) += xwma.o riff.o
|
OBJS-$(CONFIG_XWMA_DEMUXER) += xwma.o riff.o
|
||||||
OBJS-$(CONFIG_YOP_DEMUXER) += yop.o
|
OBJS-$(CONFIG_YOP_DEMUXER) += yop.o
|
||||||
OBJS-$(CONFIG_YUV4MPEGPIPE_MUXER) += yuv4mpeg.o
|
OBJS-$(CONFIG_YUV4MPEGPIPE_MUXER) += yuv4mpeg.o
|
||||||
|
@ -857,6 +857,40 @@ static int mov_read_enda(MOVContext *c, AVIOContext *pb, MOVAtom atom)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int mov_read_fiel(MOVContext *c, AVIOContext *pb, MOVAtom atom)
|
||||||
|
{
|
||||||
|
AVStream *st;
|
||||||
|
unsigned mov_field_order;
|
||||||
|
enum AVFieldOrder decoded_field_order = AV_FIELD_UNKNOWN;
|
||||||
|
|
||||||
|
if (c->fc->nb_streams < 1) // will happen with jp2 files
|
||||||
|
return 0;
|
||||||
|
st = c->fc->streams[c->fc->nb_streams-1];
|
||||||
|
if (atom.size < 2)
|
||||||
|
return AVERROR_INVALIDDATA;
|
||||||
|
mov_field_order = avio_rb16(pb);
|
||||||
|
if ((mov_field_order & 0xFF00) == 0x0100)
|
||||||
|
decoded_field_order = AV_FIELD_PROGRESSIVE;
|
||||||
|
else if ((mov_field_order & 0xFF00) == 0x0200) {
|
||||||
|
switch (mov_field_order & 0xFF) {
|
||||||
|
case 0x01: decoded_field_order = AV_FIELD_TT;
|
||||||
|
break;
|
||||||
|
case 0x06: decoded_field_order = AV_FIELD_BB;
|
||||||
|
break;
|
||||||
|
case 0x09: decoded_field_order = AV_FIELD_TB;
|
||||||
|
break;
|
||||||
|
case 0x0E: decoded_field_order = AV_FIELD_BT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (decoded_field_order == AV_FIELD_UNKNOWN && mov_field_order) {
|
||||||
|
av_log(NULL, AV_LOG_ERROR, "Unknown MOV field order 0x%04x\n", mov_field_order);
|
||||||
|
}
|
||||||
|
st->codec->field_order = decoded_field_order;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* FIXME modify qdm2/svq3/h264 decoders to take full atom as extradata */
|
/* FIXME modify qdm2/svq3/h264 decoders to take full atom as extradata */
|
||||||
static int mov_read_extradata(MOVContext *c, AVIOContext *pb, MOVAtom atom,
|
static int mov_read_extradata(MOVContext *c, AVIOContext *pb, MOVAtom atom,
|
||||||
enum CodecID codec_id)
|
enum CodecID codec_id)
|
||||||
@ -898,11 +932,6 @@ static int mov_read_avss(MOVContext *c, AVIOContext *pb, MOVAtom atom)
|
|||||||
return mov_read_extradata(c, pb, atom, CODEC_ID_AVS);
|
return mov_read_extradata(c, pb, atom, CODEC_ID_AVS);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mov_read_fiel(MOVContext *c, AVIOContext *pb, MOVAtom atom)
|
|
||||||
{
|
|
||||||
return mov_read_extradata(c, pb, atom, CODEC_ID_MJPEG);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int mov_read_jp2h(MOVContext *c, AVIOContext *pb, MOVAtom atom)
|
static int mov_read_jp2h(MOVContext *c, AVIOContext *pb, MOVAtom atom)
|
||||||
{
|
{
|
||||||
return mov_read_extradata(c, pb, atom, CODEC_ID_JPEG2000);
|
return mov_read_extradata(c, pb, atom, CODEC_ID_JPEG2000);
|
||||||
@ -950,6 +979,15 @@ static int mov_read_glbl(MOVContext *c, AVIOContext *pb, MOVAtom atom)
|
|||||||
if ((uint64_t)atom.size > (1<<30))
|
if ((uint64_t)atom.size > (1<<30))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
if (atom.size >= 10) {
|
||||||
|
// Broken files created by legacy versions of Libav and FFmpeg will
|
||||||
|
// wrap a whole fiel atom inside of a glbl atom.
|
||||||
|
unsigned size = avio_rb32(pb);
|
||||||
|
unsigned type = avio_rl32(pb);
|
||||||
|
avio_seek(pb, -8, SEEK_CUR);
|
||||||
|
if (type == MKTAG('f','i','e','l') && size == atom.size)
|
||||||
|
return mov_read_default(c, pb, atom);
|
||||||
|
}
|
||||||
av_free(st->codec->extradata);
|
av_free(st->codec->extradata);
|
||||||
st->codec->extradata = av_mallocz(atom.size + FF_INPUT_BUFFER_PADDING_SIZE);
|
st->codec->extradata = av_mallocz(atom.size + FF_INPUT_BUFFER_PADDING_SIZE);
|
||||||
if (!st->codec->extradata)
|
if (!st->codec->extradata)
|
||||||
|
@ -799,6 +799,23 @@ static int mov_write_uuid_tag_ipod(AVIOContext *pb)
|
|||||||
return 28;
|
return 28;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const uint16_t fiel_data[] = {
|
||||||
|
0x0000, 0x0100, 0x0201, 0x0206, 0x0209, 0x020e
|
||||||
|
};
|
||||||
|
|
||||||
|
static int mov_write_fiel_tag(AVIOContext *pb, MOVTrack *track)
|
||||||
|
{
|
||||||
|
unsigned mov_field_order = 0;
|
||||||
|
if (track->enc->field_order < FF_ARRAY_ELEMS(fiel_data))
|
||||||
|
mov_field_order = fiel_data[track->enc->field_order];
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
avio_wb32(pb, 10);
|
||||||
|
ffio_wfourcc(pb, "fiel");
|
||||||
|
avio_wb16(pb, mov_field_order);
|
||||||
|
return 10;
|
||||||
|
}
|
||||||
|
|
||||||
static int mov_write_subtitle_tag(AVIOContext *pb, MOVTrack *track)
|
static int mov_write_subtitle_tag(AVIOContext *pb, MOVTrack *track)
|
||||||
{
|
{
|
||||||
int64_t pos = avio_tell(pb);
|
int64_t pos = avio_tell(pb);
|
||||||
@ -885,7 +902,9 @@ static int mov_write_video_tag(AVIOContext *pb, MOVTrack *track)
|
|||||||
mov_write_avcc_tag(pb, track);
|
mov_write_avcc_tag(pb, track);
|
||||||
if(track->mode == MODE_IPOD)
|
if(track->mode == MODE_IPOD)
|
||||||
mov_write_uuid_tag_ipod(pb);
|
mov_write_uuid_tag_ipod(pb);
|
||||||
} else if(track->vosLen > 0)
|
} else if (track->enc->field_order != AV_FIELD_UNKNOWN)
|
||||||
|
mov_write_fiel_tag(pb, track);
|
||||||
|
else if(track->vosLen > 0)
|
||||||
mov_write_glbl_tag(pb, track);
|
mov_write_glbl_tag(pb, track);
|
||||||
|
|
||||||
if (track->enc->sample_aspect_ratio.den && track->enc->sample_aspect_ratio.num &&
|
if (track->enc->sample_aspect_ratio.den && track->enc->sample_aspect_ratio.num &&
|
||||||
|
@ -655,9 +655,11 @@ const char *sws_format_name(enum PixelFormat format);
|
|||||||
|| isBGRinInt(x) \
|
|| isBGRinInt(x) \
|
||||||
)
|
)
|
||||||
#else
|
#else
|
||||||
#define isPacked(x) \
|
#define isPacked(x) (\
|
||||||
(av_pix_fmt_descriptors[x].nb_components >= 2 && \
|
(av_pix_fmt_descriptors[x].nb_components >= 2 && \
|
||||||
!(av_pix_fmt_descriptors[x].flags & PIX_FMT_PLANAR))
|
!(av_pix_fmt_descriptors[x].flags & PIX_FMT_PLANAR)) || \
|
||||||
|
(x) == PIX_FMT_PAL8\
|
||||||
|
)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#define isPlanar(x) \
|
#define isPlanar(x) \
|
||||||
|
Loading…
Reference in New Issue
Block a user