mirror of
				https://github.com/nyanmisaka/ffmpeg-rockchip.git
				synced 2025-10-31 04:26:37 +08:00 
			
		
		
		
	Merge remote-tracking branch 'qatar/master'
* qatar/master: apedec: check bits <= 32. cavs: Remove unused code. oggenc: fix condition when not to flush due to keyframe granule. oggenc: add pagesize option to set preferred page size libspeexdec: set frame size in libspeex_decode_init() smacker audio: sign-extend the initial 16-bit predicted value Conflicts: libavcodec/apedec.c libavcodec/libspeexdec.c libavformat/oggenc.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
		| @@ -425,8 +425,8 @@ static inline int ape_decode_value(APEContext *ctx, APERice *rice) | ||||
|             x = range_decode_bits(ctx, 16); | ||||
|             x |= (range_decode_bits(ctx, tmpk - 16) << 16); | ||||
|         } else { | ||||
|             av_log(ctx->avctx, AV_LOG_ERROR, "too many bits\n"); | ||||
|             return -1; | ||||
|             av_log(ctx->avctx, AV_LOG_ERROR, "Too many bits: %d\n", tmpk); | ||||
|             return AVERROR_INVALIDDATA; | ||||
|         } | ||||
|         x += overflow << tmpk; | ||||
|     } else { | ||||
|   | ||||
| @@ -324,11 +324,12 @@ void ff_cavs_modify_mb_i(AVSContext *h, int *pred_mode_uv) { | ||||
|  * | ||||
|  ****************************************************************************/ | ||||
|  | ||||
| static inline void mc_dir_part(AVSContext *h,Picture *pic,int square, | ||||
|                         int chroma_height,int delta,int list,uint8_t *dest_y, | ||||
|                         uint8_t *dest_cb,uint8_t *dest_cr,int src_x_offset, | ||||
|                         int src_y_offset,qpel_mc_func *qpix_op, | ||||
|                         h264_chroma_mc_func chroma_op,cavs_vector *mv){ | ||||
| static inline void mc_dir_part(AVSContext *h,Picture *pic, | ||||
|                                int chroma_height,int delta,int list,uint8_t *dest_y, | ||||
|                                uint8_t *dest_cb,uint8_t *dest_cr,int src_x_offset, | ||||
|                                int src_y_offset,qpel_mc_func *qpix_op, | ||||
|                                h264_chroma_mc_func chroma_op,cavs_vector *mv) | ||||
| { | ||||
|     MpegEncContext * const s = &h->s; | ||||
|     const int mx= mv->x + src_x_offset*8; | ||||
|     const int my= mv->y + src_y_offset*8; | ||||
| @@ -360,9 +361,6 @@ static inline void mc_dir_part(AVSContext *h,Picture *pic,int square, | ||||
|     } | ||||
|  | ||||
|     qpix_op[luma_xy](dest_y, src_y, h->l_stride); //FIXME try variable height perhaps? | ||||
|     if(!square){ | ||||
|         qpix_op[luma_xy](dest_y + delta, src_y + delta, h->l_stride); | ||||
|     } | ||||
|  | ||||
|     if(emu){ | ||||
|         s->dsp.emulated_edge_mc(s->edge_emu_buffer, src_cb, h->c_stride, | ||||
| @@ -379,11 +377,12 @@ static inline void mc_dir_part(AVSContext *h,Picture *pic,int square, | ||||
|     chroma_op(dest_cr, src_cr, h->c_stride, chroma_height, mx&7, my&7); | ||||
| } | ||||
|  | ||||
| static inline void mc_part_std(AVSContext *h,int square,int chroma_height,int delta, | ||||
|                         uint8_t *dest_y,uint8_t *dest_cb,uint8_t *dest_cr, | ||||
|                         int x_offset, int y_offset,qpel_mc_func *qpix_put, | ||||
|                         h264_chroma_mc_func chroma_put,qpel_mc_func *qpix_avg, | ||||
|                         h264_chroma_mc_func chroma_avg, cavs_vector *mv){ | ||||
| static inline void mc_part_std(AVSContext *h,int chroma_height,int delta, | ||||
|                                uint8_t *dest_y,uint8_t *dest_cb,uint8_t *dest_cr, | ||||
|                                int x_offset, int y_offset,qpel_mc_func *qpix_put, | ||||
|                                h264_chroma_mc_func chroma_put,qpel_mc_func *qpix_avg, | ||||
|                                h264_chroma_mc_func chroma_avg, cavs_vector *mv) | ||||
| { | ||||
|     qpel_mc_func *qpix_op=  qpix_put; | ||||
|     h264_chroma_mc_func chroma_op= chroma_put; | ||||
|  | ||||
| @@ -395,7 +394,7 @@ static inline void mc_part_std(AVSContext *h,int square,int chroma_height,int de | ||||
|  | ||||
|     if(mv->ref >= 0){ | ||||
|         Picture *ref= &h->DPB[mv->ref]; | ||||
|         mc_dir_part(h, ref, square, chroma_height, delta, 0, | ||||
|         mc_dir_part(h, ref, chroma_height, delta, 0, | ||||
|                     dest_y, dest_cb, dest_cr, x_offset, y_offset, | ||||
|                     qpix_op, chroma_op, mv); | ||||
|  | ||||
| @@ -405,7 +404,7 @@ static inline void mc_part_std(AVSContext *h,int square,int chroma_height,int de | ||||
|  | ||||
|     if((mv+MV_BWD_OFFS)->ref >= 0){ | ||||
|         Picture *ref= &h->DPB[0]; | ||||
|         mc_dir_part(h, ref, square, chroma_height, delta, 1, | ||||
|         mc_dir_part(h, ref, chroma_height, delta, 1, | ||||
|                     dest_y, dest_cb, dest_cr, x_offset, y_offset, | ||||
|                     qpix_op, chroma_op, mv+MV_BWD_OFFS); | ||||
|     } | ||||
| @@ -413,28 +412,28 @@ static inline void mc_part_std(AVSContext *h,int square,int chroma_height,int de | ||||
|  | ||||
| void ff_cavs_inter(AVSContext *h, enum cavs_mb mb_type) { | ||||
|     if(ff_cavs_partition_flags[mb_type] == 0){ // 16x16 | ||||
|         mc_part_std(h, 1, 8, 0, h->cy, h->cu, h->cv, 0, 0, | ||||
|         mc_part_std(h, 8, 0, h->cy, h->cu, h->cv, 0, 0, | ||||
|                 h->cdsp.put_cavs_qpel_pixels_tab[0], | ||||
|                 h->s.dsp.put_h264_chroma_pixels_tab[0], | ||||
|                 h->cdsp.avg_cavs_qpel_pixels_tab[0], | ||||
|                 h->s.dsp.avg_h264_chroma_pixels_tab[0],&h->mv[MV_FWD_X0]); | ||||
|     }else{ | ||||
|         mc_part_std(h, 1, 4, 0, h->cy, h->cu, h->cv, 0, 0, | ||||
|         mc_part_std(h, 4, 0, h->cy, h->cu, h->cv, 0, 0, | ||||
|                 h->cdsp.put_cavs_qpel_pixels_tab[1], | ||||
|                 h->s.dsp.put_h264_chroma_pixels_tab[1], | ||||
|                 h->cdsp.avg_cavs_qpel_pixels_tab[1], | ||||
|                 h->s.dsp.avg_h264_chroma_pixels_tab[1],&h->mv[MV_FWD_X0]); | ||||
|         mc_part_std(h, 1, 4, 0, h->cy, h->cu, h->cv, 4, 0, | ||||
|         mc_part_std(h, 4, 0, h->cy, h->cu, h->cv, 4, 0, | ||||
|                 h->cdsp.put_cavs_qpel_pixels_tab[1], | ||||
|                 h->s.dsp.put_h264_chroma_pixels_tab[1], | ||||
|                 h->cdsp.avg_cavs_qpel_pixels_tab[1], | ||||
|                 h->s.dsp.avg_h264_chroma_pixels_tab[1],&h->mv[MV_FWD_X1]); | ||||
|         mc_part_std(h, 1, 4, 0, h->cy, h->cu, h->cv, 0, 4, | ||||
|         mc_part_std(h, 4, 0, h->cy, h->cu, h->cv, 0, 4, | ||||
|                 h->cdsp.put_cavs_qpel_pixels_tab[1], | ||||
|                 h->s.dsp.put_h264_chroma_pixels_tab[1], | ||||
|                 h->cdsp.avg_cavs_qpel_pixels_tab[1], | ||||
|                 h->s.dsp.avg_h264_chroma_pixels_tab[1],&h->mv[MV_FWD_X2]); | ||||
|         mc_part_std(h, 1, 4, 0, h->cy, h->cu, h->cv, 4, 4, | ||||
|         mc_part_std(h, 4, 0, h->cy, h->cu, h->cv, 4, 4, | ||||
|                 h->cdsp.put_cavs_qpel_pixels_tab[1], | ||||
|                 h->s.dsp.put_h264_chroma_pixels_tab[1], | ||||
|                 h->cdsp.avg_cavs_qpel_pixels_tab[1], | ||||
|   | ||||
| @@ -54,7 +54,7 @@ static av_cold int libspeex_decode_init(AVCodecContext *avctx) | ||||
|     if (s->header) { | ||||
|         avctx->sample_rate = s->header->rate; | ||||
|         avctx->channels    = s->header->nb_channels; | ||||
|                              s->frame_size = s->header->frame_size; | ||||
|         s->frame_size      = s->header->frame_size; | ||||
|  | ||||
|         mode = speex_lib_get_mode(s->header->mode); | ||||
|         if (!mode) { | ||||
|   | ||||
| @@ -661,7 +661,7 @@ static int smka_decode_frame(AVCodecContext *avctx, void *data, | ||||
|     } | ||||
|     if(bits) { //decode 16-bit data | ||||
|         for(i = stereo; i >= 0; i--) | ||||
|             pred[i] = av_bswap16(get_bits(&gb, 16)); | ||||
|             pred[i] = sign_extend(av_bswap16(get_bits(&gb, 16)), 16); | ||||
|         for(i = 0; i <= stereo; i++) | ||||
|             *samples++ = pred[i]; | ||||
|         for(; i < unp_size / 2; i++) { | ||||
|   | ||||
| @@ -22,6 +22,7 @@ | ||||
| #include "libavutil/crc.h" | ||||
| #include "libavutil/opt.h" | ||||
| #include "libavutil/mathematics.h" | ||||
| #include "libavutil/opt.h" | ||||
| #include "libavutil/random_seed.h" | ||||
| #include "libavcodec/xiph.h" | ||||
| #include "libavcodec/bytestream.h" | ||||
| @@ -69,18 +70,22 @@ typedef struct { | ||||
|     int pref_size; ///< preferred page size (0 => fill all segments) | ||||
| } OGGContext; | ||||
|  | ||||
| #define OFFSET(x) offsetof(OGGContext, x) | ||||
| #define PARAM AV_OPT_FLAG_ENCODING_PARAM | ||||
|  | ||||
| static const AVOption options[] = { | ||||
|     { "oggpagesize", "Set preferred Ogg page size.", | ||||
|       offsetof(OGGContext, pref_size), AV_OPT_TYPE_INT, {.dbl = 0}, 0, MAX_PAGE_SIZE, AV_OPT_FLAG_ENCODING_PARAM}, | ||||
|     { "pagesize", "preferred page size in bytes", | ||||
|         OFFSET(pref_size), AV_OPT_TYPE_INT, { 0 }, 0, MAX_PAGE_SIZE, PARAM }, | ||||
|     { NULL }, | ||||
| }; | ||||
|  | ||||
| static const AVClass ogg_muxer_class = { | ||||
|     "Ogg muxer", | ||||
|     av_default_item_name, | ||||
|     options, | ||||
|     LIBAVUTIL_VERSION_INT, | ||||
|     .class_name = "Ogg muxer", | ||||
|     .item_name  = av_default_item_name, | ||||
|     .option     = options, | ||||
|     .version    = LIBAVUTIL_VERSION_INT, | ||||
| }; | ||||
|  | ||||
|  | ||||
| @@ -209,8 +214,7 @@ static int ogg_buffer_data(AVFormatContext *s, AVStream *st, | ||||
|     // them as such, otherwise seeking will not work correctly at the very | ||||
|     // least with old libogg versions. | ||||
|     // Do not try to flush header packets though, that will create broken files. | ||||
|     if (st->codec->codec_id == CODEC_ID_THEORA && | ||||
|         !header && | ||||
|     if (st->codec->codec_id == CODEC_ID_THEORA && !header && | ||||
|         (ogg_granule_to_timestamp(oggstream, granule) > | ||||
|          ogg_granule_to_timestamp(oggstream, oggstream->last_granule) + 1 || | ||||
|          ogg_key_granule(oggstream, granule))) { | ||||
| @@ -241,8 +245,8 @@ static int ogg_buffer_data(AVFormatContext *s, AVStream *st, | ||||
|         if (i == total_segments) | ||||
|             page->granule = granule; | ||||
|  | ||||
|         if(page->segments_count == 255 || | ||||
|            (ogg->pref_size > 0 && page->size >= ogg->pref_size)) { | ||||
|         if (!header && (page->segments_count == 255 || | ||||
|             (ogg->pref_size > 0 && page->size >= ogg->pref_size))) { | ||||
|            ogg_buffer_page(s, oggstream); | ||||
|         } | ||||
|     } | ||||
| @@ -547,5 +551,5 @@ AVOutputFormat ff_ogg_muxer = { | ||||
|     .write_header      = ogg_write_header, | ||||
|     .write_packet      = ogg_write_packet, | ||||
|     .write_trailer     = ogg_write_trailer, | ||||
|     .priv_class = &ogg_muxer_class, | ||||
|     .priv_class        = &ogg_muxer_class, | ||||
| }; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Michael Niedermayer
					Michael Niedermayer