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: rtpdec: Use 4 byte startcodes for H.264 matroskadec: Mark variable as av_unused. Move some conditionally used variables into the block where they are used. Drop some completely unnecessary av_unused attributes. swscale: Remove unused variable alpMmxFilter. Drop unnecessary av_uninit attributes from some variable declarations. movenc: Support muxing wmapro in ismv/isma mpegtsenc: Add an AVOption for forcing a new PAT/PMT/SDT to be written swscale: move YUV2PACKED16WRAPPER() macro down to where it is used. swscale: handle gray16 as a "planar" YUV format (Y-only, of course). swscale: use yuv2packed1() functions for unscaled chroma also. swscale: fix incorrect chroma bias in yuv2rgb48_1_c(). swscale: fix invalid memory accesses in yuvpacked1() functions. Move PS2 MMI code below the mips subdirectory, where it belongs. mips: Move MMI function declarations to a header. build: Set correct dependencies for rtmp* protocols implemented by librtmp. Conflicts: libavcodec/ac3enc_template.c libavformat/mpegtsenc.c libswscale/output.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
04b53746ad
4
configure
vendored
4
configure
vendored
@ -1643,6 +1643,10 @@ https_protocol_select="tls_protocol"
|
|||||||
mmsh_protocol_select="http_protocol"
|
mmsh_protocol_select="http_protocol"
|
||||||
mmst_protocol_deps="network"
|
mmst_protocol_deps="network"
|
||||||
rtmp_protocol_select="tcp_protocol"
|
rtmp_protocol_select="tcp_protocol"
|
||||||
|
rtmpe_protocol_deps="librtmp"
|
||||||
|
rtmps_protocol_deps="librtmp"
|
||||||
|
rtmpt_protocol_deps="librtmp"
|
||||||
|
rtmpte_protocol_deps="librtmp"
|
||||||
rtp_protocol_select="udp_protocol"
|
rtp_protocol_select="udp_protocol"
|
||||||
tcp_protocol_deps="network"
|
tcp_protocol_deps="network"
|
||||||
tls_protocol_deps_any="openssl gnutls"
|
tls_protocol_deps_any="openssl gnutls"
|
||||||
|
@ -747,7 +747,7 @@ HOSTPROGS = aac_tablegen aacps_tablegen cbrt_tablegen cos_tablegen \
|
|||||||
dv_tablegen motionpixels_tablegen mpegaudio_tablegen \
|
dv_tablegen motionpixels_tablegen mpegaudio_tablegen \
|
||||||
pcm_tablegen qdm2_tablegen sinewin_tablegen
|
pcm_tablegen qdm2_tablegen sinewin_tablegen
|
||||||
|
|
||||||
DIRS = alpha arm avr32 bfin ppc ps2 sh4 sparc x86
|
DIRS = alpha arm avr32 bfin mips ppc sh4 sparc x86
|
||||||
|
|
||||||
CLEANFILES = *_tables.c *_tables.h *_tablegen$(HOSTEXESUF)
|
CLEANFILES = *_tables.c *_tables.h *_tablegen$(HOSTEXESUF)
|
||||||
|
|
||||||
|
@ -1383,8 +1383,7 @@ static void ac3_output_frame_header(AC3EncodeContext *s)
|
|||||||
*/
|
*/
|
||||||
static void output_audio_block(AC3EncodeContext *s, int blk)
|
static void output_audio_block(AC3EncodeContext *s, int blk)
|
||||||
{
|
{
|
||||||
int ch, i, baie, bnd, got_cpl;
|
int ch, i, baie, bnd, got_cpl, ch0;
|
||||||
int av_uninit(ch0);
|
|
||||||
AC3Block *block = &s->blocks[blk];
|
AC3Block *block = &s->blocks[blk];
|
||||||
|
|
||||||
/* block switching */
|
/* block switching */
|
||||||
@ -2233,8 +2232,7 @@ static av_cold int validate_options(AC3EncodeContext *s)
|
|||||||
*/
|
*/
|
||||||
static av_cold void set_bandwidth(AC3EncodeContext *s)
|
static av_cold void set_bandwidth(AC3EncodeContext *s)
|
||||||
{
|
{
|
||||||
int blk, ch;
|
int blk, ch, cpl_start;
|
||||||
int av_uninit(cpl_start);
|
|
||||||
|
|
||||||
if (s->cutoff) {
|
if (s->cutoff) {
|
||||||
/* calculate bandwidth based on user-specified cutoff frequency */
|
/* calculate bandwidth based on user-specified cutoff frequency */
|
||||||
|
@ -338,7 +338,7 @@ static void compute_rematrixing_strategy(AC3EncodeContext *s)
|
|||||||
{
|
{
|
||||||
int nb_coefs;
|
int nb_coefs;
|
||||||
int blk, bnd;
|
int blk, bnd;
|
||||||
AC3Block *block, *av_uninit(block0);
|
AC3Block *block, *block0;
|
||||||
|
|
||||||
if (s->channel_mode != AC3_CHMODE_STEREO)
|
if (s->channel_mode != AC3_CHMODE_STEREO)
|
||||||
return;
|
return;
|
||||||
|
@ -1784,7 +1784,7 @@ typedef struct AVCodecContext {
|
|||||||
#define FF_IDCT_SIMPLE 2
|
#define FF_IDCT_SIMPLE 2
|
||||||
#define FF_IDCT_SIMPLEMMX 3
|
#define FF_IDCT_SIMPLEMMX 3
|
||||||
#define FF_IDCT_LIBMPEG2MMX 4
|
#define FF_IDCT_LIBMPEG2MMX 4
|
||||||
#define FF_IDCT_PS2 5
|
#define FF_IDCT_MMI 5
|
||||||
#define FF_IDCT_ARM 7
|
#define FF_IDCT_ARM 7
|
||||||
#define FF_IDCT_ALTIVEC 8
|
#define FF_IDCT_ALTIVEC 8
|
||||||
#define FF_IDCT_SH4 9
|
#define FF_IDCT_SH4 9
|
||||||
|
@ -66,7 +66,7 @@ static av_cold int tgv_decode_init(AVCodecContext *avctx){
|
|||||||
*/
|
*/
|
||||||
static int unpack(const uint8_t *src, const uint8_t *src_end, unsigned char *dst, int width, int height) {
|
static int unpack(const uint8_t *src, const uint8_t *src_end, unsigned char *dst, int width, int height) {
|
||||||
unsigned char *dst_end = dst + width*height;
|
unsigned char *dst_end = dst + width*height;
|
||||||
int size, size1, size2, av_uninit(offset), run;
|
int size, size1, size2, offset, run;
|
||||||
unsigned char *dst_start = dst;
|
unsigned char *dst_start = dst;
|
||||||
|
|
||||||
if (src[0] & 0x01)
|
if (src[0] & 0x01)
|
||||||
|
@ -288,7 +288,7 @@ static int decode_subframe_fixed(FLACContext *s, int channel, int pred_order)
|
|||||||
{
|
{
|
||||||
const int blocksize = s->blocksize;
|
const int blocksize = s->blocksize;
|
||||||
int32_t *decoded = s->decoded[channel];
|
int32_t *decoded = s->decoded[channel];
|
||||||
int av_uninit(a), av_uninit(b), av_uninit(c), av_uninit(d), i;
|
int a, b, c, d, i;
|
||||||
|
|
||||||
/* warm up samples */
|
/* warm up samples */
|
||||||
for (i = 0; i < pred_order; i++) {
|
for (i = 0; i < pred_order; i++) {
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
OBJS-$(HAVE_MMI) += ps2/dsputil_mmi.o \
|
OBJS-$(HAVE_MMI) += mips/dsputil_mmi.o \
|
||||||
ps2/idct_mmi.o \
|
mips/idct_mmi.o \
|
||||||
ps2/mpegvideo_mmi.o \
|
mips/mpegvideo_mmi.o \
|
||||||
|
@ -25,10 +25,6 @@
|
|||||||
#include "libavcodec/dsputil.h"
|
#include "libavcodec/dsputil.h"
|
||||||
#include "mmi.h"
|
#include "mmi.h"
|
||||||
|
|
||||||
void ff_mmi_idct_put(uint8_t *dest, int line_size, DCTELEM *block);
|
|
||||||
void ff_mmi_idct_add(uint8_t *dest, int line_size, DCTELEM *block);
|
|
||||||
void ff_mmi_idct(DCTELEM *block);
|
|
||||||
|
|
||||||
static void clear_blocks_mmi(DCTELEM * blocks)
|
static void clear_blocks_mmi(DCTELEM * blocks)
|
||||||
{
|
{
|
||||||
__asm__ volatile(
|
__asm__ volatile(
|
||||||
@ -157,7 +153,7 @@ void dsputil_init_mmi(DSPContext* c, AVCodecContext *avctx)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (avctx->bits_per_raw_sample <= 8 &&
|
if (avctx->bits_per_raw_sample <= 8 &&
|
||||||
(idct_algo==FF_IDCT_AUTO || idct_algo==FF_IDCT_PS2)) {
|
(idct_algo == FF_IDCT_AUTO || idct_algo == FF_IDCT_MMI)) {
|
||||||
c->idct_put= ff_mmi_idct_put;
|
c->idct_put= ff_mmi_idct_put;
|
||||||
c->idct_add= ff_mmi_idct_add;
|
c->idct_add= ff_mmi_idct_add;
|
||||||
c->idct = ff_mmi_idct;
|
c->idct = ff_mmi_idct;
|
@ -18,8 +18,16 @@
|
|||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef AVCODEC_PS2_MMI_H
|
#ifndef AVCODEC_MIPS_MMI_H
|
||||||
#define AVCODEC_PS2_MMI_H
|
#define AVCODEC_MIPS_MMI_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include "libavcodec/dsputil.h"
|
||||||
|
|
||||||
|
void ff_mmi_idct_put(uint8_t *dest, int line_size, DCTELEM *block);
|
||||||
|
void ff_mmi_idct_add(uint8_t *dest, int line_size, DCTELEM *block);
|
||||||
|
void ff_mmi_idct(DCTELEM *block);
|
||||||
|
|
||||||
#define align16 __attribute__ ((aligned (16)))
|
#define align16 __attribute__ ((aligned (16)))
|
||||||
|
|
||||||
@ -168,4 +176,4 @@
|
|||||||
#define pextlb(rs, rt, rd) \
|
#define pextlb(rs, rt, rd) \
|
||||||
__asm__ volatile ("pextlb " #rd ", " #rs ", " #rt )
|
__asm__ volatile ("pextlb " #rd ", " #rs ", " #rt )
|
||||||
|
|
||||||
#endif /* AVCODEC_PS2_MMI_H */
|
#endif /* AVCODEC_MIPS_MMI_H */
|
@ -134,8 +134,8 @@ static int msrle_decode_8_16_24_32(AVCodecContext *avctx, AVPicture *pic, int de
|
|||||||
uint8_t *output, *output_end;
|
uint8_t *output, *output_end;
|
||||||
const uint8_t* src = data;
|
const uint8_t* src = data;
|
||||||
int p1, p2, line=avctx->height - 1, pos=0, i;
|
int p1, p2, line=avctx->height - 1, pos=0, i;
|
||||||
uint16_t av_uninit(pix16);
|
uint16_t pix16;
|
||||||
uint32_t av_uninit(pix32);
|
uint32_t pix32;
|
||||||
unsigned int width= FFABS(pic->linesize[0]) / (depth >> 3);
|
unsigned int width= FFABS(pic->linesize[0]) / (depth >> 3);
|
||||||
|
|
||||||
output = pic->data[0] + (avctx->height - 1) * pic->linesize[0];
|
output = pic->data[0] + (avctx->height - 1) * pic->linesize[0];
|
||||||
|
@ -219,7 +219,7 @@ static const AVOption options[]={
|
|||||||
{"simple", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_SIMPLE }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
{"simple", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_SIMPLE }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||||
{"simplemmx", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_SIMPLEMMX }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
{"simplemmx", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_SIMPLEMMX }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||||
{"libmpeg2mmx", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_LIBMPEG2MMX }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
{"libmpeg2mmx", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_LIBMPEG2MMX }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||||
{"ps2", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_PS2 }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
{"mmi", NULL, 0, AV_OPT_TYPE_CONST, { .dbl = FF_IDCT_MMI }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||||
{"arm", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_ARM }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
{"arm", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_ARM }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||||
{"altivec", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_ALTIVEC }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
{"altivec", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_ALTIVEC }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||||
{"sh4", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_SH4 }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
{"sh4", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_IDCT_SH4 }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||||
|
@ -126,7 +126,7 @@ static void qtrle_encode_line(QtrleEncContext *s, AVFrame *p, int line, uint8_t
|
|||||||
unsigned int skipcount;
|
unsigned int skipcount;
|
||||||
/* This will be the number of consecutive equal pixels in the current
|
/* This will be the number of consecutive equal pixels in the current
|
||||||
* frame, starting from the ith one also */
|
* frame, starting from the ith one also */
|
||||||
unsigned int av_uninit(repeatcount);
|
unsigned int repeatcount;
|
||||||
|
|
||||||
/* The cost of the three different possibilities */
|
/* The cost of the three different possibilities */
|
||||||
int total_bulk_cost;
|
int total_bulk_cost;
|
||||||
|
@ -120,7 +120,7 @@ static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque)
|
|||||||
GradFunContext *gf = ctx->priv;
|
GradFunContext *gf = ctx->priv;
|
||||||
float thresh = 1.2;
|
float thresh = 1.2;
|
||||||
int radius = 16;
|
int radius = 16;
|
||||||
av_unused int cpu_flags = av_get_cpu_flags();
|
int cpu_flags = av_get_cpu_flags();
|
||||||
|
|
||||||
if (args)
|
if (args)
|
||||||
sscanf(args, "%f:%d", &thresh, &radius);
|
sscanf(args, "%f:%d", &thresh, &radius);
|
||||||
|
@ -370,7 +370,7 @@ static int query_formats(AVFilterContext *ctx)
|
|||||||
static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque)
|
static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque)
|
||||||
{
|
{
|
||||||
YADIFContext *yadif = ctx->priv;
|
YADIFContext *yadif = ctx->priv;
|
||||||
av_unused int cpu_flags = av_get_cpu_flags();
|
int cpu_flags = av_get_cpu_flags();
|
||||||
|
|
||||||
yadif->mode = 0;
|
yadif->mode = 0;
|
||||||
yadif->parity = -1;
|
yadif->parity = -1;
|
||||||
|
@ -271,12 +271,10 @@ void av_register_all(void)
|
|||||||
REGISTER_PROTOCOL (MD5, md5);
|
REGISTER_PROTOCOL (MD5, md5);
|
||||||
REGISTER_PROTOCOL (PIPE, pipe);
|
REGISTER_PROTOCOL (PIPE, pipe);
|
||||||
REGISTER_PROTOCOL (RTMP, rtmp);
|
REGISTER_PROTOCOL (RTMP, rtmp);
|
||||||
#if CONFIG_LIBRTMP
|
REGISTER_PROTOCOL (RTMPE, rtmpe);
|
||||||
REGISTER_PROTOCOL (RTMP, rtmpt);
|
REGISTER_PROTOCOL (RTMPS, rtmps);
|
||||||
REGISTER_PROTOCOL (RTMP, rtmpe);
|
REGISTER_PROTOCOL (RTMPT, rtmpt);
|
||||||
REGISTER_PROTOCOL (RTMP, rtmpte);
|
REGISTER_PROTOCOL (RTMPTE, rtmpte);
|
||||||
REGISTER_PROTOCOL (RTMP, rtmps);
|
|
||||||
#endif
|
|
||||||
REGISTER_PROTOCOL (RTP, rtp);
|
REGISTER_PROTOCOL (RTP, rtp);
|
||||||
REGISTER_PROTOCOL (TCP, tcp);
|
REGISTER_PROTOCOL (TCP, tcp);
|
||||||
REGISTER_PROTOCOL (TLS, tls);
|
REGISTER_PROTOCOL (TLS, tls);
|
||||||
|
@ -361,8 +361,8 @@ static int asf_read_stream_properties(AVFormatContext *s, int64_t size)
|
|||||||
/* This code assumes that extradata contains only palette */
|
/* This code assumes that extradata contains only palette */
|
||||||
/* This is true for all paletted codecs implemented in libavcodec */
|
/* This is true for all paletted codecs implemented in libavcodec */
|
||||||
if (st->codec->extradata_size && (st->codec->bits_per_coded_sample <= 8)) {
|
if (st->codec->extradata_size && (st->codec->bits_per_coded_sample <= 8)) {
|
||||||
int av_unused i;
|
|
||||||
#if HAVE_BIGENDIAN
|
#if HAVE_BIGENDIAN
|
||||||
|
int i;
|
||||||
for (i = 0; i < FFMIN(st->codec->extradata_size, AVPALETTE_SIZE)/4; i++)
|
for (i = 0; i < FFMIN(st->codec->extradata_size, AVPALETTE_SIZE)/4; i++)
|
||||||
asf_st->palette[i] = av_bswap32(((uint32_t*)st->codec->extradata)[i]);
|
asf_st->palette[i] = av_bswap32(((uint32_t*)st->codec->extradata)[i]);
|
||||||
#else
|
#else
|
||||||
|
@ -967,7 +967,7 @@ static int matroska_decode_buffer(uint8_t** buf, int* buf_size,
|
|||||||
uint8_t* data = *buf;
|
uint8_t* data = *buf;
|
||||||
int isize = *buf_size;
|
int isize = *buf_size;
|
||||||
uint8_t* pkt_data = NULL;
|
uint8_t* pkt_data = NULL;
|
||||||
uint8_t* newpktdata;
|
uint8_t av_unused *newpktdata;
|
||||||
int pkt_size = isize;
|
int pkt_size = isize;
|
||||||
int result = 0;
|
int result = 0;
|
||||||
int olen;
|
int olen;
|
||||||
|
@ -362,6 +362,15 @@ static int mov_write_ms_tag(AVIOContext *pb, MOVTrack *track)
|
|||||||
return update_size(pb, pos);
|
return update_size(pb, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int mov_write_wfex_tag(AVIOContext *pb, MOVTrack *track)
|
||||||
|
{
|
||||||
|
int64_t pos = avio_tell(pb);
|
||||||
|
avio_wb32(pb, 0);
|
||||||
|
ffio_wfourcc(pb, "wfex");
|
||||||
|
ff_put_wav_header(pb, track->enc);
|
||||||
|
return update_size(pb, pos);
|
||||||
|
}
|
||||||
|
|
||||||
static int mov_write_chan_tag(AVIOContext *pb, MOVTrack *track)
|
static int mov_write_chan_tag(AVIOContext *pb, MOVTrack *track)
|
||||||
{
|
{
|
||||||
uint32_t layout_tag, bitmap;
|
uint32_t layout_tag, bitmap;
|
||||||
@ -548,6 +557,8 @@ static int mov_write_audio_tag(AVIOContext *pb, MOVTrack *track)
|
|||||||
mov_write_ac3_tag(pb, track);
|
mov_write_ac3_tag(pb, track);
|
||||||
else if(track->enc->codec_id == CODEC_ID_ALAC)
|
else if(track->enc->codec_id == CODEC_ID_ALAC)
|
||||||
mov_write_extradata_tag(pb, track);
|
mov_write_extradata_tag(pb, track);
|
||||||
|
else if (track->enc->codec_id == CODEC_ID_WMAPRO)
|
||||||
|
mov_write_wfex_tag(pb, track);
|
||||||
else if (track->vos_len > 0)
|
else if (track->vos_len > 0)
|
||||||
mov_write_glbl_tag(pb, track);
|
mov_write_glbl_tag(pb, track);
|
||||||
|
|
||||||
@ -797,9 +808,13 @@ static int mov_find_codec_tag(AVFormatContext *s, MOVTrack *track)
|
|||||||
{
|
{
|
||||||
int tag = track->enc->codec_tag;
|
int tag = track->enc->codec_tag;
|
||||||
|
|
||||||
if (track->mode == MODE_MP4 || track->mode == MODE_PSP || track->mode == MODE_ISM)
|
if (track->mode == MODE_MP4 || track->mode == MODE_PSP)
|
||||||
tag = mp4_get_codec_tag(s, track);
|
tag = mp4_get_codec_tag(s, track);
|
||||||
else if (track->mode == MODE_IPOD)
|
else if (track->mode == MODE_ISM) {
|
||||||
|
tag = mp4_get_codec_tag(s, track);
|
||||||
|
if (!tag && track->enc->codec_id == CODEC_ID_WMAPRO)
|
||||||
|
tag = MKTAG('w', 'm', 'a', ' ');
|
||||||
|
} else if (track->mode == MODE_IPOD)
|
||||||
tag = ipod_get_codec_tag(s, track);
|
tag = ipod_get_codec_tag(s, track);
|
||||||
else if (track->mode & MODE_3GP)
|
else if (track->mode & MODE_3GP)
|
||||||
tag = ff_codec_get_tag(codec_3gp_tags, track->enc->codec_id);
|
tag = ff_codec_get_tag(codec_3gp_tags, track->enc->codec_id);
|
||||||
|
@ -78,6 +78,8 @@ typedef struct MpegTSWrite {
|
|||||||
int pmt_start_pid;
|
int pmt_start_pid;
|
||||||
int start_pid;
|
int start_pid;
|
||||||
int m2ts_mode;
|
int m2ts_mode;
|
||||||
|
|
||||||
|
int reemit_pat_pmt;
|
||||||
} MpegTSWrite;
|
} MpegTSWrite;
|
||||||
|
|
||||||
/* a PES packet header is generated every DEFAULT_PES_HEADER_FREQ packets */
|
/* a PES packet header is generated every DEFAULT_PES_HEADER_FREQ packets */
|
||||||
@ -101,6 +103,8 @@ static const AVOption options[] = {
|
|||||||
{ "muxrate", NULL, offsetof(MpegTSWrite, mux_rate), AV_OPT_TYPE_INT, {1}, 0, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM},
|
{ "muxrate", NULL, offsetof(MpegTSWrite, mux_rate), AV_OPT_TYPE_INT, {1}, 0, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM},
|
||||||
{ "pes_payload_size", "Minimum PES packet payload in bytes",
|
{ "pes_payload_size", "Minimum PES packet payload in bytes",
|
||||||
offsetof(MpegTSWrite, pes_payload_size), AV_OPT_TYPE_INT, {DEFAULT_PES_PAYLOAD_SIZE}, 0, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM},
|
offsetof(MpegTSWrite, pes_payload_size), AV_OPT_TYPE_INT, {DEFAULT_PES_PAYLOAD_SIZE}, 0, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM},
|
||||||
|
{ "resend_headers", "Reemit PAT/PMT before writing the next packet",
|
||||||
|
offsetof(MpegTSWrite, reemit_pat_pmt), AV_OPT_TYPE_INT, {0}, 0, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM},
|
||||||
{ NULL },
|
{ NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -978,6 +982,12 @@ static int mpegts_write_packet(AVFormatContext *s, AVPacket *pkt)
|
|||||||
const uint64_t delay = av_rescale(s->max_delay, 90000, AV_TIME_BASE)*2;
|
const uint64_t delay = av_rescale(s->max_delay, 90000, AV_TIME_BASE)*2;
|
||||||
int64_t dts = AV_NOPTS_VALUE, pts = AV_NOPTS_VALUE;
|
int64_t dts = AV_NOPTS_VALUE, pts = AV_NOPTS_VALUE;
|
||||||
|
|
||||||
|
if (ts->reemit_pat_pmt) {
|
||||||
|
ts->pat_packet_count = ts->pat_packet_period - 1;
|
||||||
|
ts->sdt_packet_count = ts->sdt_packet_period - 1;
|
||||||
|
ts->reemit_pat_pmt = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (pkt->pts != AV_NOPTS_VALUE)
|
if (pkt->pts != AV_NOPTS_VALUE)
|
||||||
pts = pkt->pts + delay;
|
pts = pkt->pts + delay;
|
||||||
if (pkt->dts != AV_NOPTS_VALUE)
|
if (pkt->dts != AV_NOPTS_VALUE)
|
||||||
|
@ -272,7 +272,7 @@ static int nsv_parse_NSVf_header(AVFormatContext *s)
|
|||||||
{
|
{
|
||||||
NSVContext *nsv = s->priv_data;
|
NSVContext *nsv = s->priv_data;
|
||||||
AVIOContext *pb = s->pb;
|
AVIOContext *pb = s->pb;
|
||||||
unsigned int av_unused file_size;
|
unsigned int file_size;
|
||||||
unsigned int size;
|
unsigned int size;
|
||||||
int64_t duration;
|
int64_t duration;
|
||||||
int strings_size;
|
int strings_size;
|
||||||
@ -565,7 +565,6 @@ static int nsv_read_chunk(AVFormatContext *s, int fill_header)
|
|||||||
uint32_t vsize;
|
uint32_t vsize;
|
||||||
uint16_t asize;
|
uint16_t asize;
|
||||||
uint16_t auxsize;
|
uint16_t auxsize;
|
||||||
uint32_t av_unused auxtag;
|
|
||||||
|
|
||||||
av_dlog(s, "%s(%d)\n", __FUNCTION__, fill_header);
|
av_dlog(s, "%s(%d)\n", __FUNCTION__, fill_header);
|
||||||
|
|
||||||
@ -595,6 +594,7 @@ null_chunk_retry:
|
|||||||
av_dlog(s, "NSV CHUNK %d aux, %u bytes video, %d bytes audio\n", auxcount, vsize, asize);
|
av_dlog(s, "NSV CHUNK %d aux, %u bytes video, %d bytes audio\n", auxcount, vsize, asize);
|
||||||
/* skip aux stuff */
|
/* skip aux stuff */
|
||||||
for (i = 0; i < auxcount; i++) {
|
for (i = 0; i < auxcount; i++) {
|
||||||
|
uint32_t auxtag;
|
||||||
auxsize = avio_rl16(pb);
|
auxsize = avio_rl16(pb);
|
||||||
auxtag = avio_rl32(pb);
|
auxtag = avio_rl32(pb);
|
||||||
av_dlog(s, "NSV aux data: '%c%c%c%c', %d bytes\n",
|
av_dlog(s, "NSV aux data: '%c%c%c%c', %d bytes\n",
|
||||||
|
@ -113,7 +113,7 @@ static int sdp_parse_fmtp_config_h264(AVStream * stream,
|
|||||||
h264_data->level_idc = level_idc;
|
h264_data->level_idc = level_idc;
|
||||||
}
|
}
|
||||||
} else if (!strcmp(attr, "sprop-parameter-sets")) {
|
} else if (!strcmp(attr, "sprop-parameter-sets")) {
|
||||||
uint8_t start_sequence[]= { 0, 0, 1 };
|
uint8_t start_sequence[] = { 0, 0, 0, 1 };
|
||||||
codec->extradata_size= 0;
|
codec->extradata_size= 0;
|
||||||
codec->extradata= NULL;
|
codec->extradata= NULL;
|
||||||
|
|
||||||
@ -176,7 +176,7 @@ static int h264_handle_packet(AVFormatContext *ctx,
|
|||||||
uint8_t nal = buf[0];
|
uint8_t nal = buf[0];
|
||||||
uint8_t type = (nal & 0x1f);
|
uint8_t type = (nal & 0x1f);
|
||||||
int result= 0;
|
int result= 0;
|
||||||
uint8_t start_sequence[]= {0, 0, 1};
|
uint8_t start_sequence[] = { 0, 0, 0, 1 };
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
assert(data);
|
assert(data);
|
||||||
|
@ -181,7 +181,7 @@ static void sha256_transform(uint32_t *state, const uint8_t buffer[64])
|
|||||||
{
|
{
|
||||||
unsigned int i, a, b, c, d, e, f, g, h;
|
unsigned int i, a, b, c, d, e, f, g, h;
|
||||||
uint32_t block[64];
|
uint32_t block[64];
|
||||||
uint32_t T1, av_unused(T2);
|
uint32_t T1;
|
||||||
|
|
||||||
a = state[0];
|
a = state[0];
|
||||||
b = state[1];
|
b = state[1];
|
||||||
@ -193,6 +193,7 @@ static void sha256_transform(uint32_t *state, const uint8_t buffer[64])
|
|||||||
h = state[7];
|
h = state[7];
|
||||||
#if CONFIG_SMALL
|
#if CONFIG_SMALL
|
||||||
for (i = 0; i < 64; i++) {
|
for (i = 0; i < 64; i++) {
|
||||||
|
uint32_t T2;
|
||||||
if (i < 16)
|
if (i < 16)
|
||||||
T1 = blk0(i);
|
T1 = blk0(i);
|
||||||
else
|
else
|
||||||
|
@ -298,129 +298,6 @@ static void yuv2nv12cX_c(SwsContext *c, const int16_t *chrFilter, int chrFilterS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define output_pixel(pos, val) \
|
|
||||||
if (target == PIX_FMT_GRAY16BE) { \
|
|
||||||
AV_WB16(pos, val); \
|
|
||||||
} else { \
|
|
||||||
AV_WL16(pos, val); \
|
|
||||||
}
|
|
||||||
|
|
||||||
static av_always_inline void
|
|
||||||
yuv2gray16_X_c_template(SwsContext *c, const int16_t *lumFilter,
|
|
||||||
const int32_t **lumSrc, int lumFilterSize,
|
|
||||||
const int16_t *chrFilter, const int32_t **chrUSrc,
|
|
||||||
const int32_t **chrVSrc, int chrFilterSize,
|
|
||||||
const int32_t **alpSrc, uint16_t *dest, int dstW,
|
|
||||||
int y, enum PixelFormat target)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < (dstW >> 1); i++) {
|
|
||||||
int j;
|
|
||||||
int Y1 = (1 << 14) - 0x40000000;
|
|
||||||
int Y2 = (1 << 14) - 0x40000000;
|
|
||||||
|
|
||||||
for (j = 0; j < lumFilterSize; j++) {
|
|
||||||
Y1 += lumSrc[j][i * 2] * lumFilter[j];
|
|
||||||
Y2 += lumSrc[j][i * 2 + 1] * lumFilter[j];
|
|
||||||
}
|
|
||||||
Y1 >>= 15;
|
|
||||||
Y2 >>= 15;
|
|
||||||
Y1 = av_clip_int16(Y1);
|
|
||||||
Y2 = av_clip_int16(Y2);
|
|
||||||
output_pixel(&dest[i * 2 + 0], 0x8000 + Y1);
|
|
||||||
output_pixel(&dest[i * 2 + 1], 0x8000 + Y2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static av_always_inline void
|
|
||||||
yuv2gray16_2_c_template(SwsContext *c, const int32_t *buf[2],
|
|
||||||
const int32_t *ubuf[2], const int32_t *vbuf[2],
|
|
||||||
const int32_t *abuf[2], uint16_t *dest, int dstW,
|
|
||||||
int yalpha, int uvalpha, int y,
|
|
||||||
enum PixelFormat target)
|
|
||||||
{
|
|
||||||
int yalpha1 = 4095 - yalpha;
|
|
||||||
int i;
|
|
||||||
const int32_t *buf0 = buf[0], *buf1 = buf[1];
|
|
||||||
|
|
||||||
for (i = 0; i < (dstW >> 1); i++) {
|
|
||||||
int Y1 = (buf0[i * 2 ] * yalpha1 + buf1[i * 2 ] * yalpha) >> 15;
|
|
||||||
int Y2 = (buf0[i * 2 + 1] * yalpha1 + buf1[i * 2 + 1] * yalpha) >> 15;
|
|
||||||
|
|
||||||
output_pixel(&dest[i * 2 + 0], Y1);
|
|
||||||
output_pixel(&dest[i * 2 + 1], Y2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static av_always_inline void
|
|
||||||
yuv2gray16_1_c_template(SwsContext *c, const int32_t *buf0,
|
|
||||||
const int32_t *ubuf[2], const int32_t *vbuf[2],
|
|
||||||
const int32_t *abuf0, uint16_t *dest, int dstW,
|
|
||||||
int uvalpha, int y, enum PixelFormat target)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < (dstW >> 1); i++) {
|
|
||||||
int Y1 = (buf0[i * 2 ]+4)>>3;
|
|
||||||
int Y2 = (buf0[i * 2 + 1]+4)>>3;
|
|
||||||
|
|
||||||
output_pixel(&dest[i * 2 + 0], Y1);
|
|
||||||
output_pixel(&dest[i * 2 + 1], Y2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef output_pixel
|
|
||||||
|
|
||||||
#define YUV2PACKED16WRAPPER(name, base, ext, fmt) \
|
|
||||||
static void name ## ext ## _X_c(SwsContext *c, const int16_t *lumFilter, \
|
|
||||||
const int16_t **_lumSrc, int lumFilterSize, \
|
|
||||||
const int16_t *chrFilter, const int16_t **_chrUSrc, \
|
|
||||||
const int16_t **_chrVSrc, int chrFilterSize, \
|
|
||||||
const int16_t **_alpSrc, uint8_t *_dest, int dstW, \
|
|
||||||
int y) \
|
|
||||||
{ \
|
|
||||||
const int32_t **lumSrc = (const int32_t **) _lumSrc, \
|
|
||||||
**chrUSrc = (const int32_t **) _chrUSrc, \
|
|
||||||
**chrVSrc = (const int32_t **) _chrVSrc, \
|
|
||||||
**alpSrc = (const int32_t **) _alpSrc; \
|
|
||||||
uint16_t *dest = (uint16_t *) _dest; \
|
|
||||||
name ## base ## _X_c_template(c, lumFilter, lumSrc, lumFilterSize, \
|
|
||||||
chrFilter, chrUSrc, chrVSrc, chrFilterSize, \
|
|
||||||
alpSrc, dest, dstW, y, fmt); \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
static void name ## ext ## _2_c(SwsContext *c, const int16_t *_buf[2], \
|
|
||||||
const int16_t *_ubuf[2], const int16_t *_vbuf[2], \
|
|
||||||
const int16_t *_abuf[2], uint8_t *_dest, int dstW, \
|
|
||||||
int yalpha, int uvalpha, int y) \
|
|
||||||
{ \
|
|
||||||
const int32_t **buf = (const int32_t **) _buf, \
|
|
||||||
**ubuf = (const int32_t **) _ubuf, \
|
|
||||||
**vbuf = (const int32_t **) _vbuf, \
|
|
||||||
**abuf = (const int32_t **) _abuf; \
|
|
||||||
uint16_t *dest = (uint16_t *) _dest; \
|
|
||||||
name ## base ## _2_c_template(c, buf, ubuf, vbuf, abuf, \
|
|
||||||
dest, dstW, yalpha, uvalpha, y, fmt); \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
static void name ## ext ## _1_c(SwsContext *c, const int16_t *_buf0, \
|
|
||||||
const int16_t *_ubuf[2], const int16_t *_vbuf[2], \
|
|
||||||
const int16_t *_abuf0, uint8_t *_dest, int dstW, \
|
|
||||||
int uvalpha, int y) \
|
|
||||||
{ \
|
|
||||||
const int32_t *buf0 = (const int32_t *) _buf0, \
|
|
||||||
**ubuf = (const int32_t **) _ubuf, \
|
|
||||||
**vbuf = (const int32_t **) _vbuf, \
|
|
||||||
*abuf0 = (const int32_t *) _abuf0; \
|
|
||||||
uint16_t *dest = (uint16_t *) _dest; \
|
|
||||||
name ## base ## _1_c_template(c, buf0, ubuf, vbuf, abuf0, dest, \
|
|
||||||
dstW, uvalpha, y, fmt); \
|
|
||||||
}
|
|
||||||
|
|
||||||
YUV2PACKED16WRAPPER(yuv2gray16,, LE, PIX_FMT_GRAY16LE)
|
|
||||||
YUV2PACKED16WRAPPER(yuv2gray16,, BE, PIX_FMT_GRAY16BE)
|
|
||||||
|
|
||||||
#define output_pixel(pos, acc) \
|
#define output_pixel(pos, acc) \
|
||||||
if (target == PIX_FMT_MONOBLACK) { \
|
if (target == PIX_FMT_MONOBLACK) { \
|
||||||
pos = acc; \
|
pos = acc; \
|
||||||
@ -632,20 +509,20 @@ yuv2422_1_c_template(SwsContext *c, const int16_t *buf0,
|
|||||||
const int16_t *abuf0, uint8_t *dest, int dstW,
|
const int16_t *abuf0, uint8_t *dest, int dstW,
|
||||||
int uvalpha, int y, enum PixelFormat target)
|
int uvalpha, int y, enum PixelFormat target)
|
||||||
{
|
{
|
||||||
const int16_t *ubuf0 = ubuf[0], *ubuf1 = ubuf[1],
|
const int16_t *ubuf0 = ubuf[0], *vbuf0 = vbuf[0];
|
||||||
*vbuf0 = vbuf[0], *vbuf1 = vbuf[1];
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (uvalpha < 2048) {
|
if (uvalpha < 2048) {
|
||||||
for (i = 0; i < (dstW >> 1); i++) {
|
for (i = 0; i < (dstW >> 1); i++) {
|
||||||
int Y1 = buf0[i * 2] >> 7;
|
int Y1 = buf0[i * 2] >> 7;
|
||||||
int Y2 = buf0[i * 2 + 1] >> 7;
|
int Y2 = buf0[i * 2 + 1] >> 7;
|
||||||
int U = ubuf1[i] >> 7;
|
int U = ubuf0[i] >> 7;
|
||||||
int V = vbuf1[i] >> 7;
|
int V = vbuf0[i] >> 7;
|
||||||
|
|
||||||
output_pixels(i * 4, Y1, U, Y2, V);
|
output_pixels(i * 4, Y1, U, Y2, V);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
const int16_t *ubuf1 = ubuf[1], *vbuf1 = vbuf[1];
|
||||||
for (i = 0; i < (dstW >> 1); i++) {
|
for (i = 0; i < (dstW >> 1); i++) {
|
||||||
int Y1 = buf0[i * 2] >> 7;
|
int Y1 = buf0[i * 2] >> 7;
|
||||||
int Y2 = buf0[i * 2 + 1] >> 7;
|
int Y2 = buf0[i * 2 + 1] >> 7;
|
||||||
@ -778,8 +655,7 @@ yuv2rgb48_1_c_template(SwsContext *c, const int32_t *buf0,
|
|||||||
const int32_t *abuf0, uint16_t *dest, int dstW,
|
const int32_t *abuf0, uint16_t *dest, int dstW,
|
||||||
int uvalpha, int y, enum PixelFormat target)
|
int uvalpha, int y, enum PixelFormat target)
|
||||||
{
|
{
|
||||||
const int32_t *ubuf0 = ubuf[0], *ubuf1 = ubuf[1],
|
const int32_t *ubuf0 = ubuf[0], *vbuf0 = vbuf[0];
|
||||||
*vbuf0 = vbuf[0], *vbuf1 = vbuf[1];
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (uvalpha < 2048) {
|
if (uvalpha < 2048) {
|
||||||
@ -810,6 +686,7 @@ yuv2rgb48_1_c_template(SwsContext *c, const int32_t *buf0,
|
|||||||
dest += 6;
|
dest += 6;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
const int32_t *ubuf1 = ubuf[1], *vbuf1 = vbuf[1];
|
||||||
for (i = 0; i < (dstW >> 1); i++) {
|
for (i = 0; i < (dstW >> 1); i++) {
|
||||||
int Y1 = (buf0[i * 2] ) >> 2;
|
int Y1 = (buf0[i * 2] ) >> 2;
|
||||||
int Y2 = (buf0[i * 2 + 1]) >> 2;
|
int Y2 = (buf0[i * 2 + 1]) >> 2;
|
||||||
@ -843,6 +720,52 @@ yuv2rgb48_1_c_template(SwsContext *c, const int32_t *buf0,
|
|||||||
#undef r_b
|
#undef r_b
|
||||||
#undef b_r
|
#undef b_r
|
||||||
|
|
||||||
|
#define YUV2PACKED16WRAPPER(name, base, ext, fmt) \
|
||||||
|
static void name ## ext ## _X_c(SwsContext *c, const int16_t *lumFilter, \
|
||||||
|
const int16_t **_lumSrc, int lumFilterSize, \
|
||||||
|
const int16_t *chrFilter, const int16_t **_chrUSrc, \
|
||||||
|
const int16_t **_chrVSrc, int chrFilterSize, \
|
||||||
|
const int16_t **_alpSrc, uint8_t *_dest, int dstW, \
|
||||||
|
int y) \
|
||||||
|
{ \
|
||||||
|
const int32_t **lumSrc = (const int32_t **) _lumSrc, \
|
||||||
|
**chrUSrc = (const int32_t **) _chrUSrc, \
|
||||||
|
**chrVSrc = (const int32_t **) _chrVSrc, \
|
||||||
|
**alpSrc = (const int32_t **) _alpSrc; \
|
||||||
|
uint16_t *dest = (uint16_t *) _dest; \
|
||||||
|
name ## base ## _X_c_template(c, lumFilter, lumSrc, lumFilterSize, \
|
||||||
|
chrFilter, chrUSrc, chrVSrc, chrFilterSize, \
|
||||||
|
alpSrc, dest, dstW, y, fmt); \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
static void name ## ext ## _2_c(SwsContext *c, const int16_t *_buf[2], \
|
||||||
|
const int16_t *_ubuf[2], const int16_t *_vbuf[2], \
|
||||||
|
const int16_t *_abuf[2], uint8_t *_dest, int dstW, \
|
||||||
|
int yalpha, int uvalpha, int y) \
|
||||||
|
{ \
|
||||||
|
const int32_t **buf = (const int32_t **) _buf, \
|
||||||
|
**ubuf = (const int32_t **) _ubuf, \
|
||||||
|
**vbuf = (const int32_t **) _vbuf, \
|
||||||
|
**abuf = (const int32_t **) _abuf; \
|
||||||
|
uint16_t *dest = (uint16_t *) _dest; \
|
||||||
|
name ## base ## _2_c_template(c, buf, ubuf, vbuf, abuf, \
|
||||||
|
dest, dstW, yalpha, uvalpha, y, fmt); \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
static void name ## ext ## _1_c(SwsContext *c, const int16_t *_buf0, \
|
||||||
|
const int16_t *_ubuf[2], const int16_t *_vbuf[2], \
|
||||||
|
const int16_t *_abuf0, uint8_t *_dest, int dstW, \
|
||||||
|
int uvalpha, int y) \
|
||||||
|
{ \
|
||||||
|
const int32_t *buf0 = (const int32_t *) _buf0, \
|
||||||
|
**ubuf = (const int32_t **) _ubuf, \
|
||||||
|
**vbuf = (const int32_t **) _vbuf, \
|
||||||
|
*abuf0 = (const int32_t *) _abuf0; \
|
||||||
|
uint16_t *dest = (uint16_t *) _dest; \
|
||||||
|
name ## base ## _1_c_template(c, buf0, ubuf, vbuf, abuf0, dest, \
|
||||||
|
dstW, uvalpha, y, fmt); \
|
||||||
|
}
|
||||||
|
|
||||||
YUV2PACKED16WRAPPER(yuv2, rgb48, rgb48be, PIX_FMT_RGB48BE)
|
YUV2PACKED16WRAPPER(yuv2, rgb48, rgb48be, PIX_FMT_RGB48BE)
|
||||||
YUV2PACKED16WRAPPER(yuv2, rgb48, rgb48le, PIX_FMT_RGB48LE)
|
YUV2PACKED16WRAPPER(yuv2, rgb48, rgb48le, PIX_FMT_RGB48LE)
|
||||||
YUV2PACKED16WRAPPER(yuv2, rgb48, bgr48be, PIX_FMT_BGR48BE)
|
YUV2PACKED16WRAPPER(yuv2, rgb48, bgr48be, PIX_FMT_BGR48BE)
|
||||||
@ -980,12 +903,11 @@ yuv2rgb_X_c_template(SwsContext *c, const int16_t *lumFilter,
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < (dstW >> 1); i++) {
|
for (i = 0; i < (dstW >> 1); i++) {
|
||||||
int j;
|
int j, A1, A2;
|
||||||
int Y1 = 1 << 18;
|
int Y1 = 1 << 18;
|
||||||
int Y2 = 1 << 18;
|
int Y2 = 1 << 18;
|
||||||
int U = 1 << 18;
|
int U = 1 << 18;
|
||||||
int V = 1 << 18;
|
int V = 1 << 18;
|
||||||
int av_unused A1, A2;
|
|
||||||
const void *r, *g, *b;
|
const void *r, *g, *b;
|
||||||
|
|
||||||
for (j = 0; j < lumFilterSize; j++) {
|
for (j = 0; j < lumFilterSize; j++) {
|
||||||
@ -1067,16 +989,15 @@ yuv2rgb_1_c_template(SwsContext *c, const int16_t *buf0,
|
|||||||
int uvalpha, int y, enum PixelFormat target,
|
int uvalpha, int y, enum PixelFormat target,
|
||||||
int hasAlpha)
|
int hasAlpha)
|
||||||
{
|
{
|
||||||
const int16_t *ubuf0 = ubuf[0], *ubuf1 = ubuf[1],
|
const int16_t *ubuf0 = ubuf[0], *vbuf0 = vbuf[0];
|
||||||
*vbuf0 = vbuf[0], *vbuf1 = vbuf[1];
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (uvalpha < 2048) {
|
if (uvalpha < 2048) {
|
||||||
for (i = 0; i < (dstW >> 1); i++) {
|
for (i = 0; i < (dstW >> 1); i++) {
|
||||||
int Y1 = buf0[i * 2] >> 7;
|
int Y1 = buf0[i * 2] >> 7;
|
||||||
int Y2 = buf0[i * 2 + 1] >> 7;
|
int Y2 = buf0[i * 2 + 1] >> 7;
|
||||||
int U = ubuf1[i] >> 7;
|
int U = ubuf0[i] >> 7;
|
||||||
int V = vbuf1[i] >> 7;
|
int V = vbuf0[i] >> 7;
|
||||||
int A1, A2;
|
int A1, A2;
|
||||||
const void *r = c->table_rV[V + YUVRGB_TABLE_HEADROOM],
|
const void *r = c->table_rV[V + YUVRGB_TABLE_HEADROOM],
|
||||||
*g = (c->table_gU[U + YUVRGB_TABLE_HEADROOM] + c->table_gV[V + YUVRGB_TABLE_HEADROOM]),
|
*g = (c->table_gU[U + YUVRGB_TABLE_HEADROOM] + c->table_gV[V + YUVRGB_TABLE_HEADROOM]),
|
||||||
@ -1091,6 +1012,7 @@ yuv2rgb_1_c_template(SwsContext *c, const int16_t *buf0,
|
|||||||
r, g, b, y, target, hasAlpha);
|
r, g, b, y, target, hasAlpha);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
const int16_t *ubuf1 = ubuf[1], *vbuf1 = vbuf[1];
|
||||||
for (i = 0; i < (dstW >> 1); i++) {
|
for (i = 0; i < (dstW >> 1); i++) {
|
||||||
int Y1 = buf0[i * 2] >> 7;
|
int Y1 = buf0[i * 2] >> 7;
|
||||||
int Y2 = buf0[i * 2 + 1] >> 7;
|
int Y2 = buf0[i * 2 + 1] >> 7;
|
||||||
@ -1180,8 +1102,7 @@ yuv2rgb_full_X_c_template(SwsContext *c, const int16_t *lumFilter,
|
|||||||
int Y = 1<<9;
|
int Y = 1<<9;
|
||||||
int U = (1<<9)-(128 << 19);
|
int U = (1<<9)-(128 << 19);
|
||||||
int V = (1<<9)-(128 << 19);
|
int V = (1<<9)-(128 << 19);
|
||||||
int av_unused A;
|
int R, G, B, A;
|
||||||
int R, G, B;
|
|
||||||
|
|
||||||
for (j = 0; j < lumFilterSize; j++) {
|
for (j = 0; j < lumFilterSize; j++) {
|
||||||
Y += lumSrc[j][i] * lumFilter[j];
|
Y += lumSrc[j][i] * lumFilter[j];
|
||||||
@ -1489,16 +1410,6 @@ void ff_sws_init_output_funcs(SwsContext *c,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
switch (dstFormat) {
|
switch (dstFormat) {
|
||||||
case PIX_FMT_GRAY16BE:
|
|
||||||
*yuv2packed1 = yuv2gray16BE_1_c;
|
|
||||||
*yuv2packed2 = yuv2gray16BE_2_c;
|
|
||||||
*yuv2packedX = yuv2gray16BE_X_c;
|
|
||||||
break;
|
|
||||||
case PIX_FMT_GRAY16LE:
|
|
||||||
*yuv2packed1 = yuv2gray16LE_1_c;
|
|
||||||
*yuv2packed2 = yuv2gray16LE_2_c;
|
|
||||||
*yuv2packedX = yuv2gray16LE_X_c;
|
|
||||||
break;
|
|
||||||
case PIX_FMT_MONOWHITE:
|
case PIX_FMT_MONOWHITE:
|
||||||
*yuv2packed1 = yuv2monowhite_1_c;
|
*yuv2packed1 = yuv2monowhite_1_c;
|
||||||
*yuv2packed2 = yuv2monowhite_2_c;
|
*yuv2packed2 = yuv2monowhite_2_c;
|
||||||
|
@ -334,7 +334,6 @@ static int swScale(SwsContext *c, const uint8_t* src[],
|
|||||||
int16_t *hChrFilter= c->hChrFilter;
|
int16_t *hChrFilter= c->hChrFilter;
|
||||||
int32_t *lumMmxFilter= c->lumMmxFilter;
|
int32_t *lumMmxFilter= c->lumMmxFilter;
|
||||||
int32_t *chrMmxFilter= c->chrMmxFilter;
|
int32_t *chrMmxFilter= c->chrMmxFilter;
|
||||||
int32_t av_unused *alpMmxFilter= c->alpMmxFilter;
|
|
||||||
const int vLumFilterSize= c->vLumFilterSize;
|
const int vLumFilterSize= c->vLumFilterSize;
|
||||||
const int vChrFilterSize= c->vChrFilterSize;
|
const int vChrFilterSize= c->vChrFilterSize;
|
||||||
const int hLumFilterSize= c->hLumFilterSize;
|
const int hLumFilterSize= c->hLumFilterSize;
|
||||||
@ -539,7 +538,7 @@ static int swScale(SwsContext *c, const uint8_t* src[],
|
|||||||
int16_t *vLumFilter= c->vLumFilter;
|
int16_t *vLumFilter= c->vLumFilter;
|
||||||
int16_t *vChrFilter= c->vChrFilter;
|
int16_t *vChrFilter= c->vChrFilter;
|
||||||
|
|
||||||
if (isPlanarYUV(dstFormat) || dstFormat==PIX_FMT_GRAY8) { //YV12 like
|
if (isPlanarYUV(dstFormat) || (isGray(dstFormat) && !isALPHA(dstFormat))) { //YV12 like
|
||||||
const int chrSkipMask= (1<<c->chrDstVSubSample)-1;
|
const int chrSkipMask= (1<<c->chrDstVSubSample)-1;
|
||||||
|
|
||||||
vLumFilter += dstY * vLumFilterSize;
|
vLumFilter += dstY * vLumFilterSize;
|
||||||
@ -594,8 +593,8 @@ static int swScale(SwsContext *c, const uint8_t* src[],
|
|||||||
} else {
|
} else {
|
||||||
assert(lumSrcPtr + vLumFilterSize - 1 < lumPixBuf + vLumBufSize*2);
|
assert(lumSrcPtr + vLumFilterSize - 1 < lumPixBuf + vLumBufSize*2);
|
||||||
assert(chrUSrcPtr + vChrFilterSize - 1 < chrUPixBuf + vChrBufSize*2);
|
assert(chrUSrcPtr + vChrFilterSize - 1 < chrUPixBuf + vChrBufSize*2);
|
||||||
if (c->yuv2packed1 && vLumFilterSize == 1 && vChrFilterSize == 2) { //unscaled RGB
|
if (c->yuv2packed1 && vLumFilterSize == 1 && vChrFilterSize <= 2) { //unscaled RGB
|
||||||
int chrAlpha = vChrFilter[2 * dstY + 1];
|
int chrAlpha = vChrFilterSize == 1 ? 0 : vChrFilter[2 * dstY + 1];
|
||||||
yuv2packed1(c, *lumSrcPtr, chrUSrcPtr, chrVSrcPtr,
|
yuv2packed1(c, *lumSrcPtr, chrUSrcPtr, chrVSrcPtr,
|
||||||
alpPixBuf ? *alpSrcPtr : NULL,
|
alpPixBuf ? *alpSrcPtr : NULL,
|
||||||
dest[0], dstW, chrAlpha, dstY);
|
dest[0], dstW, chrAlpha, dstY);
|
||||||
|
Loading…
Reference in New Issue
Block a user