| 143 | } |
| 144 | |
| 145 | static int evc_read_packet(AVFormatContext *s, AVPacket *pkt) |
| 146 | { |
| 147 | int ret; |
| 148 | uint32_t nalu_size; |
| 149 | int au_end_found = 0; |
| 150 | EVCDemuxContext *const c = s->priv_data; |
| 151 | |
| 152 | while(!au_end_found) { |
| 153 | uint8_t buf[EVC_NALU_LENGTH_PREFIX_SIZE]; |
| 154 | |
| 155 | if (avio_feof(s->pb)) |
| 156 | goto end; |
| 157 | |
| 158 | ret = ffio_ensure_seekback(s->pb, EVC_NALU_LENGTH_PREFIX_SIZE); |
| 159 | if (ret < 0) |
| 160 | return ret; |
| 161 | |
| 162 | ret = avio_read(s->pb, buf, EVC_NALU_LENGTH_PREFIX_SIZE); |
| 163 | if (ret < 0) |
| 164 | return ret; |
| 165 | if (ret != EVC_NALU_LENGTH_PREFIX_SIZE) |
| 166 | return AVERROR_INVALIDDATA; |
| 167 | |
| 168 | nalu_size = evc_read_nal_unit_length(buf, EVC_NALU_LENGTH_PREFIX_SIZE); |
| 169 | if (!nalu_size || nalu_size > INT_MAX) |
| 170 | return AVERROR_INVALIDDATA; |
| 171 | |
| 172 | avio_seek(s->pb, -EVC_NALU_LENGTH_PREFIX_SIZE, SEEK_CUR); |
| 173 | |
| 174 | ret = av_get_packet(s->pb, pkt, nalu_size + EVC_NALU_LENGTH_PREFIX_SIZE); |
| 175 | if (ret < 0) |
| 176 | return ret; |
| 177 | if (ret != (nalu_size + EVC_NALU_LENGTH_PREFIX_SIZE)) |
| 178 | return AVERROR_INVALIDDATA; |
| 179 | |
| 180 | end: |
| 181 | ret = av_bsf_send_packet(c->bsf, pkt); |
| 182 | if (ret < 0) { |
| 183 | av_log(s, AV_LOG_ERROR, "Failed to send packet to " |
| 184 | "evc_frame_merge filter\n"); |
| 185 | return ret; |
| 186 | } |
| 187 | |
| 188 | ret = av_bsf_receive_packet(c->bsf, pkt); |
| 189 | if (ret < 0 && ret != AVERROR(EAGAIN) && ret != AVERROR_EOF) |
| 190 | av_log(s, AV_LOG_ERROR, "evc_frame_merge filter failed to " |
| 191 | "send output packet\n"); |
| 192 | |
| 193 | if (ret != AVERROR(EAGAIN)) |
| 194 | au_end_found = 1; |
| 195 | } |
| 196 | |
| 197 | return ret; |
| 198 | } |
| 199 | |
| 200 | static int evc_read_close(AVFormatContext *s) |
| 201 | { |
nothing calls this directly
no test coverage detected